JFreeChart--柱状图

JFreeChart是一个Java图表库,用于在应用程序、Applets、Servlets和JSP中生成各种图表,包括饼图、柱状图、散点图、时序图和甘特图。该库支持PNG、JPEG格式输出,还能与PDF和Excel进行交互。本文重点介绍如何利用JFreeChart生成柱状图。

JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。


源码:

	@Test
	public void createHistogram() {
		//1、创建数据集
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(510, "深圳", "苹果");
		dataset.addValue(320, "深圳", "香蕉");
		dataset.addValue(580, "深圳", "橘子");
		dataset.addValue(390, "深圳", "梨子");
		
		//2、创建JFreechart
		JFreeChart chart = ChartFactory.createBarChart("水果销量统计图", "水果", "销量", dataset);
		
		//3、获取图标区域对象
		CategoryPlot plot = chart.getCategoryPlot();
		
		//4、水平底部列表
		CategoryAxis axis = plot.getDomainAxis();
### 使用 JFreeChart 1.5.3 创建柱状图与折线图组合的图表 为了创建一个既包含柱状图又包含折线图的组合图表,可以利用 `JFreeChart` 提供的功能来实现这一目标。具体来说,可以通过创建两个不同的渲染器并将其应用到同一个绘图区域上来完成此操作。 #### 导入必要的库 首先,确保项目中已经包含了 JFreeChart 的依赖项。对于 Maven 用户,在 pom.xml 文件内添加: ```xml <dependency> <groupId>org.jfree</groupId> <artifactId>jfreechart</artifactId> <version>1.5.3</version> </dependency> ``` #### 准备数据集 接下来定义用于绘制的数据源。这里采用默认的时间序列集合作为例子中的数据模型。 ```java DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1, "Series", "Category A"); dataset.addValue(2, "Series", "Category B"); // 添加更多数据... ``` #### 构建图表对象 通过 ChartFactory 工具类构建基础图表实例,并指定其样式为条形图形式。 ```java JFreeChart chart = ChartFactory.createBarChart( "", // 图表标题 "", // X轴标签 "", // Y轴标签 dataset, PlotOrientation.VERTICAL, false, true, false); ``` #### 自定义渲染逻辑 为了让同一张图表上显示两种类型的图形(即柱子加线条),需要分别为它们配置独立的 Render 对象。此处引入 BarRenderer 和 LineAndShapeRenderer 来分别处理这两种情况下的视觉呈现方式。 ```java CategoryPlot plot = (CategoryPlot) chart.getPlot(); // 设置第一个系列使用柱状图渲染器 BarRenderer barRenderer = new BarRenderer(); plot.setRenderer(barRenderer); // 向现有数据集中追加新的列以容纳另一组数值 for(int i=0;i<seriesCount;i++){ ((AbstractCategoryItemLabelGenerator)((BarRenderer)(plot.getRenderers().get(i))).getItemLabels()).setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER)); } // 新增第二个数据集专门用来画曲线 XYDataset xyDataset = createXyDataSet(); // 将 XY 数据集转换成 Category 形式的 Dataset 方便后续混合同一坐标系下展示 IntervalMarker marker = new IntervalMarker(minValue,maxValue,new Color(220,220,220),new BasicStroke()); LayeredXYDataset layeredDataset = new LayeredXYDataset(xyDataset); // 给定一个新的 Renderer 实例负责描绘连线部分 LineAndShapeRenderer lineRenderer = new LineAndShapeRenderer(true,false); lineRenderer.setDefaultShapesVisible(false); lineRenderer.setDrawOutlines(true); lineRenderer.setStroke(new BasicStroke(2f)); // 把新建立好的 renderer 加入到当前 plot 中去 CombinedRangeCategoryPlot combinedPlot = new CombinedRangeCategoryPlot(plot.getDomainAxis()); combinedPlot.add(plot,1); combinedPlot.add(new CategoryPlot(layeredDataset,null,lineRenderer),2); // 更新原始 charts 所关联 plots 属性指向最新组合后的版本 chart.setPlot(combinedPlot); ``` 上述代码片段展示了如何在一个图表里集成柱状图和折线图的效果[^1]。值得注意的是,实际开发过程中可能还需要调整一些细节参数比如颜色方案、字体大小等,以便更好地满足业务需求以及提升用户体验感。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值