关于使用jfreechart生成饼状图和柱状图网上也有一大推,我在这里也不做太多介绍,就直接附上我的实现,并添加了一下注释,供大家参考。

生成饼状图:

/*** @param name 图片的名称* @param params 参数* @param title 图片中要显示图片题目,如果不希望展示,需要送空字符串,不能送null* @return 图片的路径或获取地址*/
public String createPie(String name, Map<String, Double> params, String title) {DefaultPieDataset data = getPieDataSet(params);JFreeChart chart = ChartFactory.createPieChart3D(title, data, true, false, false);chart.getTitle().setFont(new Font("黑体", Font.BOLD, 20));//设置标题字体PiePlot piePlot = (PiePlot) chart.getPlot();//获取图表区域对象piePlot.setCircular(true);//设置饼图为圆形piePlot.setBackgroundAlpha(0f);piePlot.setLabelGenerator(null);//取消图中标签chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 10)); //设置图例说明的字体、颜色和大小chart.getLegend().setPosition(RectangleEdge.TOP); //设置图例说明在图片中的位置chart.getLegend().setBorder(0, 0, 0, 0); //设置图例说明的边框chart.getLegend().setMargin(10, 30, 10, 0); //设置图例说明内边距piePlot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); //设置图例的格式String filePath = picturePath + REPORT + "/" + name;FileOutputStream fos_jpg = null;try {fos_jpg = new FileOutputStream(filePath);ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400, 400, null);return filePath;} catch (Exception e) {logger.error("生成饼状图失败");} finally {try {fos_jpg.close();} catch (Exception e) {}}return null;}private DefaultPieDataset getPieDataSet(Map<String,Double> params) {DefaultPieDataset dataset = new DefaultPieDataset();String[] sum = {"Bacteroidetes","Firmicutes","Proteobacteria","Actinobacteria","Cyanobacteria","Other"};for (String item:sum) {if (params.containsKey(item)) {  dataset.setValue(item,params.get(item));} else { //由于参数中对于没有value=0的项目,但生成的图片中需要体现出来,所以在此做了判断赋值的操作dataset.setValue(item,0d);}}return dataset;}

柱状图生成

public String createBar(String name, Map<String, Double> params, String title) {DefaultCategoryDataset dataset = getCategoryDataSet(params);JFreeChart chart = ChartFactory.createBarChart(title, null, null, dataset,PlotOrientation.HORIZONTAL, //设置柱状图的样式HORIZONTAL:横向 VERTICAL:纵向false, false,false);chart.setBackgroundPaint(ChartColor.WHITE); // 设置背景颜色CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); //获取图表对象categoryplot.setBackgroundPaint(ChartColor.WHITE); //设置图表的背景颜色categoryplot.setOutlinePaint(ChartColor.BLACK); //图表边框颜色categoryplot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT); //设置xy轴的位置categoryplot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);BarRenderer customBarRenderer = (BarRenderer) categoryplot.getRenderer();//取消柱子上的渐变色customBarRenderer.setBarPainter( new StandardBarPainter() );//设置阴影,false代表没有阴影customBarRenderer.setShadowVisible(false);//设置柱子宽度,如果宽度设置的太小,会导致文字不在柱子的中间。至于有没有更好的设置办法,我暂时没有找到。如果谁有好的方法,可以留言告诉我,在此提前谢过customBarRenderer.setMaximumBarWidth(30);customBarRenderer.setMinimumBarLength(0.8);       customBarRenderer.setItemMargin(-1.2); //设置柱子间距//数据轴设置NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();     numberaxis.setUpperMargin(0.05);//设置最高的一个柱与图片顶端的距离(最高柱的10%)numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));//项目轴设置CategoryAxis domainAxis = categoryplot.getDomainAxis();domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 15));String filePath = picturePath + REPORT + "/" + name;FileOutputStream fos_jpg = null;try {fos_jpg = new FileOutputStream(filePath);ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,chart,500,300,null);return filePath;} catch (Exception e) {logger.error("生成柱状图失败");} finally {try {fos_jpg.close();} catch (Exception e) {}}return null;}private DefaultCategoryDataset getCategoryDataSet(Map<String,Double> params) {DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (Map.Entry<String,Double> param: params.entrySet()) {dataset.addValue(param.getValue(),param.getKey(),param.getKey());}return dataset;}

对于生成柱状图,倒是遇到一个问题,查了好长时间,没有找到办法:如何是每项文字放置在柱子的中间。最后是通过设置柱子的宽度来完成的。如果谁有好的方法,可以留言告诉我,在此提前谢过。

最后附上生成的图片样子:

java导出pdf报告之六:使用jfreechart生成饼状图和柱状图相关推荐

  1. Java后台生成图表——主代码(折线图,饼状图,柱状图,-》并产出图片PDF或其他格式的图片内容)

    声明: 本文采用的数据均来源于网络,本人只用于学习记录,若有侵权,还望能及时联系. Maven 的 POM 依赖 <!--必要--><!--用于jfreechart生成图片 --&g ...

  2. Java使用POI生成饼状图导出到word文档(饼状图)

    本篇文章主要介绍,如何使用Apache POI组件生成饼状图导出到word文档中,具体步骤看下文. 一.实现效果 Java使用POI技术生成饼状图导出到word文档中,最终生成的饼状图如下所示: 二. ...

  3. JFreeChart框架中生成饼状图上怎样显示数据 [问题点数:40分,结帖人GreenLawn]

    我用JFreeChart框架生成饼状图,但想把数据信息在饼图上显示,是在饼图内部(即圆内)显示!怎样实现啊?? 去掉lable pieplot.setLabelGenerator(null); 去掉线 ...

  4. springboot+mybatisplus+thymeleaf导入导出excel表格和制作饼状图,柱状图

    这是我们的项目结构. 我们导入的依赖.  application.yml配置文件. goods实体类 type实体类 1.导出 前端代码: JavaScript代码: 通过这里跳转到后端  导出的工具 ...

  5. 用php怎么输出饼状图,php绘图之生成饼状图的方法_PHP

    本文实例讲述了php绘图之生成饼状图的方法.分享给大家供大家参考.具体如下: 这里要实现的功能是人口分布比例图,由扇形组成一个圆,每个扇形颜色不一样. 代码如下: $array = array(&qu ...

  6. php生成饼状图 柱形图,求一个饼状图或柱状图php生成类或例子

    求一个饼状图或柱状图php生成类或例子 时间:2006/7/19 6:10:04 作者:佚名 人气:268 PHP代码:---------------------------------------- ...

  7. php 生成饼状图,折线图,条形图 通用类

    生成饼状图,折线图,条形图通用的php类,这里使用的是百度 Echart. Echart 官方网站  http://echarts.baidu.com/ <?php class Echarts ...

  8. mysql 统计做饼状图_使用Highcharts结合PHP与Mysql生成饼状图

    我们在做复杂的数据统计功能时会用到饼状图,饼状图用整个圆表示总体的数量或整体值1,用圆内各个扇形的大小表示各部分数量或该部分占总体的百分比,它可以清晰直观的表示各部分之间以及各部分与整体之间的数量关系 ...

  9. python生成饼状图

    生成饼状图代码 plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示plt.figure(figsize=(6, 6)) # 将画布设定为正方形,则绘 ...

最新文章

  1. MATLAB中subplot函数使用
  2. boot sprint 项目结构_京淘项目03 08.28
  3. java中的匿名内部类
  4. libvirt 启动 qemu 的过程
  5. Python爬取B站弹幕方法介绍
  6. 莫名其妙的SqlServer更新错误:OleDbException 必须声明标量变量
  7. 海南电网全力支持新能源发展
  8. 【51单片机快速入门指南】4.3: I2C读取MPU6050陀螺仪的原始数据
  9. android蓝牙传输的是字符吗,Android蓝牙接收到的串行数据乱码
  10. 收音机磁棒天线4根接法_重磅彩蛋:DE1103收音机不用打磨就能用拉杆/外接天线收中波...
  11. matlab数据取整方法
  12. python提取pdf表格数据 无边框_Python使用Tabula提取PDF表格数据
  13. php处理微信昵称特殊符号
  14. VScode光标乱跳、换行失灵、保存导致光标乱跳等解决办法
  15. Xtrabackup 数据备份工具使用方法
  16. BMP、JPEG文件格式详解
  17. 推荐2个开源聊天服务器
  18. FFmpeg c++ 报错合集
  19. Linux编码解码指令-base64
  20. MySQL引擎和区别

热门文章

  1. Vue前后端分离的电商后台管理系统项目的概述
  2. 面试辅导过程中被问到最多的几个问题
  3. java数据过载_垃圾收集过载,Java
  4. python判断输入的内容是否为一个数字(整数、负数)
  5. 岭回归,Lasso回归及弹性网络回归原理及R实现
  6. 脑电数据预处理看这篇就够了
  7. Android学习day04
  8. TPLink桥接Netcore 无线扩展
  9. 面试官:关于数据库MySQL说说你的理解吧
  10. 10、弱电综合布线系统,机房系统,UPS系统知识技能资料归纳1