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

相关文章

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

图解可观测Metrics, tracing, and logging

最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过,也是去年后半年到现在一直在做和研究的东西。从去年的关于Metrics的goappmonitor,到今年在排查问题时脑洞的基于log全链路(Tracing)追踪系统的设计,正好是对这三个话题的实践。这不禁让我对它们的关系进行思考:Metrics和Loggi

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大

【数据结构】排序算法系列——希尔排序(附源码+图解)

希尔排序 算法思想 希尔排序(Shell Sort)是一种改进的插入排序算法,希尔排序的创造者Donald Shell想出了这个极具创造力的改进。其时间复杂度取决于步长序列(gap)的选择。我们在插入排序中,会发现是对整体数据直接进行了统一的插入排序,每个数据之间的间隙是1,这里的1指的就是步长序列gap。在希尔排序中,我们会将整体数据一分为多份,进行散布式的插入排序,这时候每一个子序列之间的

Echarts使用笔记--饼图,柱状图

开始做前端了,感觉自己是要变成全栈工程师了。。。 今天使用了echart,用之前觉得好高大上好厉害,肯定很复杂。用了以后才发现,使用起来超简单,当然,精通很难,里面的各种配置太多了,本文记录一下自己用到的东西。 echart使用 现在直接引用js文件就可以了 <script src="echarts.min.js"></script> echart组件需要在一个宽高固定的DOM里才能显示

算法图解(8~10贪心,动态规划,K最近邻算法)

贪心算法 在每一步都选择局部最优解,从而期望最终得到全局最优解。 贪心算法并不总能保证全局最优解,因此需要满足以下两个条件: 贪心选择性质:可以通过局部最优选择构造出全局最优解。最优子结构:问题的最优解包含其子问题的最优解。 实例:给定面额的硬币,用最少硬币凑出指定金额 int minCoins(vector<int>& coins, int amount) {int count = 0

Java虚拟机--JVM内存堆布局图解分析

文章来源: https://www.cnblogs.com/WJ5888/p/4374791.html JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢了,当然原因肯定不止这一个,如在JVM中没有数据寄存器,指令集使用的是栈来保存

echarts 多个3D柱状图

图片样式: 代码实现: <template><div :class="className" :style="{height:height,width:width}" /></template><script>require("echarts/theme/sakura"); // echarts themeexport default {props: {className: {typ

【每日一题】LeetCode 84.柱状图中最大的矩形(栈、数组、单调栈)

【每日一题】LeetCode 84.柱状图中最大的矩形(栈、数组、单调栈) 题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 这个题目和接雨水非常类似 点击跳转接雨水 LeetCode 40.接雨水 输入示例 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的