jfreechart画折线图的方法
程序员文章站
2023-12-21 13:45:16
jfreechart 是开放源代码站点sourceforge.net 上的一个 java 项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈...
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; } }
运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。