JFreeChart

JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。

JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。

引用

  • JFreeChart下载地址

  • 将lib内的包复制到WEB-INF下的lib即可。

BarChart

  • 在web.xml中添加映射
<servlet><servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/DisplayChart</url-pattern>
</servlet-mapping>
  • BarChartDemo.java文件中定义图表
public class BarChartDemo {public static String getBarChart(HttpSession session) throws Exception {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(510, "sz", "apple");dataset.addValue(320, "sz", "banana");dataset.addValue(450, "sz", "orange");dataset.addValue(404, "gz", "apple");dataset.addValue(320, "gz", "banana");dataset.addValue(450, "gz", "orange");JFreeChart chart = ChartFactory.createBarChart3D("friut sale", "friut", "sales", dataset);String filename = ServletUtilities.saveChartAsPNG(chart, 700, 500, session);return filename;}
}
  • WebContent中写barChart.jsp
<%@page import="com.redsheep.chart.bar.BarChartDemo"%>
<body>
<%String filename=BarChartDemo.getBarChart(session);System.out.println(filename);
%>
<img src="DisplayChart?filename=<%=filename%>" width="700" height="500" border=0/>
</body>
  • 运行效果

Pie Chart

  • PieChartDemo.java
public class PieChart3 {public static String getPieChart(HttpSession session) throws Exception {DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("黑心矿难", 1000);dataset.setValue("醉酒驾驶", 800);dataset.setValue("城管强拆", 400);dataset.setValue("医疗事故", 100);dataset.setValue("其他", 29);JFreeChart chart=ChartFactory.createPieChart3D("非正常死亡人数分布图", dataset, true, true, true);// 副标题chart.addSubtitle(new TextTitle("2013年度"));PiePlot pieplot=(PiePlot)chart.getPlot();pieplot.setLabelFont(new Font("宋体",0,11));// 设置饼图是圆的(true),还是椭圆的(false);默认为true  pieplot.setCircular(true);// 没有数据的时候显示的内容pieplot.setNoDataMessage("无数据显示");StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator("{0}:({1}.{2})", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());  pieplot.setLabelGenerator(standarPieIG);  PiePlot3D pieplot3d = (PiePlot3D)chart.getPlot(); //设置开始角度  pieplot3d.setStartAngle(120D);  //设置方向为”顺时针方向“  pieplot3d.setDirection(Rotation.CLOCKWISE);  //设置透明度,0.5F为半透明,1为不透明,0为全透明  pieplot3d.setForegroundAlpha(0.7F); String fileName=ServletUtilities.saveChartAsPNG(chart, 700, 500, null, session);return fileName;}
  • pieChart.jsp
<%@page import="com.java1234.chart.pie.PieChartDemo"%>
<body>
<%String fileName=PieChart3.getPieChart(session);System.out.println(fileName);
%>
<img src="DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0"/>
</body>
  • 运行效果

乱码问题

  • 更改jfreechart版本(最简单省心,但不是特别推荐)

一般使用jfreechart-1.0.10.jar以上的版本都有可能出现这个问题,改成1.0.10及以下的版本即可。

  • 设置主题样式(比较简单,推荐)
// 创建主题样式
StandardChartTheme mChartTheme = new StandardChartTheme("CN");
// 设置标题字体
mChartTheme.setExtraLargeFont(new Font("黑体", Font.BOLD, 20));
// 设置轴向字体
mChartTheme.setLargeFont(new Font("宋体", Font.CENTER_BASELINE, 15));
// 设置图例字体
mChartTheme.setRegularFont(new Font("宋体", Font.CENTER_BASELINE, 15));
// 应用主题样式
ChartFactory.setChartTheme(mChartTheme);

运行效果如下:

  • 分别设置横轴、纵轴、副标题的字体(可以结合主题样式的方法,对大部分字体统一设置,对特殊字体单独设置)
// 副标题
chart.addSubtitle(new TextTitle("2013年度"));
TextTitle mTextTitle = chart.getTitle();
mTextTitle.setFont(new Font("微软雅黑", Font.PLAIN, 30));

运行效果

//简洁的写法
chart.getLegend().setItemFont(new Font("微软雅黑", Font.PLAIN, 10));

运行效果

Line Chart

  • LineChartDemo.java
public class LineChartDemo {public static String genLineChart(HttpSession session) throws Exception {// 创建主题样式StandardChartTheme mChartTheme = new StandardChartTheme("CN");// 设置标题字体mChartTheme.setExtraLargeFont(new Font("黑体", Font.BOLD, 20));// 设置轴向字体mChartTheme.setLargeFont(new Font("宋体", Font.CENTER_BASELINE, 15));// 设置图例字体mChartTheme.setRegularFont(new Font("宋体", Font.CENTER_BASELINE, 15));// 应用主题样式ChartFactory.setChartTheme(mChartTheme);// 访问量统计TimeSeries timeSeries = new TimeSeries("A网站访问量统计", Month.class);// 添加数据timeSeries.add(new Month(1, 2013), 100);timeSeries.add(new Month(2, 2013), 200);timeSeries.add(new Month(3, 2013), 300);timeSeries.add(new Month(4, 2013), 400);timeSeries.add(new Month(5, 2013), 560);timeSeries.add(new Month(6, 2013), 600);timeSeries.add(new Month(7, 2013), 750);timeSeries.add(new Month(8, 2013), 890);timeSeries.add(new Month(9, 2013), 120);timeSeries.add(new Month(10, 2013), 400);timeSeries.add(new Month(11, 2013), 1200);timeSeries.add(new Month(12, 2013), 1600);// 访问量统计TimeSeries timeSeries2 = new TimeSeries("B网站访问量统计", Month.class);// 添加数据timeSeries2.add(new Month(1, 2013), 50);timeSeries2.add(new Month(2, 2013), 100);timeSeries2.add(new Month(3, 2013), 150);timeSeries2.add(new Month(4, 2013), 200);timeSeries2.add(new Month(5, 2013), 220);timeSeries2.add(new Month(6, 2013), 300);timeSeries2.add(new Month(7, 2013), 340);timeSeries2.add(new Month(8, 2013), 400);timeSeries2.add(new Month(9, 2013), 450);timeSeries2.add(new Month(10, 2013), 500);timeSeries2.add(new Month(11, 2013), 70);timeSeries2.add(new Month(12, 2013), 800);// 定义时间序列的集合TimeSeriesCollection lineDataset = new TimeSeriesCollection();lineDataset.addSeries(timeSeries);lineDataset.addSeries(timeSeries2);JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间折线图", "月份", "访问量", lineDataset, true, true, true);chart.getLegend().setItemFont(new Font("微软雅黑", Font.PLAIN, 10));// 设置主标题chart.setTitle(new TextTitle("A,B网站访问量统计对比图", new Font("隶书", Font.ITALIC, 15)));// 设置子标题TextTitle subtitle = new TextTitle("2013年度", new Font("黑体", Font.BOLD, 12));chart.addSubtitle(subtitle);chart.setAntiAlias(true);// 设置时间轴的范围。XYPlot plot = (XYPlot) chart.getPlot();DateAxis dateaxis = (DateAxis) plot.getDomainAxis();dateaxis.setDateFormatOverride(new java.text.SimpleDateFormat("M月"));dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1));// 设置曲线是否显示数据点XYLineAndShapeRenderer xylinerenderer = (XYLineAndShapeRenderer) plot.getRenderer();xylinerenderer.setBaseShapesVisible(true);// 设置曲线显示各数据点的值XYItemRenderer xyitem = plot.getRenderer();xyitem.setBaseItemLabelsVisible(true);xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 12));plot.setRenderer(xyitem);String fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500, session);return fileName;}
}
  • lineChart.jsp
<%@page import="com.redsheep.chart.bar.LineChartDemo"%>
<body>
<%String fileName=LineChartDemo.genLineChart(session);System.out.println(fileName);
%>
<img src="DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0"/>
  • 运行效果

Structs2 JFreeChart

Struts2中整合了JFreeChart的功能,使用起来更便捷。

  • 添加Structs2的包

在struts官网下载,在其中找到核心包、jfreechart支持包、常用包,添加到WEB-INF下的lib即可。

  • 设置web.xml中的过滤器
  <filter><filter-name>StrutsPrepareAndExecuteFilter</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>StrutsPrepareAndExecuteFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
  • 在BarChartAction.java中写入图表,可到structs官网查看demo。
public class BarChartAction extends ActionSupport {/*** */private static final long serialVersionUID = 1L;private JFreeChart chart;public JFreeChart getChart() {return chart;}@Overridepublic String execute() throws Exception {double[][] data = new double[][] { { 1320, 1110, 1123, 321 }, { 720, 210, 1423, 1321 }, { 830, 1310, 123, 521 },{ 400, 1110, 623, 321 } };String[] rowKeys = { "苹果", "香蕉", "橘子", "梨子" };String[] columnKeys = { "深圳", "北京", "上海", "南京" };CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);chart = ChartFactory.createBarChart3D("水果销售统计图", "水果", "销售", dataset, PlotOrientation.VERTICAL, true, true,true);CategoryPlot plot = chart.getCategoryPlot();// 设置网格背景颜色plot.setBackgroundPaint(Color.white);// 设置网格竖线颜色plot.setDomainGridlinePaint(Color.pink);// 设置网格横线颜色plot.setRangeGridlinePaint(Color.pink);// 显示每个柱的数值,并修改该数值的字体属性BarRenderer3D renderer = new BarRenderer3D();renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));renderer.setItemLabelAnchorOffset(10D);// 设置平行柱的之间距离renderer.setItemMargin(0.4);plot.setRenderer(renderer);return SUCCESS;}}
  • 配置struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<struts><package name="jfreechart" extends="jfreechart-default"><action name="barChart" class="com.redsheep.chart.bar.BarChartAction"><result name="success" type="chart"><param name="value">chart</param><param name="type">png</param><param name="width">700</param><param name="height">500</param></result></action></package>
</struts>
  • 在jsp中调用该图表
<body>
<img src="barChart"/>
</body>
  • 运行效果

JFreeChart基础相关推荐

  1. JFreechart综合

    JFreeChart是一个Java开源项目,是一款优秀的Java图表生成插件,它提供了在Java Application.Servlet和JSP下生成各种图片格式的图表,包括柱形图.饼形图.线图.区域 ...

  2. JFreeChart 图表

    引用:http://wjf118gx.blog.163.com/blog/static/3796915820071110105924465/ JFreeChart是一个Java开源项目,是一款优秀的J ...

  3. Java程序中用JFreeChart制作图形报表-Java基础-Java-编程开发

    <script type="text/javascript"> google_ad_client = "pub-8800625213955058"; ...

  4. 使用自定义色系美化JfreeChart图表

    JFreeChart所使用的色系生成的图表很难看,笔者深有体会.在使用到JfreeChart的一些项目中经常会有客户提出"能不能由我们自己去设置图表中每个分类的颜色"等等诸如此类的 ...

  5. SpringMVC基础配置及使用

    SpringMVC基础配置及使用 SpringMVC: 1.SpringMVC和Spring的关系:     软件开发的三层架构: web层[表示层.表现层]---->Service层----& ...

  6. JFreeChart 1.0.6 用户开发指南(中文)

    JFreeChart 1.0.6 用户开发指南(中文) 草稿(0.9.0) 2007-10-25 2000-2007, Object Refinery Limited. All rights rese ...

  7. Java基础学习笔记(二)_Java核心技术(进阶)

    本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...

  8. Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要

    背景 项目应用中整理纪要,用于参数说明.后抽部分简码以用例,特此纪要! 问题 Java Swing中JFreeChart如何构建双纵轴(双Y轴)图表 说明 JFreeChart是一个工厂类,是Swin ...

  9. 适合零基础学习者的Java学习路线图到底长啥样?一篇文章带你学会Java

    很多小伙伴在转行互联网的时候,都担心自己不能坚持,不知道Java适不适合自己. 那最好的方式就是先不要着急直接转行,自己可以先去试着学习一些基础知识,看看对Java的学习难度能否适应以及自己是否真心喜 ...

最新文章

  1. 【建议收藏】Spring Boot注解全梳理!
  2. 微生物所科学家建成小鼠肠道微生物资源库
  3. 鸿蒙0s是什么意思,华为官宣,鸿蒙0S正式来临?
  4. 面试题 合并两个有序链表
  5. matplotlib的优点_超详细matplotlib基础介绍!!!
  6. 大数据相加_推动媒体融合与大数据相加发展
  7. 二叉树的存储结构入门(java描述)
  8. win10 升级导致找不到SQL Server配置管理器
  9. EXCEL VBA常用代码集
  10. 静态路由实验:Dynagen-Dynamips + WinPcap + SecureCRT
  11. 几何光学学习笔记(20)- 5.3视场光阑
  12. 【重点:线程池续】超人气组合:Callable和Future
  13. 一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式
  14. 帅气的团队介绍HTML源码
  15. 堆排序|minHeapFixDown的递归和迭代形式
  16. 第二章 为Encog获取数据
  17. 2020年1月27日学习记录
  18. 桌面下面有计算机 网络,台式电脑怎么连接手机网络 桌面下方的任务栏会自动弹出...
  19. PostgreSQL TID及tuple slot
  20. 【备份】r6300v2梅林,过度,dd-wrt,openwrt等相关固件

热门文章

  1. 2022年自媒体管家怎么多平台发布?
  2. 开机黑屏显示html,电脑主机运行正常显示器黑屏怎么解决_开机显示器黑屏但电脑一直在运行如何修复...
  3. 为什么我身边有人说我没有眼力见,眼力见是什么,应该怎么做?
  4. 【allegro 17.4软件操作保姆级教程十】文件输出
  5. Docker - 挂载目录(bind mounts)和Volume是不同的
  6. linux 下的torrent下载器qBitTorrent
  7. element ui 的table的表头和表格没对齐
  8. 刷题总结——支线剧情(bzoj3876费用流)
  9. FileSaver结合XLSX实现el-table的分页数据导出
  10. python爬取的图片无法显示的问题