JFreeChart| 图解JFreeChart中的条形图/柱状图(BarChart)

2024-06-09 12:32

本文主要是介绍JFreeChart| 图解JFreeChart中的条形图/柱状图(BarChart),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

条形图样式展示,其他基于CategoryPlot类型的LineChart等等于该设置类似.
这里写图片描述


本文数据集

本文所使用的数据集如下:

    private static CategoryDataset createDataset() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(1.0, "Row 1", "Column 1");dataset.addValue(5.0, "Row 1", "Column 2");dataset.addValue(3.0, "Row 1", "Column 3");dataset.addValue(2.0, "Row 2", "Column 1");dataset.addValue(3.0, "Row 2", "Column 2");dataset.addValue(2.0, "Row 2", "Column 3");return dataset;}

一.常见功能设置


1.标题设置

TextTitle title = new TextTitle("BarChartDemo -Yves", JFreeChart.DEFAULT_TITLE_FONT); // 还可以设置颜色,位置等...
chart.setTitle(title);

2.图例设置

chart.removeLegend();// 图例是默认显示的,使用该方法不显示图例LegendTitle legend = chart.getLegend();
if (legend != null) {legend.setFrame(new BlockBorder(Color.RED));// 通过Color.WHITE隐藏legend.setItemPaint(Color.RED);// 设置图例画笔颜色(也就是文字颜色)legend.setBackgroundPaint(Color.DARK_GRAY);// 设置图例背景色
}

3.图表背景

// 图表整个背景颜色设置
chart.setBackgroundPaint(Color.PINK);

4.图表绘制背景设置

注意图表绘制区域是只图表展示区域,而不是整个面板区域,这里就是条形图BarChart展示的区域.

Plot plot = chart.getPlot();// 图表绘制线条的透明度
plot.setForegroundAlpha(1f);// 1为不透明// 图表绘制背景透明度
plot.setBackgroundAlpha(0.5F);// 图表绘制背景颜色
plot.setBackgroundPaint(Color.BLUE);// 比如画图区域的背景颜色,要与报表的整个背景颜色区分开来// 图表绘制背景边框线设置
plot.setOutlinePaint(Color.YELLOW);// 颜色
plot.setOutlineStroke(new BasicStroke(2.f));// 大小
plot.setOutlineVisible(true);// 是否显示

5.图表绘制中网格线设置

 // 设置背景中的网格线颜色,和是否显示cPlot.setDomainGridlinePaint(Color.white);cPlot.setDomainGridlinesVisible(true);// 竖线cPlot.setRangeGridlinePaint(Color.white);cPlot.setRangeGridlinesVisible(true);// 横线

6.X轴设置

CategoryAxis domainAxis = cPlot.getDomainAxis();// X轴标签位置设置
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);//设置种类标签旋转为90度// X轴的标签设置
domainAxis.setLabel(null);//通过实例化Chart的时候设置,实例化后可以通过该方法设置,null为不显示

7.Y轴设置

NumberAxis numberaxis = (NumberAxis) cPlot.getRangeAxis();//Y轴增长单元设置
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
numberaxis.setAutoRangeIncludesZero(true);// 起始坐标是否包括0// Y轴的标签设置
numberaxis.setLabel(null);//通过实例化Chart的时候设置,实例化后可以通过该方法设置,null为不显示// Y轴显示格式定制  (定制成显示百分比)
NumberAxis newNumberaxis = new NumberAxis("Percentage");//构造参数为Y轴显示的label
newNumberaxis.setNumberFormatOverride(new DecimalFormat("0.00%"));
cPlot.setRangeAxis(newNumberaxis);

8.标记范围值设置

CategoryPlot cPlot = chart.getCategoryPlot();// 标记范围值设置
ValueMarker localValueMarker = new ValueMarker(3.0D, new Color(200, 200, 255), new BasicStroke(1.0F), Color.BLACK, new BasicStroke(1.0F), 1.0F);
cPlot.addRangeMarker(localValueMarker, Layer.BACKGROUND);

二.柱状图相关设置


1.柱状图外廓线设置

注意: 基础的外廓线设置,如果只需要对指定的Series设定则使用setSeriesOutlinePaint方法

renderer.setDrawBarOutline(true);// 是否可见
renderer.setBaseOutlineStroke(new BasicStroke(2.0f), true);// 外廓线粗细
renderer.setBaseOutlinePaint(Color.BLUE); // 颜色设置

2.设置柱状图渲染器

renderer.setBarPainter(new StandardBarPainter());// 标准的渲染器(支持颜色渐变)
renderer.setBarPainter(new GradientBarPainter()); //梯度条形图渲染器(不支持颜色渐变)

3.柱状图颜色渐变设置

注意需要渲染器为StandardBarPainter.

renderer.setBarPainter(new StandardBarPainter());GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.red, 0.0F, 0.0F, new Color(64, 0, 0));
GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F, new Color(0, 64, 0));
GradientPaint gradientpaint3 = new GradientPaint(0.0F, 0.0F, Color.BLUE, 0.0F, 0.0F, new Color(64, 0, 0));
renderer.setSeriesPaint(0, gradientpaint);
renderer.setSeriesPaint(1, gradientpaint2);//设置系列1为颜色渐变绿色
renderer.setSeriesPaint(2, gradientpaint3);

4.柱状图标签Label设置

renderer.setBaseItemLabelGenerator(new LabelGenerator());// 标签生成器,一定要设置
renderer.setBaseItemLabelsVisible(true);// 是否显示标签,如果需要显示,则需要设置标签生成器
ItemLabelPosition position1 = new ItemLabelPosition(ItemLabelAnchor.INSIDE12, TextAnchor.CENTER_RIGHT, TextAnchor.CENTER_RIGHT, -1.570796326794897D);
renderer.setBasePositiveItemLabelPosition(position1);// 设置基础标签位置
ItemLabelPosition position2 = new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.CENTER_LEFT, TextAnchor.CENTER_LEFT, -1.570796326794897D);
renderer.setPositiveItemLabelPositionFallback(position2);

自定义标签生成器
生成ItemLabel: 如果不需要显示Label,返回null值既可, 在StandardCategoryItemLabelGenerator中提供简单API对指定Series的label进行显示或隐藏设置,但是如果是使用的自定义CategoryItemLabelGenerator则不会生效.

 static class LabelGenerator extends StandardCategoryItemLabelGenerator {StandardCategoryItemLabelGeneratorrenderer.setSeriesItemLabelsVisible(0, Boolean.TRUE);@Overridepublic String generateLabel(CategoryDataset paramCategoryDataset, int rowKey, int columnKey) {Number value = paramCategoryDataset.getValue(rowKey, columnKey);return value.toString();}}

5.柱状图各个Serie柱子之间间隙设置

renderer.setItemMargin(0.2f);// 0为取消两个Series之前的间隙

这篇关于JFreeChart| 图解JFreeChart中的条形图/柱状图(BarChart)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045188

相关文章

图解float属性的详细信息

转自:http://www.cnblogs.com/58top/archive/2013/01/09/details_about_float_property.html 正确使用CSS的float属性可能会变成一项艰巨的任务,,它涉及内容过多,浏览器兼容性问题也很多。它的定位不仅涉及 包含块,还涉及到了行框,块框,还有行内框等内容。本文包含的实施例的应用属性float说明性例子,以及一些失误

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词:游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中,既要模块高度独立(解耦)又要共享模块数据,最好的方法是有个中间平台(中间件)提供标准的接口来进行数据的交换,这在很多行业软件开发中已经广泛应用。但是,由于中间件的抽象和封

图解注意力

图解注意力 Part #2: The Illustrated Self-Attention 在文章前面的部分,我们展示了这张图片来展示自注意力被应用于正在处理单词"it"的一层中: 在本节中,我们将看看这是如何完成的。请注意,我们将以一种试图理解单个单词发生什么的方式来看待它。这就是为什么我们将展示许多单独的向量。实际的实现是通过将巨大的矩阵相乘在一起来完成的。但我想专注于这里单词层面上发

代码随想录算法训练营day62 | 42. 接雨水、84.柱状图中最大的矩形

42. 接雨水 暴力解法 遍历每根柱子(第一个和最后一个不需要遍历,因为不可能存住水),找到当前柱子的左边最高柱子lHeight,右边最高柱子rHeight,当前柱子能存的水为min(min(lHeight, rHeight) - 当前柱子的高度, 0) class Solution:def trap(self, height: List[int]) -> int:result = 0for

[图解]建模相关的基础知识-16

1 00:00:00,350 --> 00:00:04,130 刚才那个,就相当于,12这个我们可以认为是什么 2 00:00:05,020 --> 00:00:11,360 我们用类图来表达就是,员工、电话 3 00:00:13,320 --> 00:00:15,080 多个 4 00:00:15,090 --> 00:00:16,440 当然这个电话这里 5 00:00:16,970

【Flutter 专题】112 图解自定义 ACEPieWidget 饼状图 (一)

类别选项球;切割绘制饼状图;饼状图中绘制文字; 1. 类别选项球 对于两侧不同颜色类别选项卡,仅需要简单设置一下 Container 的 decoration 装饰器即可,只是方便用户查看饼状图分类而已; return Container( height: 45, width: 45, margin: EdgeInsets.symmetric(vertical: 2.5, horizonta

MATLAB | 怎样绘制这样的环形柱状图

Hey, 各位又是好久不见,最近忙到后台消息都有些来不及看,非常抱歉,今天带来一个环形柱状图绘制的简易小代码,绘制效果如下: 下面直接给出完整代码,替换一下数据即可,代码都有注释的: 完整代码 环形柱状图 % author : slandarer% 生成随机数据rng(13)Data = randi([1,100], [6,1]);% 数据名称% 'Class-1','Clas

[图解]企业应用架构模式2024新译本讲解16-行数据入口2

1 00:00:00,750 --> 00:00:02,470 好,我们来看代码 2 00:00:03,430 --> 00:00:06,070 我们一步一步执行 3 00:00:42,500 --> 00:00:45,000 先初始化数据 4 00:00:52,300 --> 00:00:53,650 创建连接 5 00:00:55,900 --> 00:00:56,970 这里面 6

AI数据分析:根据时间序列数据生成动态条形图

动态条形竞赛图(Bar Chart Race)是一种通过动画展示分类数据随时间变化的可视化工具。它通过动态条形图的形式,展示不同类别在不同时间点的数据排名和变化情况。这种图表非常适合用来展示时间序列数据的变化,能够直观地显示数据随时间的演变过程。 制作动态条形竞赛图的方法有很多,其中一些常见的工具和库包括: Highcharts:可以使用Highcharts库来创建动态条形竞赛图,利用其数据排

小林图解系统-五.进程管理 5.4.怎么避免死锁?

死锁的概念 多线程编程中国,为了防止多线程竞争共享资源而导致数错乱,都会在操作共享资源之前加上互斥锁,只有成功获得锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。 当两个线程为了保护两个不同的共享资源而使用了两个互斥锁,那么这两个互斥锁应用不当的时候,会造成两个线程都在等待对方释放锁,在没有外力的作用下,这些线程会一直相互等待,没办法继续运行,这种情况就是发生了死锁。