需要的jar包:
jfreechart-1.0.13.jar
jcommon-1.0.14.jar

package com.viathink.lims.util;import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;
import java.util.Map;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.RectangleInsets;public class ChartImgUtil {/*** 创建折线图* * @param dateList*            map的key:'name'为x轴值 count为y轴值* @param title*            标题名* @param xName*            X轴标题* @param yName*            Y轴标题* @param imgPath*            图片存储路径* @throws Exception*/public static void writeLineImg(List<Map<String, Object>> dateList, String title, String xName, String yName,String imgPath) throws Exception {DefaultCategoryDataset dataset = getLineDataset(dateList);JFreeChart chart = ChartFactory.createLineChart(title, // 标题xName, // categoryAxisLabel (category轴,横轴,X轴标签)yName, // valueAxisLabel(value轴,纵轴,Y轴的标签)dataset, // datasetPlotOrientation.VERTICAL, false, // legendfalse, // tooltipsfalse); // URLschart.setBackgroundPaint(Color.WHITE);chart.setBackgroundPaint(Color.WHITE);// 配置字体(解决中文乱码的通用方法)Font xfont = new Font("黑体", Font.BOLD, 14); // X轴Font yfont = new Font("黑体", Font.BOLD, 14); // Y轴Font titleFont = new Font("宋体", Font.BOLD, 20); // 图片标题CategoryPlot categoryPlot = chart.getCategoryPlot();categoryPlot.getDomainAxis().setLabelFont(xfont);categoryPlot.getRangeAxis().setLabelFont(yfont);chart.getTitle().setFont(titleFont);categoryPlot.setBackgroundPaint(Color.WHITE);// x轴 // 分类轴网格是否可见categoryPlot.setDomainGridlinesVisible(true);// y轴 //数据轴网格是否可见categoryPlot.setRangeGridlinesVisible(true);// 设置网格竖线颜色categoryPlot.setDomainGridlinePaint(Color.LIGHT_GRAY);// 设置网格横线颜色categoryPlot.setRangeGridlinePaint(Color.LIGHT_GRAY);// 没有数据时显示的文字说明categoryPlot.setNoDataMessage("没有数据显示");// 设置曲线图与xy轴的距离categoryPlot.setAxisOffset(new RectangleInsets(0d, 0d, 0d, 0d));// 设置面板字体Font labelFont = new Font("黑体", Font.BOLD, 14);// 取得Y轴NumberAxis rangeAxis = (NumberAxis) categoryPlot.getRangeAxis();rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());rangeAxis.setAutoRangeIncludesZero(true);rangeAxis.setUpperMargin(0.20);rangeAxis.setLabelAngle(Math.PI / 2.0);//注释此行Y轴小标题 垂直显示// 取得X轴CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();// 设置X轴坐标上的文字categoryAxis.setTickLabelFont(labelFont);// 设置X轴的标题文字categoryAxis.setLabelFont(labelFont);// 横轴上的 Lable 45度倾斜categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);// 设置距离图片左端距离categoryAxis.setLowerMargin(0.0);// 设置距离图片右端距离categoryAxis.setUpperMargin(0.0);// 获得renderer 注意这里是下嗍造型到lineandshaperenderer!!LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryPlot.getRenderer();// 是否显示折点lineandshaperenderer.setBaseShapesVisible(true);// 是否显示折线lineandshaperenderer.setBaseLinesVisible(true);// series 点(即数据点)间有连线可见 显示折点数据lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());lineandshaperenderer.setBaseItemLabelsVisible(true);creatImg(chart, imgPath);}/*** 创建柱形图* * @param dateList*            map的key:'name'为x轴值 count为y轴值* @param title*            标题名* @param xName*            X轴标题* @param yName*            Y轴标题* @param imgPath*            图片存储路径* @throws Exception*/public static void writeBarImg(List<Map<String, Object>> dateList, String title, String xName, String yName,String imgPath) throws Exception {CategoryDataset dataset = getBarDataSet(dateList);JFreeChart chart = ChartFactory.createBarChart3D(title, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直false, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);// 从这里开始CategoryPlot plot = chart.getCategoryPlot();// 获取图表区域对象CategoryAxis domainAxis = plot.getDomainAxis(); // 水平底部列表domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 14)); // 水平底部标题domainAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 14)); // 垂直标题// 横轴上的 Lable 45度倾斜domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);ValueAxis rangeAxis = plot.getRangeAxis();// 获取柱状rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 15));// chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));//不显示图例,此行必须注释chart.getTitle().setFont(new Font("宋体", Font.BOLD, 20));// 设置标题字体rangeAxis.setUpperMargin(0.1);// 设置顶部Y坐标轴间距,防止数据无法显示rangeAxis.setLowerMargin(0.1);// 设置底部Y坐标轴间距creatImg(chart, imgPath);}/*** 创建饼图* * @param dateList*            map的key:'name'为x轴值 count为y轴值* @param title*            标题名* @param xName*            X轴标题* @param yName*            Y轴标题* @param imgPath*            图片存储路径* @throws Exception*/public static void writePieImg(List<Map<String, Object>> dateList, String title, String xName, String yName,String imgPath) throws Exception {DefaultPieDataset data = getPieDataSet(dateList);JFreeChart chart = ChartFactory.createPieChart3D(title, data, false, false, false);// 设置百分比PiePlot pieplot = (PiePlot) chart.getPlot();DecimalFormat df = new DecimalFormat("0.00%");// 获得一个DecimalFormat对象,主要是设置小数问题NumberFormat nf = NumberFormat.getNumberInstance();// 获得一个NumberFormat对象
//      StandardPieSectionLabelGenerator sp1 = new StandardPieSectionLabelGenerator("{0}  {2}", nf, df);// 获得StandardPieSectionLabelGenerator对象pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{1}({2})", nf, df));// 设置饼图显示百分比// 没有数据的时候显示的内容pieplot.setNoDataMessage("无数据显示");pieplot.setCircular(false);pieplot.setLabelGap(0.02D);pieplot.setIgnoreNullValues(true);// 设置不显示空值pieplot.setIgnoreZeroValues(true);// 设置不显示负值chart.getTitle().setFont(new Font("宋体", Font.BOLD, 20));// 设置标题字体PiePlot piePlot = (PiePlot) chart.getPlot();// 获取图表区域对象piePlot.setLabelFont(new Font("宋体", Font.BOLD, 15));// 解决乱码creatImg(chart, imgPath);}public static void creatImg(JFreeChart chart, String path) throws Exception {FileOutputStream out = null;File outFile = new File(path);out = new FileOutputStream(outFile);// 保存为JPEGChartUtilities.writeChartAsJPEG(out, chart, 800, 600);// 保存为PNG// ChartUtilities.writeChartAsPNG(out, chart, weight, height);out.flush();if (out != null) {try {out.close();} catch (IOException e) {// do nothinge.printStackTrace();}}}private static DefaultCategoryDataset getLineDataset(List<Map<String, Object>> dateList) {DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (Map<String, Object> map : dateList) {dataset.setValue(Integer.parseInt(map.get("count").toString()), "", map.get("name").toString());}return dataset;}private static CategoryDataset getBarDataSet(List<Map<String, Object>> dateList) {DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (Map<String, Object> map : dateList) {dataset.addValue(Integer.parseInt(map.get("count").toString()), map.get("name").toString(), map.get("name").toString());}return dataset;}private static DefaultPieDataset getPieDataSet(List<Map<String, Object>> dateList) {DefaultPieDataset dataset = new DefaultPieDataset();for (Map<String, Object> map : dateList) {dataset.setValue(map.get("name").toString(), Integer.parseInt(map.get("count").toString()));}return dataset;}}

java生成折线图,饼状图,柱形图相关推荐

  1. java 生成柱状图、饼状图等图片保存至word文档

    写在前面,springboot pom 中引入下面就可以了,省了在csdn找包很麻烦. <dependency><artifactId>jfreechart</artif ...

  2. jsp怎么做柱状图_用jsp怎样生成柱状图,饼状图,折线图

    展开全部 jsp生成柱状图,饼状图,折线图可以32313133353236313431303231363533e59b9ee7ad9431333339663338借助于jfreechart. 1.柱状 ...

  3. canvas制作柱形图/折线图/饼状图,Konva写动态饼状图

    制作饼状图 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  4. Java创建柱状图及饼状图

    Java创建图表其实还是很方便的,但是要引入相关的jar包.如下 jfreechart.jar jcommon,jar gnujaxp.jar 其中最主要的是jfreechart.jar. 下面就让我 ...

  5. MPAndroidChart 折线图 饼状图 条形图 最简单使用方式(kotlin)

    首先,我是一个小白,最近做安卓,突然碰到需要做一个饼状图 一个折线图 一个条形图显示出来,没有什么要求,只要能显示出来就可以,既然这样的话,那我就需要找到这三个图最简单的实现方式,发现使用MPAndr ...

  6. echart关系树状图_echart.js制作树状图饼状图;

    // Step:3 conifg ECharts's path, link to echarts.js from current page. // Step:3 为模块加载器配置echarts的路径, ...

  7. Poi 如何使用Java和POI技术生成折线图,柱状图,饼状图导出到word文档

    这篇文章主要介绍POI生成图表并导出word文档的基本操作.主要介绍三种图表:折线图.柱状图.饼状图. 一.效果展示 使用Java和POI技术生成的折线图,柱状图,饼状图的效果如下图所示: 二.环境准 ...

  8. python中输出手机话费_用Python生成柱状图、折线图、饼状图来统计自己的手机话费...

    环境 macOS PyCharm 依赖库 matplotlib numpy 中文字体 步骤详解 一.配置依赖包 使用pycharm,直接依赖 matplotlib,如果当前环境变量的pip中不包含 m ...

  9. .net之生成图表的控件(柱状图,曲线图,饼状图) [转]

    可以生成柱状图,曲线图,饼状图,只要你给他一个datatable,在这声明一下 using System; using System.Web.UI; using System.Data; using  ...

  10. Plotly.js使用详细介绍(折线图、饼状图、点图、水平条形图、桑基图、树状图、等值线图)

    目录 0 写在前面 1 HTML代码 2 折线图 2.1 基本折线图 2.2 复杂折线图 2.2.1 轨迹 2.2.2 布局 3 饼状图 3.1 基本饼状图 3.2 饼图子图 3.3 甜甜圈图 4 点 ...

最新文章

  1. 什么是婚礼一条龙服务及一站式服务
  2. 【泛型】Generic 参数化类型 类型转换
  3. Cassandra1.2文档学习(7)—— 规划集群部署
  4. 动手学无人驾驶(6):基于IMU和GPS数据融合的自车定位
  5. 萧县机器人_全国总决赛第一名!萧县杨楼的这位学生厉害了
  6. linux apache php显示源码,linux 源码安装apache PHP 问题
  7. Zookeeper和etcd比较
  8. Iranian ChamPions Cup 水题
  9. xp无法远程计算机共享,解决XP局域网共享不能访问的问题
  10. Excel如何将xlsx后缀格式的文件转为xls格式?
  11. GNSS《GPS测量原理及应用》复习题集
  12. 清华贫困生的树洞,没有卖惨与诉苦,那股韧劲直抵人心
  13. Joel Spolsky在耶鲁大学的演讲
  14. 2021-05-12 MongoDB面试题 简单的描述下MongoDB选举流程
  15. 云计算是什么意思,还是先了解一下云计算技术的基本概念
  16. logback系列之二:输出日志到文件
  17. 如何正确解决win10系统下C盘空间不能扩展的问题!
  18. VVC帧内预测(一)
  19. 看完了 vue-cli 源码,总结了这几个点
  20. 加密算法与大数据安全

热门文章

  1. Image-based Lighting approaches and parallax-corrected cubemap
  2. UE4的编译配置详解
  3. 【分布式缓存系列】Redis实现分布式锁的正确姿势
  4. Windows下的Linux开发环境Cygwin
  5. java程序执行的底层原理
  6. 基于C++与VS2012的HDF5文件处理(一)
  7. phpcms v9 打开网站特别慢 增加数据库缓存方法
  8. Android1 按钮
  9. mysql5.6编译
  10. 如何获取网站的ico图标呢?