JFreeChart生成条形统计图(柱形图)
来源:互联网 发布:高大上ppt制作技巧知乎 编辑:程序博客网 时间:2024/05/11 06:00
最近一个项目中用到JFreeChart,我的代码。 注释比较全,自己看。
后面带效果图
我的实现方法是 在 实现类 里调用 专用来生成统计图 的方法。
参数传过的是来用于生成统计图的数值。
返回所生成图片的名称
package com.zhh.util;import java.awt.Color;import java.awt.Font;import java.io.File;import java.io.IOException;import java.text.DecimalFormat;import java.util.Iterator;import java.util.List;import java.util.Map;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.AxisLocation;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.DefaultCategoryDataset;import com.brief.pojo.InfeNumDTO;import com.brief.pojo.TranMsg;/* *author zhh */public class CreatePic {/* * 升降比的柱形图 * 参数indList<InfeNumDTO> ind.infeName=病名 ind.infeNum=升降比*10000(转成int型) * tmsg.nameX x轴名称 tmsg.nameY y轴名字 msg date * return 方法所生成图片的名称 */public String getBarChart(List<InfeNumDTO> indList, TranMsg tmsg) {DefaultCategoryDataset dataset = new DefaultCategoryDataset();Iterator<InfeNumDTO> it = indList.iterator();while (it.hasNext()){InfeNumDTO ind = it.next();String key = ind.getInfeName();Double value = Double.valueOf(ind.getInfeNum())/100;if (value != 10000){ //不是新增病种才统计dataset.addValue(value, key, key); //转成两位小树的百分百} else{dataset.addValue(null, "均为新增病种", "均为新增病种");}}String msg = tmsg.getMsg();String picTitle = ""; //统计图名称String picName = ""; //生成图片名称if (msg.equals("与上月")) {picTitle = "本月甲乙类传染病与上月相比较";picName = "compMon" + tmsg.getDate() + ".jpg";} else if (msg.equals("与去年")) {picTitle = "本月甲乙类传染病与去年同期相比较";picName = "compYear" + tmsg.getDate() + ".jpg";}JFreeChart chart = ChartFactory.createBarChart(picTitle, // 标题tmsg.getNameX(), // X轴tmsg.getNameY(), // Y轴dataset, // datasetPlotOrientation.HORIZONTAL, // 图表方向:水平、垂直true, // 是否显示图例 true, // 是否显示工具提示 true); // 是否生成URL CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();CategoryAxis domainAxis = categoryplot.getDomainAxis();TextTitle textTitle = chart.getTitle();//将X轴显示在下方categoryplot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//设置X轴参数格式DecimalFormat df = new DecimalFormat("0.00");numberaxis.setNumberFormatOverride(df);// 柱图的呈现器BarRenderer renderer = new BarRenderer();renderer.setIncludeBaseInRange(true); // 显示每个柱的数值,并修改该数值的字体属性renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseOutlinePaint(Color.BLACK); // 设置柱子边框颜色 renderer.setDrawBarOutline(true); // 设置柱子边框可见renderer.setItemMargin(0.05);// 组内柱子间隔为组宽的10%renderer.setMaximumBarWidth(0.05);//设置条形柱最大宽度renderer.setBaseItemLabelsVisible(true, true);//设置正数柱子是黑色,负数是白色for (int i=0;i<indList.size();i++){int num = indList.get(i).getInfeNum();if (num > 0){renderer.setSeriesPaint(i,Color.black);} else {renderer.setSeriesPaint(i,Color.white);}}categoryplot.setRenderer(renderer); // 给柱图添加呈现器textTitle.setFont(new Font("黑体", Font.PLAIN, 20));domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 14));numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 14));chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 14));ChartFrame frame = new ChartFrame(picTitle, chart);frame.pack();// frame.setVisible(true); String path = this.getClass().getResource("").getPath();int index = path.indexOf("WEB-INF");String imgPath = path.substring(1, index) + "StatImg/";try {ChartUtilities.saveChartAsJPEG(new File(imgPath + picName), chart,640, 480);} catch (IOException e) {e.printStackTrace();}System.out.println("升降比统计图" + picName + "生成完成");return picName;}/* * 升降数的柱形图 * 参数 map 存 msg : 三期发病数 keyList 按大到小的顺序寸的key * 返回 生成图片名称 */public String getNumBarChart(Map<String, List<Integer>> map, List<String> keyList, TranMsg tmsg) {DefaultCategoryDataset dataset = new DefaultCategoryDataset();String picTitle = ""; //统计图名称String picName = ""; //生成图片名称String msg = tmsg.getMsg();if (msg.equals("按病种")) {picTitle = "本月甲乙类传染病与上月及去年同期发病数相比较";picName = "compMY" + tmsg.getDate() + ".jpg";} else if (msg.equals("按街道")) {picTitle = "本月各街道甲乙类传染病与上月及去年同期相比较";picName = "compArea" + tmsg.getDate() + ".jpg";}Iterator<String> it = keyList.iterator();while(it.hasNext()){String key = it.next();List<Integer> vList = map.get(key); dataset.addValue(vList.get(0), "本月", key); dataset.addValue(vList.get(1), "上月", key); dataset.addValue(vList.get(2), "去年同期", key);}JFreeChart chart = ChartFactory.createBarChart(picTitle, // 标题tmsg.getNameX(), // X轴tmsg.getNameY(), // Y轴dataset, // datasetPlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例 true, // 是否显示工具提示 true); // 是否生成URL CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();CategoryAxis domainAxis = categoryplot.getDomainAxis();TextTitle textTitle = chart.getTitle();//domainAxis.setLowerMargin(0.05); //与左边的空区//domainAxis.setUpperMargin(0.05); //右边的空区//domainAxis.setCategoryMargin(0.04); //不同类别间的间距// 柱图的呈现器BarRenderer renderer = new BarRenderer();// renderer.setIncludeBaseInRange(true); // 显示每个柱的数值,并修改该数值的字体属性renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);renderer.setBaseOutlinePaint(Color.BLACK); // 设置柱子边框颜色 renderer.setDrawBarOutline(true); // 设置柱子边框可见renderer.setMaximumBarWidth(0.05);//设置柱子最大宽度//柱子最大宽度设置,会使下面设置柱子间距离方法失效renderer.setItemMargin(0); // 设置同key 三时期的柱子间距离categoryplot.setRenderer(renderer);textTitle.setFont(new Font("黑体", Font.PLAIN, 20));domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));ChartFrame frame = new ChartFrame(picTitle, chart);frame.pack();String path = this.getClass().getResource("").getPath();int index = path.indexOf("WEB-INF");String imgPath = path.substring(1, index) + "StatImg/";try {ChartUtilities.saveChartAsJPEG(new File(imgPath + picName), chart,640, 480);} catch (IOException e) {e.printStackTrace();}System.out.println("发病数统计图" + picName + "生成完成");return picName;}}
---------------------------------------------------------------------------------------------------
今天将前面做的生成统计图 整合进公司项目,发现 jfreechart统计图全部变成了暗红色
最终找到原因: jfreechart jar包版本不同
我用的 jfreechart-1.0.13.jar ,项目用的是1.0.9.jar.
解决方法:
1.升级 jar包
2.saveChartAsJPEG改为saveChartAsPNG
- JFreeChart生成条形统计图(柱形图)
- java中利用JFreeChart生成条形统计图(柱形图)
- echarts生成条形统计图【随记】
- jfreechart生成不同统计图
- JFreeChart生成各种统计图
- 使用JFreeChart生成条形图
- struts运用jfreechart生成统计图教程
- JfreeChart生成统计图,导出word文档
- JFreeChart统计图
- 统计图JFreeChart
- 统计图JFreeChart
- JFreeChart统计图
- 教你如何利用POI和JFreeChart框架实现生成Excel文件(生成 统计图)
- 教你如何利用POI和JFreeChart框架实现生成Excel文件(生成 统计图)
- 自定义条形对比统计图
- 横向条形统计图
- tjuCyc 条形统计图控件
- 自定义条形统计图
- 学习5 获取字段名称
- 调试USB时,鼠标乱跳
- android property_get 与 property_set
- BTrace使用简介
- 非常全的jquery treeview 应用
- JFreeChart生成条形统计图(柱形图)
- BMP位图结构很详细的说明和示例
- WINDOWS驱动开发的两本好书!
- OGRE - Terrain Shadow ,整合OGRE的地形和PSSM+LiSPSM阴影算法
- android GridView的应用举例
- excel@txt 文件导出
- Python 数据库开发
- 24位bmp剪切并转存为单色bmp
- HSQLDB(HyperSQL DataBase)在文件模式(File Mode)下数据的持久化