jfreechart画折线图的方法
时间:2019-04-20
本文章向大家介绍jfreechart画折线图的方法,主要包括jfreechart画折线图的方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
JFreeChart 是开放源代码站点SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 )、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
应用jfreechart来画图需要两个jar包:jfreechart.jar和jcommon.jar,下载地址。
下面是一个画折线图的例子:
package yuth.jfree.demo; /** * 使用 categoryDataset 数据集创建折线图 * 当数据多时,在JPanel中无法完全看到横坐标的值,显示为省略号。 * 解决方法: * 方法1、将报表保存为图片时,设置图片的宽度足够大(2000或3000),图片可以显示横坐标值。 * 这种方法治标不治本,所以有了第2种方法 * 方法2、设置X轴上的Lable让其45度倾斜。 */ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.geom.Ellipse2D; import java.io.File; import java.io.IOException; import java.net.URL; import java.text.DecimalFormat; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; 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.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.HorizontalAlignment; import org.jfree.ui.RectangleEdge; import org.jfree.ui.RectangleInsets; import org.jfree.ui.RefineryUtilities; public class LineChartDemo1 extends ApplicationFrame { private static final long serialVersionUID = -6354350604313079793L; /* synthetic */static Class class$demo$LineChartDemo1; public LineChartDemo1(String string) { super(string); JPanel jpanel = createDemoPanel(); jpanel.setPreferredSize(new Dimension(500, 270)); setContentPane(jpanel); } /** * 如何区分不同的图例:根据DefaultCategoryDataset.addValue()的第二个参数是否相同来区分。 * 同一个图例的数据的添加顺序影响最终的显示;不同图例的数据的添加顺序不影响最终的显示。 * @return */ private static CategoryDataset createDataset() { DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset(); //defaultcategorydataset.addValue()的参数解析:(数值,图例名,横坐标值) /* //添加数据方法1 //图例1 defaultcategorydataset.addValue(212.0, "First", "1001.0"); defaultcategorydataset.addValue(504.0, "First", "1001.1"); defaultcategorydataset.addValue(1520.0, "First", "1001.2"); //图例2 defaultcategorydataset.addValue(712.0, "Second", "1001.0"); defaultcategorydataset.addValue(1204.0, "Second", "1001.1"); defaultcategorydataset.addValue(1820.0, "Second", "1001.2"); /*/ //* //添加数据方法2 //实验随机数来生成测试结果 Random random = new Random(12345); //图例1,40个数据 for(int i=0;i<40;i++){ defaultcategorydataset.addValue(random.nextInt(100000), "First",String.valueOf(1000+i) ); } //图例2,40个数据 for (int i = 0; i < 40; i++) { defaultcategorydataset.addValue(random.nextInt(100000), "Second", String.valueOf(1000 + i)); } //*/ return defaultcategorydataset; } private static JFreeChart createChart(CategoryDataset categorydataset) { JFreeChart jfreechart = ChartFactory.createLineChart( "jfreechart test",// 图表标题 "X", // 主轴标签(x轴) "Y",// 范围轴标签(y轴) categorydataset, // 数据集 PlotOrientation.VERTICAL,// 方向 false, // 是否包含图例 true, // 提示信息是否显示 false);// 是否使用urls // 改变图表的背景颜色 jfreechart.setBackgroundPaint(Color.white); CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot(); categoryplot.setBackgroundPaint(Color.lightGray); categoryplot.setRangeGridlinePaint(Color.white); categoryplot.setRangeGridlinesVisible(false); //修改范围轴。 我们将默认刻度值 (允许显示小数) 改成只显示整数的刻度值。 NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); // 设置X轴上的Lable让其45度倾斜 CategoryAxis domainAxis = categoryplot.getDomainAxis(); domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 设置X轴上的Lable让其45度倾斜 domainAxis.setLowerMargin(0.0); // 设置距离图片左端距离 domainAxis.setUpperMargin(0.0); // 设置距离图片右端距离 LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot .getRenderer(); lineandshaperenderer.setShapesVisible(true); lineandshaperenderer.setDrawOutlines(true); lineandshaperenderer.setUseFillPaint(true); lineandshaperenderer.setBaseFillPaint(Color.white); lineandshaperenderer.setSeriesStroke(0, new BasicStroke(3.0F)); lineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F)); lineandshaperenderer.setSeriesShape(0, new Ellipse2D.Double(-5.0, -5.0, 10.0, 10.0)); lineandshaperenderer.setItemMargin(0.4); //设置x轴每个值的间距(不起作用??) // 显示数据值 DecimalFormat decimalformat1 = new DecimalFormat("##.##");// 数据点显示数据值的格式 lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator( "{2}", decimalformat1));// 设置数据项标签的生成器 lineandshaperenderer.setBaseItemLabelsVisible(true);// 基本项标签显示 lineandshaperenderer.setBaseShapesFilled(true);// 在数据点显示实心的小图标 return jfreechart; } public static JPanel createDemoPanel() { JFreeChart jfreechart = createChart(createDataset()); try { ChartUtilities.saveChartAsJPEG( new File("D:/LineChartDemo1.png"), //文件保存物理路径包括路径和文件名 // 1.0f, //图片质量 ,0.0f~1.0f jfreechart, //图表对象 1024, //图像宽度 ,这个将决定图表的横坐标值是否能完全显示还是显示省略号 768); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //图像高度 return new ChartPanel(jfreechart); } public static void main(String[] strings) { LineChartDemo1 linechartdemo1 = new LineChartDemo1( "JFreeChart - Line Chart Demo 1"); linechartdemo1.pack(); RefineryUtilities.centerFrameOnScreen(linechartdemo1); linechartdemo1.setVisible(true); } /* synthetic */ static Class class$(String string) { Class var_class; try { var_class = Class.forName(string); } catch (ClassNotFoundException classnotfoundexception) { throw new NoClassDefFoundError(classnotfoundexception.getMessage()); } return var_class; } }
运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 【Hibernate那点事儿】—— Hibernate知识总结
- java获取网页源代码
- Java魔法堂:注解用法详解——@SuppressWarnings
- 日志那点事儿——slf4j源码剖析
- 给Dreamweaver插上Svn的翅膀
- MyBatis魔法堂:ResultMap详解
- 腾讯海量监控体系经验分享
- 【Spring开发】—— Spring Core
- Java魔法堂:找外援的利器——Runtime.exec详解
- win10的80端口被system占用的问题
- 【Spring开发】—— AOP之方法级拦截
- eclipse tomcat下网页修改不生效
- 【插件开发】—— 14 Site is incorrect!编辑器启动报错!
- Java魔法堂:Date与日期时间格式化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何理解直播APP源码开发中的音视频同步
- 在GitHub上发布一个Python项目需要注意哪些
- CS学习笔记 | 21、反向转发通道的建立
- CS学习笔记 | 22、通过SSH开通通道
- 一文搞懂 java -jar 发生了什么
- 树莓派4裸机基础教程:环境搭建
- Oh! Binlog还能这样用之Canal篇
- docker安装elasticsearch和head插件
- redis学习(十六)
- 商业鬼才教你 策略模式
- 为什么StringBuilder是线程不安全的?
- (四)Hive分区、分桶
- Redis的各种数据类型实践-Set
- 快速学习-RocketMQ权限控制
- 快速学习-RocketMQ DefaultMQProducer