Jfreechart+ChartPanel实时曲线图实例
JFreeChart实现曲线图
JFreeChart实现曲线走势图由于公司需要开发一个短信监控系统.需要用曲线图对短信的发送情况进行实时的走势图。
由于没有找到JfreeChart的中文文档,花了二天时间才把第一个Applet + JfreeChart 实现曲线图的简单例子给弄出来!现在跟大家共享。
大家一起讨论,学习JfreeChart.jfreechart-1.0.3下载址址解压jfreechart-1.0.3后,将lib目录中的jfreechart-1.0.3.jar,jcommon-1.0.6.jar二个类库加入到工程classpath中.新建一个类abc.java,代码如下.import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JApplet;import javax.swing.Timer;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.ChartFactory;import org.jfree.chart.axis.ValueAxis;import org.jfree.data.time.*;/*** 一个简单的曲线图例子* @author tf* date 2007-01-30*/public class abc extends JApplet {private static final long serialVersionUID=3257566209007171634L;private double cpuValue1;private double cpuValue2;private double cpuValue3private TimeSeries cpu1;private TimeSeries cpu2;private TimeSeries cpu3;/*** 内部类--实现动态随机产生虚拟CPU使用率的值* @author tf**/class DataGenerator extends Timer implements ActionListener {private static final long serialVersionUID = 3977867288743720505L;public void actionPerformed(ActionEvent actionevent) {cpuValue1 = 100;cpuValue2 = 100;cpuValue3 = 100;double d1 = Math.random();cpuValue1 = cpuValue1 * d1;//cpuValue1 += 10;double d2 = Math.random();cpuValue2 = cpuValue2 * d2;double d3 = Math.random();cpuValue3 = cpuValue3 * d3;addcpu1Observation(cpuValue1);addcpu2Observation(cpuValue2);addcpu3Observation(cpuValue3);}DataGenerator() {super(100, null);addActionListener(this);}}public abc() {cpu1 = new TimeSeries("处理器1", lisecond.class);//增加一条走势曲线//cpu1.setHistoryCount(2000); //---比方法在新版本中的TimeSeries类中不存在cpu2 = new TimeSeries("处理器2", Millisecond.class);//free.setHistoryCount(2000); //---比方法在新版本中的TimeSeries类中不存在cpu3 = new TimeSeries("处理器3", Millisecond.class);TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();//将所有走势曲线加入到时间条中timeseriescollection.addSeries(cpu1);timeseriescollection.addSeries(cpu2);timeseriescollection.addSeries(cpu3);//创建JFreeChart对象JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("处理器利用率","时间", "值", timeseriescollection, true, true, true);//设置图表样式XYPlot xyplot = jfreechart.getXYPlot();xyplot.setOutlinePaint(Color.CYAN);//设置数据区的边界线条颜色ValueAxis valueaxis = xyplot.getDomainAxis();// valueaxis.setAutoRange(true); //自动设置数据轴数据范围valueaxis.setFixedAutoRange(10000D);//设置时间轴显示的数据valueaxis = xyplot.getRangeAxis();valueaxis.setRange(0.0D, 100D);//数据轴固定数据范围(设置100的话就是显示MAXVALUE 到MAXVALUE-100那段数据范围)// valueaxis.setAutoRange(true);valueaxis.setVisible(true);//设置是否显示数据轴//设置曲线图面版ChartPanel chartpanel = new ChartPanel(jfreechart);chartpanel.setPopupMenu(null);ChartPanel chartpanel1 = new ChartPanel(jfreechart);chartpanel1.setPopupMenu(null);getContentPane().add(chartpanel);getContentPane().add(chartpanel1);(new DataGenerator()).start();}private void addcpu1Observation(double d) {cpu1.add(new Millisecond(), d);}private void addcpu2Observation(double d) {cpu2.add(new Millisecond(), d);}private void addcpu3Observation(double d) {cpu3.add(new Millisecond(), d);}}代码运行成功如下:呵呵,忙了二天终于搞定了这么个简单的例子.希望大家共同学习.多多提意见.其它与JfreeChart相关设置的类和方法JFreeChart类:void setAntiAlias(boolean flag) 字体模糊边界void setBackgroundImage(Image image) 背景图片void setBackgroundImageAlignment(int alignment) 背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)void setBackgroundImageAlpha(float alpha) 背景图片透明度(0.0~1.0)void setBackgroundPaint(Paint paint) 背景色void setBorderPaint(Paint paint) 边界线条颜色void setBorderStroke(Stroke stroke) 边界线条笔触void setBorderVisible(boolean visible) 边界线条是否可见TextTitle类:void setFont(Font font) 标题字体void setPaint(Paint paint) 标题字体颜色void setText(String text) 标题内容StandardLegend(Legend)类:void setBackgroundPaint(Paint paint) 图示背景色void setTitle(String title) 图示标题内容void setTitleFont(Font font) 图示标题字体void setBoundingBoxArcWidth(int arcWidth) 图示边界圆角宽void setBoundingBoxArcHeight(int arcHeight) 图示边界圆角高void setOutlinePaint(Paint paint) 图示边界线条颜色void setOutlineStroke(Stroke stroke) 图示边界线条笔触void setDisplaySeriesLines(boolean flag) 图示项是否显示横线(折线图有效)void setDisplaySeriesShapes(boolean flag) 图示项是否显示形状(折线图有效)void setItemFont(Font font) 图示项字体void setItemPaint(Paint paint) 图示项字体颜色void setAnchor(int anchor) 图示在图表中的显示位置(参数常量在Legend类中定义)Axis类:void setVisible(boolean flag) 坐标轴是否可见void setAxisLinePaint(Paint paint) 坐标轴线条颜色(3D轴无效)void setAxisLineStroke(Stroke stroke) 坐标轴线条笔触(3D轴无效)void setAxisLineVisible(boolean visible) 坐标轴线条是否可见(3D轴无效)void setFixedDimension(double dimension) (用于复合表中对多坐标轴的设置)void setLabel(String label) 坐标轴标题void setLabelFont(Font font) 坐标轴标题字体void setLabelPaint(Paint paint) 坐标轴标题颜色void setLabelAngle(double angle)` 坐标轴标题旋转角度(纵坐标可以旋转)void setTickLabelFont(Font font) 坐标轴标尺值字体void setTickLabelPaint(Paint paint) 坐标轴标尺值颜色void setTickLabelsVisible(boolean flag) 坐标轴标尺值是否显示void setTickMarkPaint(Paint paint) 坐标轴标尺颜色void setTickMarkStroke(Stroke stroke) 坐标轴标尺笔触void setTickMarksVisible(boolean flag) 坐标轴标尺是否显示ValueAxis(Axis)类:void setAutoRange(boolean auto) 自动设置数据轴数据范围void setAutoRangeMinimumSize(double size) 自动设置数据轴数据范围时数据范围的最小跨度void setAutoTickUnitSelection(boolean flag) 数据轴的数据标签是否自动确定(默认为true)void setFixedAutoRange(double length) 数据轴固定数据范围(设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围)void setInverted(boolean flag) 数据轴是否反向(默认为false)void setLowerMargin(double margin) 数据轴下(左)边距void setUpperMargin(double margin) 数据轴上(右)边距void setLowerBound(double min) 数据轴上的显示最小值void setUpperBound(double max) 数据轴上的显示最大值void setPositiveArrowVisible(boolean visible) 是否显示正向箭头(3D轴无效)void setNegativeArrowVisible(boolean visible) 是否显示反向箭头(3D轴无效)void setVerticalTickLabels(boolean flag) 数据轴数据标签是否旋转到垂直void setStandardTickUnits(TickUnitSource source) 数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)NumberAxis(ValueAxis)类:void setAutoRangeIncludesZero(boolean flag) 是否强制在自动选择的数据范围中包含0 void setAutoRangeStickyZero(boolean flag) 是否强制在整个数据轴中包含0,即使0不在数据范围中void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式void setTickUnit(NumberTickUnit unit) 数据轴的数据标签(需要将AutoTickUnitSelection 设false)DateAxis(ValueAxis)类:void setMaximumDate(Date maximumDate) 日期轴上的最小日期void setMinimumDate(Date minimumDate) 日期轴上的最大日期void setRange(Date lower,Date upper) 日期轴范围void setDateFormatOverride(DateFormat formatter) 日期轴日期标签的显示格式void setTickUnit(DateTickUnit unit) 日期轴的日期标签(需要将AutoTickUnitSelection设false)void setTickMarkPosition(DateTickMarkPosition position) 日期标签位置(参数常量在org.jfree.chart.axis.DateTickMarkPosition类中定义)CategoryAxis(Axis)类:void setCategoryMargin(double margin) 分类轴边距void setLowerMargin(double margin) 分类轴下(左)边距void setUpperMargin(double margin) 分类轴上(右)边距void setVerticalCategoryLabels(boolean flag) 分类轴标题是否旋转到垂直void setMaxCategoryLabelWidthRatio(float ratio) 分类轴分类标签的最大宽度Plot类:void setBackgroundImage(Image image) 数据区的背景图片void setBackgroundImageAlignment(int alignment) 数据区的背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)void setBackgroundPaint(Paint paint) 数据区的背景图片背景色void setBackgroundAlpha(float alpha) 数据区的背景透明度(0.0~1.0)void setForegroundAlpha(float alpha) 数据区的前景透明度(0.0~1.0)void setDataAreaRatio(double ratio) 数据区占整个图表区的百分比void setOutLinePaint(Paint paint) 数据区的边界线条颜色void setOutLineStroke(Stroke stroke) 数据区的边界线条笔触void setNoDataMessage(String message) 没有数据时显示的消息void setNoDataMessageFont(Font font) 没有数据时显示的消息字体void setNoDataMessagePaint(Paint paint) 没有数据时显示的消息颜色CategoryPlot(Plot)类:void setDataset(CategoryDataset dataset) 数据区的2维数据表void setColumnRenderingOrder(SortOrder order) 数据分类的排序方式void setAxisOffset(RectangleInsets args) 坐标轴到数据区的间距void setOrientation(PlotOrientation orientation) 数据区的方向(PlotOrientation.HORIZONTAL 或PlotOrientation.VERTICAL)void setDomainAxis(CategoryAxis axis) 数据区的分类轴void setDomainAxisLocation(AxisLocation location) 分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)void setDomainGridlinesVisible(boolean visible) 分类轴网格是否可见void setDomainGridlinePaint(Paint paint) 分类轴网格线条颜色void setDomainGridlineStroke(Stroke stroke) 分类轴网格线条笔触void setRangeAxis(ValueAxis axis) 数据区的数据轴void setRangeAxisLocation(AxisLocation location) 数据轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)void setRangeGridlinesVisible(boolean visible) 数据轴网格是否可见void setRangeGridlinePaint(Paint paint) 数据轴网格线条颜色void setRangeGridlineStroke(Stroke stroke) 数据轴网格线条笔触void setRenderer(CategoryItemRenderer renderer) 数据区的表示者(详见Renderer组)void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释void addRangeMarker(Marker marker,Layer layer) 给数据区加一个数值范围区域PiePlot(Plot)类:void setDataset(PieDataset dataset) 数据区的1维数据表void setIgnoreNullValues(boolean flag) 忽略无值的分类void setCircular(boolean flag) 饼图是否一定是正圆void setStartAngle(double angle) 饼图的初始角度void setDirection(Rotation direction) 饼图的旋转方向void setExplodePercent(int section,double percent) 抽取的那块(1维数据表的分类下标)以及抽取出来的距离(0.0~1.0),3D饼图无效void setLabelBackgroundPaint(Paint paint) 分类标签的底色void setLabelFont(Font font) 分类标签的字体void setLabelPaint(Paint paint) 分类标签的字体颜色void setLabelLinkMargin(double margin) 分类标签与图的连接线边距void setLabelLinkPaint(Paint paint) 分类标签与图的连接线颜色void setLabelLinkStroke(Stroke stroke) 分类标签与图的连接线笔触void setLabelOutlinePaint(Paint paint) 分类标签边框颜色void setLabelOutlineStroke(Paint paint) 分类标签边框笔触void setLabelShadowPaint(Paint paint) 分类标签阴影颜色void setMaximumLabelWidth(double width) 分类标签的最大长度(0.0~1.0)void setPieIndex(int index) 饼图的索引(复合饼图中用到)void setSectionOutlinePaint(int section,Paint paint) 指定分类饼的边框颜色void setSectionOutlineStroke(int section,Stroke stroke) 指定分类饼的边框笔触void setSectionPaint(int section,Paint paint) 指定分类饼的颜色void setShadowPaint(Paint paint) 饼图的阴影颜色void setShadowXOffset(double offset) 饼图的阴影相对图的水平偏移void setShadowYOffset(double offset) 饼图的阴影相对图的垂直偏移void setLabelGenerator(PieSectionLabelGenerator generator) 分类标签的格式,设置成null 则整个标签包括连接线都不显示void setToolTipGenerator(PieToolTipGenerator generator) MAP中鼠标移上的显示格式void setURLGenerator(PieURLGenerator generator) MAP中钻取链接格式PiePlot3D(PiePlot)类:void setDepthFactor(double factor) 3D饼图的Z轴高度(0.0~1.0)MultiplePiePlot(Plot)类:void setLimit(double limit) 每个饼图之间的数据关联(详细比较复杂)void setPieChart(JFreeChart pieChart) 每个饼图的显示方式(见JFreeChart类个PiePlot类)AbstractRenderer类:void setItemLabelAnchorOffset(double offset) 数据标签的与数据点的偏移void setItemLabelsVisible(boolean visible) 数据标签是否可见void setItemLabelFont(Font font) 数据标签的字体void setItemLabelPaint(Paint paint) 数据标签的字体颜色void setItemLabelPosition(ItemLabelPosition position) 数据标签位置void setPositiveItemLabelPosition(ItemLabelPosition position) 正数标签位置void setNegativeItemLabelPosition(ItemLabelPosition position) 负数标签位置void setOutLinePaint(Paint paint) 图形边框的线条颜色void setOutLineStroke(Stroke stroke) 图形边框的线条笔触void setPaint(Paint paint) 所有分类图形的颜色void setShape(Shape shape) 所有分类图形的形状(如折线图的点)void setStroke(Stroke stroke) 所有分类图形的笔触(如折线图的线)void setSeriesItemLabelsVisible(int series,boolean visible) 指定分类的数据标签是否可见void setSeriesItemLabelFont(int series,Font font) 指定分类的数据标签的字体void setSeriesItemLabelPaint(int series,Paint paint) 指定分类的数据标签的字体颜色void setSeriesItemLabelPosition(int series,ItemLabelPosition position) 数据标签位置void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position) 正数标签位置void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position) 负数标签位置void setSeriesOutLinePaint(int series,Paint paint) 指定分类的图形边框的线条颜色void setSeriesOutLineStroke(int series,Stroke stroke) 指定分类的图形边框的线条笔触void setSeriesPaint(int series,Paint paint) 指定分类图形的颜色void setSeriesShape(int series,Shape shape) 指定分类图形的形状(如折线图的点)void setSeriesStroke(int series,Stroke stroke) 指定分类图形的笔触(如折线图的线)AbstractCategoryItemRenderer(AbstractRenderer)类:void setLabelGenerator(CategoryLabelGenerator generator) 数据标签的格式void setToolTipGenerator(CategoryToolTipGenerator generator) MAP中鼠标移上的显示格式void setItemURLGenerator(CategoryURLGenerator generator) MAP中钻取链接格式void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator) 指定分类的数据标签的格式void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator) 指定分类的MAP中鼠标移上的显示格式void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator) 指定分类的MAP中钻取链接格式BarRenderer(AbstractCategoryItemRenderer)类:void setDrawBarOutline(boolean draw) 是否画图形边框void setItemMargin(double percent) 每个BAR之间的间隔void setMaxBarWidth(double percent) 每个BAR的最大宽度void setMinimumBarLength(double min) 最短的BAR长度,避免数值太小而显示不出void setPositiveItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的正数标签位置void setNegativeItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的负数标签位置BarRenderer3D(BarRenderer)类:void setWallPaint(Paint paint) 3D坐标轴的墙体颜色StackedBarRenderer(BarRenderer)类StackedBarRenderer3D(BarRenderer3D)类GroupedStackedBarRenderer(StackedBarRenderer)类:void setSeriesToGroupMap(KeyToGroupMap map) 将分类自由的映射成若干个组(KeyToGroupMap.mapKeyToGroup(series,group))LayeredBarRenderer(BarRenderer)类:void setSeriesBarWidth(int series,double width) 设定每个分类的宽度(注意设置不要使某分类被覆盖)WaterfallBarRenderer(BarRenderer)类:void setFirstBarPaint(Paint paint) 第一个柱图的颜色void setLastBarPaint(Paint paint) 最后一个柱图的颜色void setPositiveBarPaint(Paint paint) 正值柱图的颜色void setNegativeBarPaint(Paint paint) 负值柱图的颜色IntervalBarRenderer(BarRenderer)类:需要传IntervalCategoryDataset作为数据源GanttBarRenderer(IntervalBarRenderer)类:void setCompletePaint(Paint paint) 完成进度颜色void setIncompletePaint(Paint paint) 未完成进度颜色void setStartPercent(double percent) 设置进度条在整条中的起始位置(0.0~1.0)void setEndPercent(double percent) 设置进度条在整条中的结束位置(0.0~1.0)StatisticBarRenderer(BarRenderer)类:需要传StatisticCategoryDataset作为数据源LineAndShapeRenderer(AbstractCategoryItemRenderer)类:void setDrawLines(boolean draw) 是否折线的数据点之间用线连void setDrawShapes(boolean draw) 是否折线的数据点根据分类使用不同的形状void setShapesFilled(boolean filled) 所有分类是否填充数据点图形void setSeriesShapesFilled(int series,boolean filled) 指定分类是否填充数据点图形void setUseFillPaintForShapeOutline(boolean use) 指定是否填充数据点的Paint也被用于画数据点形状的边框LevelRenderer(AbstractCategoryItemRenderer)类:void setItemMargin(double percent) 每个分类之间的间隔void setMaxItemWidth(double percent) 每个分类的最大宽度CategoryStepRenderer(AbstractCategoryItemRenderer)类:void setStagger(boolean shouldStagger) 不同分类的图是否交错MinMaxCategoryRenderer(AbstractCategoryItemRenderer)类:void setDrawLines(boolean drawLines) 是否在每个分类线间画连接线void setGroupPaint(Paint groupPaint) 一组图形连接线的颜色void setGroupStroke(Stroke groupStroke) 一组图形连接线的笔触void setMaxIcon(Icon maxIcon) 最大值的ICONvoid setMinIcon(Icon minIcon) 最小值的ICONvoid setObjectIcon(Icon objectIcon) 所有值的ICONAreaRender(AbstractCategoryItemRenderer)类StackedAreaRender(AreaRender)类。
通过实例跟我学JFreeChart 图表组件——在Web应用中采用JSP+JavaBean方式应用JFreeChart的实例(第1部分)
1.1通过代码实例跟我学JFreeChart 图表组件——在J2EE Web应用系统中采用JSP+JavaBean方式应用JFreeChart的实例(第1部分)1.1.1实现圆饼图的应用实例1、添加一个请求的页面requestImageForm.jsp(1)添加requestImageForm.jsp页面文件(2)在该页面中添加一个表单<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>请求的页面</title></head><body><form action="showSomeImage.jsp" method="post">图像的宽度:<input type="text" name="imagesWidth" /> <br>图像的高度:<input type="text" name="imagesHeight" /> <br>图像的标题:<input type="text" name="imagesTitle" /> <br><input type="submit" value="提交" /></form></body></html>2、添加一个响应的JSP页面showSomeImage.jsp(1)添加JSP页面showSomeImage.jsp文件(2)编程设计showSomeImage.jsp页面<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%request.setCharacterEncoding("gb2312");String imagesWidth=request.getParameter("imagesWidth");String imagesHeight=request.getParameter("imagesHeight");String imagesTitle=request.getParameter("imagesTitle");%><%com.px1987.jfreechart.model.PieChartBean pieChartBeanID=new com.px1987.jfreechart.model.PieChartBean();pieChartBeanID.setImagesWidth(imagesWidth);pieChartBeanID.setImagesHeight(imagesHeight);pieChartBeanID.setImagesTitle(imagesTitle);pieChartBeanID.setPageContext(pageContext);pieChartBeanID.createImage();%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'showSomeImage.jsp' starting page</title></head><body><table border="1" align="center" bordercolor="#6699FF" class="wd_red"><tr><td>这是Pie图的数据</td><td rowspan="3" align="center"><img src="<%= pieChartBeanID.getTargetGraphURL() %>" border=0 usemap="#<%= pieChartBeanID.getGraphFileName() %>"></td></tr><tr><td>这是Pie图的其它数据</td></tr><tr><td>这是Pie图的其它数据</td></tr></table></body></html>3、添加PieChartBean组件(1)添加PieChartBean程序类(2)编程WebPieChartBean 程序类中的功能实现方法package com.px1987.jfreechart.model;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import javax.servlet.jsp.PageContext;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartRenderingInfo;import org.jfree.chart.JFreeChart;import org.jfree.chart.entity.StandardEntityCollection; import org.jfree.chart.plot.PiePlot;import org.jfree.chart.servlet.ServletUtilities;import org.jfree.data.general.DefaultPieDataset;public class WebPieChartBean {String graphFileName=null;String targetGraphURL =null;JFreeChart oneJFreeChart=null;PageContext pageContext;HttpServletRequest request=null;String imagesWidth=null;String imagesHeight=null;String imagesTitle=null;public WebPieChartBean() {}public void createImage() throws IOException{oneJFreeChart=ChartFactory.createPieChart(imagesTitle, // 图表标题getDataSet(), true, // 是否显示图例false, // 是否显示tooltipsfalse); //是否显示URLsPiePlot pieplot = (PiePlot)oneJFreeChart.getPlot(); //通过JFreeChart 对象获得PiePlot,然后对它进行修改和定制pieplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());graphFileName =ServletUtilities.saveChartAsPNG(oneJFreeChart,Integer.parseInt(imagesWidth),Integer.parseInt(imagesHeight),info, pageContext.getSession());request=(HttpServletRequest)getPageContext().getRequest();targetGraphURL =request.getContextPath()+ "/DisplayChartServlet?filename="+ graphFileName;}public void createImageMVC() throws IOException{oneJFreeChart=ChartFactory.createPieChart(imagesTitle, // 图表标题getDataSet(), true, // 是否显示图例false, // 是否显示tooltipsfalse); //是否显示URLsPiePlot pieplot = (PiePlot)oneJFreeChart.getPlot(); //通过JFreeChart 对象获得PiePlot,然后对它进行修改和定制pieplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());graphFileName =ServletUtilities.saveChartAsPNG(oneJFreeChart,Integer.parseInt(imagesWidth),Integer.parseInt(imagesHeight),info, getRequest().getSession());targetGraphURL =getRequest().getContextPath()+ "/DisplayChartServlet?filename="+ graphFileName;}private DefaultPieDataset getDataSet(){DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("Java",100);dataset.setValue("C++",200);dataset.setValue("Basica",300);dataset.setValue("J2EE",400);dataset.setValue("",500);return dataset;}public String getGraphFileName() {return graphFileName;}public void setGraphFileName(String graphFileName) {this.graphFileName = graphFileName;}public String getTargetGraphURL() {return targetGraphURL;}public void setTargetGraphURL(String targetGraphURL) { this.targetGraphURL = targetGraphURL;}public PageContext getPageContext() {return pageContext;}public void setPageContext(PageContext pageContext) { this.pageContext = pageContext;}public String getImagesHeight() {return imagesHeight;}public void setImagesHeight(String imagesHeight) { this.imagesHeight = imagesHeight;}public String getImagesTitle() {return imagesTitle;}public void setImagesTitle(String imagesTitle) {this.imagesTitle = imagesTitle;}public String getImagesWidth() {return imagesWidth;}public void setImagesWidth(String imagesWidth) { this.imagesWidth = imagesWidth;}public HttpServletRequest getRequest() {return request;}public void setRequest(HttpServletRequest request) {this.request = request;}}4、测试本示例的应用效果(1)在浏览器的URL地址栏中输入http://127.0.0.1:8080/JFreeChart/requestImageForm.jsp(2)在表单中输入图表相关的工作参数,并提交表单,将出现下面的执行结果。
JFreeChart使用例子
DefaultPieDatasetdpd= newDefaultPieDataset();
dpd.setValue("Chinese", 108);
dpd.setValue("Math", 110);
dpd.setValue("English", 74);
dpd.setValue("Science Department", 226);
我们要画一张图首先做的就是:
以饼图为例:
·准备数据集->生成数据集对象org.jfree.data.general下Interface Dataset的实现类
DefaultPieDatasetdpd=newDefaultPieDataset();
·set数据进去
不同的图set数据的参数不同,一般参数都比较多,但都很好理解
true, true, false);
//产生3d饼图
//JFreeChartjfreechart= ChartFactory.createPieChart3D("bulktree high-tech achievement",dpd,
//true, true, false);
ChartFrameframe = newChartFrame("BULKTREE HIGH-TECH ACHIEVEMENT",jfreechart);
dpd.setValue("Chinese", 108);
dpd.setValue("Math", 110);
dpd.setValue("English", 74);
jfreechart+sql实现时间曲线图(显示曲线数据点)
jfreechart+sql实现时间曲线图(显示曲线数据点)一、JFreeChart获取。
JFreeChart是JFreeChart公司在开源网站上的一个项目,该公司的主要产品有如下:1、JFreeReport:报表解决工具2、JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)3、JCommon:JFreeReport和JFreeChart的公共类库4、JFreeDesigner:JFreeReport的报表设计工具我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取),获取地址:/jfreechart/index.html(同时可以获得简明介绍)我们以当前最新版本:jfreechart_0.9.21.zip为例子进行说明。
二、JFreeChart配置安装1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar是例子程序(该部分留给大家自己去研究)2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、lib\gnujaxp.jar3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明:把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml文件,在其中加入如下代码:<servlet><servlet-name>DisplayChart</servlet-name><servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-cl ass></servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/servlet/DisplayChart</url-pattern></servlet-mapping>至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。
利用JfreeChart开发包绘制图表
作者 简介:王征强(97 ,湖北黄 冈人 ,邢台职业技术学院电子工程 系,北京航 空航天大学在读硕士。 17 一)
确 ,但 有着 不直 观 、不 易被 人脑所 理 解 的缺 点 。人们 从可 视化 图表 中吸 取信 息远 比从 数据 形式 中吸取 信 息 更快 、更 有效 ,更方便 。为 了提 供 更强 大 的信 息 ,这 就需要 我们 把统 计数 据进 行可 视化 ,为此把 统计
数据转化为可视化的图表显得尤为必要。本文使用当今计算机界最热门的语言 Jv 和 J eC a 开发包 aa f e hr r t
出各 种 复杂 、漂亮 的图表 。
在 目前广 泛 应用 的 BS结构 中 ,看看 如何 用 Jv 语言 实现 We / aa b统计 图表 。
使用 J a p l 显示图形,适用于支持 Jv A pe 的浏览器。缺点是开发难度较高,速度慢, a Apt v e aa p l t 需 要针 对 具体 的应用 要求 编制 Jv 图程序 。 aa绘
在 服 务器端 使用 控件动 态 生成 图形 文件 ,此 方法可 以适用于 任何 流行 的客户 端浏 览器 。基于 Jv aa 语言 的 Jre hr包 、PA(ueJV f C at e J P r aaAWT包 和 Jc Jv jc o c ne ) si(aaObetfr i c)包 ,这 几个都 是开放源 代 s Se
码的包,开发简单 ,使用方便 ,客户端无需安装其他软件 ,只要使用通用浏览器 即可显示统计图形。 各种控件虽然使用语言各不相 同, 但是使用方法大同小异。 大致步骤如下: . 1 首先创建一个图表对象;
2给 图表 的各个 属性 赋值 ,如 图表 的标题 、长 、宽 ,要 绘制什 么类 型 的图表等 ;3建 立数据 集 ,给 图表 中 . . 加 入数据 :4生成统 计 图形文 件 ;5把 图形文 件放 在合 适 的位 置上进 行显 示 。 . .
通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建饼图的应用实例(Eclipse开发工具版本)
data, true, // 是否显示图例
false,
// 是否显示 tooltips
false); //是否显示 URLs
/* PiePlot pieplot = (PiePlot)jfreechart.getPlot(); //通过 JFreeChart 对象获得 PiePlot,
然后对它进行修改和定制
就需要再通过 get 方法得出相应的 Plot 类对象并进行修改和定制它们。
3、创建饼图的代码示例
(1)创建一个数据源(dataset)
饼图的 dataset 一般是用 PieDataset 接口,具体实现类是 DefaultPieDataset。下面为代码示例:
private static DefaultPieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Java",100);
dataset.setValue("C++",200);
dataset.setValue("Basica",300);
dataset.setValue("J2EE",400);
dataset.setValue("",500);
return dataset;
}
(2)由 ChartFactory 类产生出 JFreeChart 类的对象实例
JFreeChart chart = ChartFactory.createPieChart3D("创建饼图的示例", // 图表标题
JFreeChart使用教程(含下载、安装)
销量", dataset,
PlotOrientation.VERTICAL, false, false, false);
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %>
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="org.jfree.chart.ChartFactory, org.jfree.chart.JFreeChart, org.jfree.chart.plot.PlotOrientation, org.jfree.chart.servlet.ServletUtilities, org.jfree.data.category.DefaultCategoryDataset"%> <%
一. 下载与环境配置
1. 下载JFreeChart
JFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。其下载地址为:/project/showfiles.php?group_id=15494,当前最新版本为1.0.6。笔者下载的是1.0.6最新版。
jfreechart用法例子
jfreechart用法例子一、饼图:DefaultPieDataset dataset=new DefaultPieDataset();//开始填充数据dataset.setValue("Java", new Double(43.200000000000003D));dataset.setValue("Visual Basic", new Double(10D));dataset.setValue("C/C++", new Double(17.5D));dataset.setValue("PHP", new Double(32.5D));dataset.setValue("Perl", new Double(12.5D));JFreeChart chart=ChartFactory.createPieChart("2D饼型图",dataset,true,true,true);chart.setTitle("统计图");//设置图片标题ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection());StringimgaeFileName=ServletUtilities.saveChartAsJPEG(chart,300,200, info,session);//设置生成图片,包括图片的大小,长度是300,宽是200session.setAttribute("image_name1",imageFileName;String URL= request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;//Display为org.jfree.chart.servlet.DisplayChartsession.setAttribute("image_url1",URL);显示代码:(以下显示代码不注明了,是一样的,只是session中的属性名不同而已,大家注意区别)" width=300 height=200 border=0 usemap="#<%=session.getAttribute("image_name1") %>">二、3D饼图DefaultPieDataset defaultpiedataset = new DefaultPieDataset();defaultpiedataset.setValue("Java", new Double(43.200000000000003D));defaultpiedataset.setValue("Visual Basic", new Double(10D));defaultpiedataset.setValue("C/C++", new Double(17.5D));defaultpiedataset.setValue("PHP", new Double(32.5D));defaultpiedataset.setValue("Perl", new Double(12.5D));JFreeChart jfreechart = ChartFactory.createPieChart3D("3D 饼图", defaultpiedataset, true, false, false);PiePlot3D pieplot3d = (PiePlot3D)jfreechart.getPlot();String imageFileName2= ServletUtilities.saveChartAsJPEG(jfreechart,300,200,session);session.setAttribute("image_name2",imageFileName2);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName2;session.setAttribute("image_url2",URL);三、柱图DefaultCategoryDataset dataset=new DefaultCategoryDataset();//设置数据源dataset.setValue(new Double(43.200000000000003D),"图解","Java" );dataset.setValue( new Double(10D),"图解","Visual Basic");dataset.setValue(new Double(17.5D), "图解","C/C++");dataset.setValue(new Double(32.5D), "图解","PHP");dataset.setValue(new Double(12.5D), "图解","Perl");//添加数据,参数包括名称和数值JFreeChart chart1=ChartFactory.createBarChart3D("柱图","大人物","地盘", dataset,PlotOrientation.VERTICAL,false,false,false);CategoryPlot plot=chart1.getCategoryPlot();//BarRenderer3D renderer1=new BarRenderer3D();final BarRenderer renderer1 = (BarRenderer)plot.getRenderer();renderer1.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer1.setItemLabelsVisible(true);//显示每个柱子上的数据renderer1.setItemMargin(0.1);//设置每个柱子之间的距离plot.setRenderer(renderer1);//让上面对柱子的设置生效StringimageFileName=ServletUtilities.saveChartAsJPEG(chart1,300,20 0,session);//生成图片,包括图片的大小session.setAttribute("image_name3",imageFileName);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName;session.setAttribute("image_url3",URL);四、线图DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();defaultcategorydataset.addValue(212D, "Classes", "JDK 1.0");defaultcategorydataset.addValue(504D, "Classes", "JDK 1.1");defaultcategorydataset.addValue(1520D, "Classes", "SDK 1.2");defaultcategorydataset.addValue(1842D, "Classes", "SDK 1.3");defaultcategorydataset.addValue(2991D, "Classes", "SDK 1.4");JFreeChart jfreechart = ChartFactory.createLineChart("Java Standard Class Library", "线图", "Class Count", defaultcategorydataset, PlotOrientation.VERTICAL, false, true, false);jfreechart.addSubtitle(new TextTitle("Number of Classes By Release"));TextTitle texttitle = new TextTitle("线图");texttitle.setFont(new Font("SansSerif", 0, 10));texttitle.setPosition(RectangleEdge.BOTTOM);texttitle.setHorizontalAlignment(HorizontalAlignment.RIGH T);jfreechart.addSubtitle(texttitle);jfreechart.setBackgroundPaint(Color.white);CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();categoryplot.setBackgroundPaint(Color.lightGray);categoryplot.setRangeGridlinePaint(Color.white);NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();numberaxis.setStandardTickUnits(NumberAxis.createInteger TickUnits());LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();lineandshaperenderer.setShapesVisible(true);lineandshaperenderer.setDrawOutlines(true);lineandshaperenderer.setUseFillPaint(true);lineandshaperenderer.setFillPaint(Color.white);String imageFileName4 = ServletUtilities.saveChartAsJPEG(jfreechart,500,500,session);session.setAttribute("image_name4",imageFileName4);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName4;session.setAttribute("image_url4",URL);五、时序图TimeSeries timeseries = new TimeSeries("Random Data");Dayday = new Day(1, 1, 1990);double d = 100D;for(int j = 0; j < 4000; j++)try{d = (d + Math.random()) - 0.5D;timeseries.add(day, new Double(d));day = (Day)day.next();}catch(SeriesException seriesexception){System.err.println("Error adding to series");}XYDataset xydataset = new TimeSeriesCollection(timeseries);JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("时序图", "Day", "Value", xydataset, false, false, false);XYPlot xyplot = (XYPlot)jfreechart.getPlot();XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();xylineandshaperenderer.setDefaultShapesVisible(false);xylineandshaperenderer.setSeriesStroke(0, new BasicStroke(0.5F, 1, 1, 5F, new float[] {5F, 10F}, 0.0F));xyplot.setRenderer(xylineandshaperenderer);String imageFileName5 = ServletUtilities.saveChartAsJPEG(jfreechart,500,500,session);session.setAttribute("image_name5",imageFileName5);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName5;session.setAttribute("image_url5",URL);。
Jfreechart+ChartPanel实时曲线图实例
Jfreechart+ChartPanel实时曲线图实例如图:package com.wl.test.servlet;import java.awt.AWTException;import java.awt.Color;import java.awt.Dimension;import java.awt.Frame;import java.awt.Image;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.Toolkit;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.Calendar;import java.util.Random;import javax.swing.JFrame;import javax.swing.JOptionPane;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.NumberTickUnit;import org.jfree.chart.axis.ValueAxis;import bels.ItemLabelAnchor;import bels.ItemLabelPosition;import bels.StandardXYItemLabelGenerator; import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.title.TextTitle;import lisecond;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.ui.TextAnchor;public class TEST4 extends JFrame {/**-* @author wanglong-* @description JfreeChart+ChartPanel实时曲线图* @param args-*/private TrayIcon trayIcon;TimeSeries ts,ts2;public static void main(String[] args) {// TODO Auto-generated method stub-new TEST4();}public TEST4(){jbinit();}public void jbinit(){this.getContentPane().setLayout(null);this.setSize(600,400);this.setResizable(false);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);//设置默认的关闭窗口的方式MyTray();MyAction();MyChart();StartThread();this.show();}public void MyChart(){ts=new TimeSeries("温度",Millisecond.class);ts2=new TimeSeries("湿度",Millisecond.class);TimeSeriesCollection tsc=new TimeSeriesCollection();tsc.addSeries(ts);tsc.addSeries(ts2);JFreeChart jfChart=ChartFactory.createTimeSeriesChart("实时曲线图","时间", "数值", tsc, true, true, true);TextTitle subTitle=new TextTitle(String.valueOf(Calendar.getInstance().get(Calendar.YEAR))+"年份");jfChart.addSubtitle(subTitle);//设置子标题XYPlot xyPlot=(XYPlot)jfChart.getPlot();xyPlot.setDomainGridlinePaint(Color.red);//设置竖网格颜色xyPlot.setRangeGridlinePaint(Color.orange);//设置横网格颜色ValueAxis vx=xyPlot.getDomainAxis();//vx.setRange(0.0D,2000D);//设置Y轴范围//坐标轴标尺值字体//vx.setTickLabelFont(new Font("Serif",Font.CENTER_BASELINE,13));-//vx.setLabelFont(new Font("Serif",Font.CENTER_BASELINE,15));-//纵坐标间距设置//vx.setTickUnit(new NumberTickUnit(20));-vx.setAutoRange(true);XYLineAndShapeRenderer xr=(XYLineAndShapeRenderer)xyPlot.getRenderer();xr.setSeriesPaint(0, Color.blue);//设置线的颜色xr.setSeriesPaint(1, Color.green);xr.setBaseShapesVisible(true);//显示线上各个数据点//显示数据点上的数据值xr.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());xr.setBasePositiveItemLabelPosition(newItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_RIGHT));xr.setBaseItemLabelsVisible(true);ChartPanel cp=new ChartPanel(jfChart);cp.setSize(new Dimension(550,350));this.getContentPane().add(cp);}public void StartThread(){DataThread dt=new DataThread();dt.start();}public void MyAction(){this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e) {int result=JOptionPane.showConfirmDialog(null, "确定要退出吗?","退出",JOptionPane.OK_CANCEL_OPTION);if(result==JOptionPane.OK_OPTION){System.exit(0);}}public void windowIconified(WindowEvent e){if(SystemTray.isSupported()){setVisible(false);SystemTray st=SystemTray.getSystemTray();try {st.add(trayIcon);//添加系统托盘} catch (AWTException e1) {// TODO Auto-generated catch block-e1.printStackTrace();}}}});}public void MyTray(){PopupMenu pm=new PopupMenu();MenuItem showItem=new MenuItem("SHOW");MenuItem exitItem=new MenuItem("EXIT");pm.add(showItem);pm.add(exitItem);Image image = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("wap.jpg"));trayIcon=new TrayIcon(image,"chart test",pm);showItem.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub-setVisible(true);setExtendedState(Frame.NORMAL);SystemTray.getSystemTray().remove(trayIcon);//移除系统托盘}});exitItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int result=JOptionPane.showConfirmDialog(null, "确实要退出吗?","退出",JOptionPane.OK_CANCEL_OPTION);if(result==JOptionPane.OK_OPTION){System.exit(0);}}});}class DataThread extends Thread{public void run(){while(true){Millisecond ms=new Millisecond();ts.add(ms,new Random().nextInt(500)); ts2.add(ms,new Random().nextInt(500)); try {this.sleep(30000);} catch (InterruptedException e) {// TODO Auto-generated catch block-e.printStackTrace();}}} } }。
JFreeChart图表制作
两个大的包组成:org.jfree.chart 与org.jfree.data。其中前者主要与图 形本身有关,后者与图形显示的数据有关。 核心类主要有: org.jfree.chart.JFreeChart :图表对象,任何类型的图表的最终表现形 式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个 工厂类用于创建不同类型的图表对象。 org.jfree.data.category.XXXDataSet: 数据集对象,用于提供显示图 表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类。 org.jfree.chart.plot.XXXPlot :图表区域对象,基本上这个对象决定着 什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对 象的支持 org.jfree.chart.axis.XXXAxis :用于处理图表的两个轴:纵轴和横轴。 org.jfree.chart.render.XXXRender :负责如何显示一个图表对象。 org.jfree.chart.urls.XXXURLGenerator: 用于生成Web图表中每个项目 的鼠标点击链接。 XXXXXToolTipGenerator: 用于生成图象的帮助提示,不同类型图表对 应不同类型的工具提示类。
了解JFreeChart 利用JFreeChart生成饼状图 利用JFreeChart生成柱状图 利用JFreeChart生成折线图 利用JFreeChart生成时序图 JFreeChat的Web应用
JFreeChart(/) 是一个开 源的 JAVA 项目,它主要用来开发各种各样的图 表,这些图表包括:饼图、柱状图 ( 普通柱状图 以及堆栈柱状图 ) 、线图、区域图、分布图、混 合图、甘特图以及一些仪表盘等等。在这些不同 式样的图表上可以满足目前商业系统的要求。 JFreeChart 是一种基于 JAVA 语言的图表开发 技术。 JFreeChart 可用于 Servlet 、 JSP 、 Applet 、 Java Appication 环境中,通过 JDBC 可动态显示任何数据库数据。
JFreeChart_介绍
下载 解包 运行演示示例 编译源代码 产生JavaDoc文档
下载完JFreeChart压缩文件之后,我们需要将 该压缩文件解开。我们可以将文件解压到指定 的目录下面。 Linux/Unix环境下解压 Windows环境下解压 文件目录说明
在Linux/Unix环境下解压文件,使用下面命 令: Tar xvzf jfreechart-1.0.x.tar.gz 该命令将JFreeChart所有的文件包括源代码, 运行jar文件和doc文档解压到JFreeChart目录 下面
解压后的jfreechart目录下面,有许多文件和文 件夹,列表如下:
应当花一部分时间来熟悉这些文件,并详细阅 读README.txt文件。
下载 解包 运行演示示例 编译源代码 产生JavaDoc文档
在解压的文件中,有一个实例演示应用包含了 JFreeChart产生的大量图表演示示例。输入下 面命令可以运行该应用: Java –jar jfreechart-1.0.x-demo.jar 实例的源代码跟JFreeChart开发指南一并发 行,是收费的
介绍 饼图(Pie Charts) 直方条形图(Bar Charts) 折线图(Line Charts) XY(散点图) 时序图 柱状图 面积图 差异图
梯形图 甘特图 多轴图 复合/覆盖图 开发远景
有许多使用JFreeChart创建的图表实例,对 JFreeChart产生的图表类型做了概述,运行实 例命令如下: java -jar jfreechart-1.0.6-demo.jar
可以使用一个InternalXYDataset(XYDataset的 另一个扩展)数据产生柱状图:
通过实例跟我学JFreeChart 图表组件——在Java应用程序中创建时间序列图的应用实例(Eclipse开发工具版本)
1.1通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建时间序列图的应用实例(Eclipse开发工具版本)1.1.1创建时间序列图的应用实例时间序列图和折线图很相似,不同的是它在 domain轴的数据是时间而不是数字。
时间序列图的dataset 是XYDataset 接口,具体实现类是TimeSeriesCollection ,和上面类似,有TimeSeries 对象,它被添加入TimeSeriesCollection 。
1、添加时间序列图的类类名称为TimeSeriesDemo、包名称为com.px1987.j2sejfreechart.demo2、创建一个数据源(dataset)的代码示例TimeSeries timeseries = new TimeSeries("计算所培训中心",Month.class);timeseries.add(new Month(2, 2007), 181.8D);//这里用的是Month.class,同样还有Day.class Year.class 等等timeseries.add(new Month(3, 2007), 167.3D);timeseries.add(new Month(4, 2007), 153.8D);timeseries.add(new Month(6, 2007), 158.8D);timeseries.add(new Month(7, 2007), 148.3D);timeseries.add(new Month(8, 2007), 153.9D);timeseries.add(new Month(9, 2007), 142.7D);timeseries.add(new Month(10, 2007), 123.2D);timeseries.add(new Month(11, 2007), 131.8D);timeseries.add(new Month(12, 2007), 139.6D);timeseries.add(new Month(1, 2008), 142.9D);timeseries.add(new Month(2, 2008), 138.7D);timeseries.add(new Month(3, 2008), 137.3D);timeseries.add(new Month(4, 2008), 143.9D);timeseries.add(new Month(5, 2008), 139.8D);timeseries.add(new Month(6, 2008), 137D);timeseries.add(new Month(7, 2008), 132.8D);TimeSeries timeseries1 = new TimeSeries("沈阳培训中心",Month.class); timeseries1.add(new Month(2, 2007), 129.6D);timeseries1.add(new Month(3, 2007), 123.2D);timeseries1.add(new Month(4, 2007), 117.2D);timeseries1.add(new Month(5, 2007), 124.1D);timeseries1.add(new Month(6, 2007), 122.6D);timeseries1.add(new Month(7, 2007), 119.2D);timeseries1.add(new Month(8, 2007), 116.5D);timeseries1.add(new Month(9, 2007), 112.7D);timeseries1.add(new Month(10, 2007), 101.5D);timeseries1.add(new Month(11, 2007), 106.1D);timeseries1.add(new Month(12, 2007), 110.3D);timeseries1.add(new Month(1, 2008), 111.7D);timeseries1.add(new Month(2, 2008), 111D);timeseries1.add(new Month(4, 2008), 113.2D);timeseries1.add(new Month(5, 2008), 111.6D);timeseries1.add(new Month(6, 2008), 108.8D);timeseries1.add(new Month(7, 2008), 101.6D);TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();timeseriescollection.addSeries(timeseries);timeseriescollection.addSeries(timeseries1);timeseriescollection.setDomainIsPointsInTime(true); //domain轴上的刻度点代表的是时间点而不是时间段3、由ChartFactory 类产生出JFreeChart类的对象实例的代码示例JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("时间序列图示例","月份","每月的收入",oneXYDataset,true,true,false);jfreechart.setBackgroundPaint(Color.white);XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //获得 plot : XYPlot!!xyplot.setBackgroundPaint(Color.lightGray);xyplot.setDomainGridlinePaint(Color.white);xyplot.setRangeGridlinePaint(Color.white);xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));xyplot.setDomainCrosshairVisible(true);xyplot.setRangeCrosshairVisible(true);xyplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //对domain 轴上日期显示格式定义dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));4、生成和输出图表(本地图像的保存)的代码示例FileOutputStream fos_jpg = null;String tempDirName=null,picFileName=null;try {File tempDir = new File(System.getProperty("java.io.tmpdir"));tempDirName = tempDir.getAbsolutePath();picFileName=tempDirName+"/timeSeries.jpg";fos_jpg = new FileOutputStream(picFileName);ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,jfreechart,800,500,null);System.out.println("图表已经正确地保存到"+picFileName);}catch(IOException e){System.out.println("不能正确地保存"+picFileName);}finally{try {fos_jpg.close();}catch (Exception e){}}5、本示例完整的程序代码示例package com.px1987.j2sejfreechart.demo;import java.awt.Color;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.plot.XYPlot;import org.jfree.data.time.Month;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import org.jfree.ui.RectangleInsets;public class TimeSeriesDemo {public TimeSeriesDemo() throws IOException {JFreeChart timeSeriesChart = ChartFactory.createTimeSeriesChart("时间序列图示例","月份","每月的收入",createXYDataset(),true,true,false);timeSeriesChart.setBackgroundPaint(Color.white);XYPlot xyplot = (XYPlot)timeSeriesChart.getPlot(); //获得 plot : XYPlot!!xyplot.setBackgroundPaint(Color.lightGray);xyplot.setDomainGridlinePaint(Color.white);xyplot.setRangeGridlinePaint(Color.white);xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));xyplot.setDomainCrosshairVisible(true);xyplot.setRangeCrosshairVisible(true);xyplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //对domain 轴上日期显示格式定义dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));File tempDir = new File(System.getProperty("java.io.tmpdir"));String tempDirName = tempDir.getAbsolutePath();String picFileName=tempDirName+"/timeSeries.jpg";writeImagetoFile(picFileName,timeSeriesChart);System.out.println("图表已经正确地保存到"+picFileName);}public static void main(String[] args) throws IOException {new TimeSeriesDemo();}private void writeImagetoFile(String fileName,JFreeChart oneJFreeChart) throws IOException{FileOutputStream fos_jpg = null;fos_jpg =new FileOutputStream(fileName);ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,oneJFreeChart,600,500,null);}private XYDataset createXYDataset() {TimeSeries timeseries = new TimeSeries("计算所培训中心",Month.class);timeseries.add(new Month(2, 2007), 181.8D);//这里用的是Month.class,同样还有Day.class Year.class 等等timeseries.add(new Month(3, 2007), 167.3D);timeseries.add(new Month(4, 2007), 153.8D);timeseries.add(new Month(5, 2007), 167.6D);timeseries.add(new Month(6, 2007), 158.8D);timeseries.add(new Month(7, 2007), 148.3D);timeseries.add(new Month(8, 2007), 153.9D);timeseries.add(new Month(9, 2007), 142.7D);timeseries.add(new Month(10, 2007), 123.2D);timeseries.add(new Month(11, 2007), 131.8D);timeseries.add(new Month(12, 2007), 139.6D);timeseries.add(new Month(1, 2008), 142.9D);timeseries.add(new Month(2, 2008), 138.7D);timeseries.add(new Month(3, 2008), 137.3D);timeseries.add(new Month(4, 2008), 143.9D);timeseries.add(new Month(5, 2008), 139.8D);timeseries.add(new Month(6, 2008), 137D);timeseries.add(new Month(7, 2008), 132.8D);TimeSeries timeseries1 = new TimeSeries("沈阳培训中心",Month.class); timeseries1.add(new Month(2, 2007), 129.6D);timeseries1.add(new Month(3, 2007), 123.2D);timeseries1.add(new Month(4, 2007), 117.2D);timeseries1.add(new Month(5, 2007), 124.1D);timeseries1.add(new Month(6, 2007), 122.6D);timeseries1.add(new Month(7, 2007), 119.2D);timeseries1.add(new Month(8, 2007), 116.5D);timeseries1.add(new Month(9, 2007), 112.7D);timeseries1.add(new Month(10, 2007), 101.5D);timeseries1.add(new Month(11, 2007), 106.1D);timeseries1.add(new Month(12, 2007), 110.3D);timeseries1.add(new Month(1, 2008), 111.7D);timeseries1.add(new Month(2, 2008), 111D);timeseries1.add(new Month(3, 2008), 109.6D);timeseries1.add(new Month(4, 2008), 113.2D);timeseries1.add(new Month(5, 2008), 111.6D);timeseries1.add(new Month(6, 2008), 108.8D);timeseries1.add(new Month(7, 2008), 101.6D);TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); timeseriescollection.addSeries(timeseries);timeseriescollection.addSeries(timeseries1);timeseriescollection.setDomainIsPointsInTime(true); //domain轴上的刻度点代表的是时间点而不是时间段return timeseriescollection;}}6、测试本示例目前的应用效果7、将出现下面的提示8、图表为下面的结果。
JFreeChart 图表生成实例
JFreeChart图表生成实例(饼图、柱状图、折线图、时序图) importjava.awt.BasicStroke;importjava.awt.Color;importjava.io.FileOutputStream;importjava.io.IOException;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServlet;importorg.jfree.data.category.CategoryDataset;importorg.jfree.data.category.DefaultCategoryDataset;importorg.jfree.data.general.DefaultPieDataset;importorg.jfree.data.time.Day;importorg.jfree.data.time.TimeSeries;importorg.jfree.data.time.TimeSeriesCollection;importorg.jfree.data.xy.XYDataset;importorg.jfree.chart.*;importorg.jfree.chart.axis.CategoryAxis;importorg.jfree.chart.axis.DateAxis;importorg.jfree.chart.axis.DateTickUnit;importorg.jfree.chart.axis.DateTickUnitType;importorg.jfree.chart.axis.ValueAxis;importorg.jfree.chart.plot.CategoryPlot;importorg.jfree.chart.plot.PiePlot;importorg.jfree.chart.plot.PlotOrientation;importorg.jfree.chart.plot.XYPlot;importorg.jfree.chart.renderer.category.LineAndShapeRenderer;importorg.jfree.chart.servlet.ServletUtilities;importorg.jfree.chart.title.TextTitle;importcom.lowagie.text.Font;import demo.BarChart3DDemo1;/*** Servlet implementation class ChartDemoServlet*/public class ChartDemoServlet extends HttpServlet {private static final long serialVersionUID = 1L;publicChartDemoServlet() {super();// TODO Auto-generated constructor stub}public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{response.setContentType("image/jpeg");DefaultPieDataset data = getDataSet();CategoryDataset dataset = getDataSet2();DefaultCategoryDatasetlinedataset = createDataset();//JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", data, true, false, false);/**JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题"水果", // 目录轴的显示标签"产量", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是 false)false, // 是否生成工具false // 是否生成 URL 链接);**/JFreeChart chart = ChartFactory.createLineChart("折线图", // 图表标题"时间", // 横轴显示标签"销售额(百万)", // 纵轴显示标签linedataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例标识(对于简单的柱状图必须是 false)true, // 是否生成工具false // 是否生成 URL 链接);/*JFreeChart chart=ChartFactory.createTimeSeriesChart("编程词典全国销量统计", "销售月份", "销量(份)", createtimedata(), false, false, false);*//** jfreechart1.0.13生成的图片中,中文都以方框形式显示,中文乱码解决如下(包括:饼图、柱状图、时序图、折线图)。
用JFreeChart做JSP配置、柱形图、饼图.曲线图大全(四).docx
四.曲线图接着我们来介绍曲线图的使用。
在笔者日常的开发工作中,曲线图用得最多,它可以用来绘制趋势图、统计分析等。
首先我们在WebRoot下建立一个line目录,用来存放曲线图实例的jsp页面。
我们在该目录下建立sample1.jsp页面来做一个简单的曲线图的例子。
在开始编码前,让我们来看看与画曲线图密切相关的几个类:1)TimeSeriesCollection曲线数据的集合。
2)TimeSeries曲线信息序列。
3)ChartFactory可以利用该类的createTimeSeriesChart方法来创建曲线的JFreeChart对象。
在下例中,我们显示阿蜜果的blog在2007年度各月份的访问量情况,修改后的sample1.jsp 的内容如下:<%@ page contentType="text/html;charset=GBK"%><%@ page import = "org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.ServletUtilities,org.jfree.chart.title.TextTitle,org.jfree.data.time.TimeSeries,org.jfree.data.time.Month,org.jfree.data.time.TimeSeriesCollection,java.awt.Font"%><%//访问量统计时间线TimeSeries timeSeries = new TimeSeries("阿蜜果blog访问量统计", Month.class);//时间曲线数据集合TimeSeriesCollection lineDataset = new TimeSeriesCollection();//构造数据集合timeSeries.add(new Month(1, 2007), 11200);timeSeries.add(new Month(2, 2007), 9000);timeSeries.add(new Month(3, 2007), 6200);timeSeries.add(new Month(4, 2007), 8200);timeSeries.add(new Month(5, 2007), 8200);timeSeries.add(new Month(6, 2007), 12200);timeSeries.add(new Month(7, 2007), 13200);timeSeries.add(new Month(8, 2007), 8300);timeSeries.add(new Month(9, 2007), 12400);timeSeries.add(new Month(10, 2007), 12500);timeSeries.add(new Month(11, 2007), 13600);timeSeries.add(new Month(12, 2007), 12500);lineDataset.addSeries(timeSeries);JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份", "访问量", lineDataset, true, true, true);//设置子标题TextTitle subtitle = new TextTitle("2007年度", new Font("黑体", Font.BOLD, 12)); chart.addSubtitle(subtitle);//设置主标题chart.setTitle(new TextTitle("阿蜜果blog访问量统计", new Font("隶书", Font.ITALIC, 15)));chart.setAntiAlias(true);String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %><img src="<%= graphURL %>"width=500 height=300 border=0 usemap="#<%= filename %>">运行后的曲线效果如下图所示:有时我们需要显示各数据点及其数值,这是我们需要对上例进行一点改动,在JFreeChart chart = ChartFactory.createTimeSeriesChart……后,TextTitle subtitle = new TextTitle……前加上如下的代码:XYPlot plot = (XYPlot) chart.getPlot();XYLineAndShapeRenderer xylineandshaperenderer =(XYLineAndShapeRenderer)plot.getRenderer();//设置网格背景颜色plot.setBackgroundPaint(Color.white);//设置网格竖线颜色plot.setDomainGridlinePaint(Color.pink);//设置网格横线颜色plot.setRangeGridlinePaint(Color.pink);//设置曲线图与xy轴的距离plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));//设置曲线是否显示数据点xylineandshaperenderer.setBaseShapesVisible(true);//设置曲线显示各数据点的值XYItemRenderer xyitem = plot.getRenderer();xyitem.setBaseItemLabelsVisible(true);xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSI DE12, TextAnchor.BASELINE_LEFT));xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));plot.setRenderer(xyitem);并引入了一些另外的包,引入包的语句变成:<%@ page import = "org.jfree.chart.ChartFactory,org.jfree.chart.title.TextTitle,org.jfree.data.time.TimeSeries,org.jfree.data.time.Month,org.jfree.data.time.TimeSeriesCollection,org.jfree.chart.plot.XYPlot,org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,java.awt.Color,org.jfree.ui.RectangleInsets,java.awt.Font,org.jfree.chart.renderer.xy.XYItemRenderer,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.ServletUtilities,bels.*,org.jfree.ui.*"%>运行该实例,效果如下所示:上面两例的曲线图都是但曲线的,有时候我们对两个曲线进行比较,例如对阿蜜果在2006年度和2007年度的blog访问量进行比较,在此种情况下,我们需要在一个曲线图中显示两个曲线。
jfreechat制作柱、饼、曲线图型
jfreechat制作拄、饼、曲线图型准备工作jFreeChart下载地址:/jfreechart/index.php把jcommon-1.0.0.jar,jfreechart-1.0.1.jar放到web-inf\lib在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>/servlet/DisplayChart</url-pattern></servlet-mapping>拄型图<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.awt.Color,java.awt.Font,org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.general.DatasetUtilities,org.jfree.chart.plot.CategoryPlot,org.jfree.chart.axis.CategoryAxis,org.jfree.chart.axis.ValueAxis,org.jfree.chart.renderer.category.BarRenderer3D,bels.StandardCategoryItemLabelGenerator,org.jfree.chart.axis.AxisLocation"%><%double[][] data = new double[][] {{672, 766, 223, 540, 126},{325, 521, 210, 340, 106},{332, 256, 523, 240, 526}};String[] rowKeys = {"苹果","梨子","葡萄"};String[] columnKeys = {"北京","上海","广州","成都","深圳"};CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);JFreeChart chart = ChartFactory.createBarChart3D("水果销量图统计",null,null,dataset,PlotOrientation.VERTICAL,true,false,false);chart.setBackgroundPaint(Color.WHITE);CategoryPlot plot = chart.getCategoryPlot();//CategoryAxis domainAxis = plot.getDomainAxis();//domainAxis.setVerticalCategoryLabels(false);//plot.setDomainAxis(domainAxis);ValueAxis rangeAxis = plot.getRangeAxis();//设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);//设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer3D renderer = new BarRenderer3D();renderer.setBaseOutlinePaint(Color.BLACK);//设置Wall 的颜色renderer.setWallPaint(Color.gray);//设置每种水果代表的柱的颜色renderer.setSeriesPaint(0, new Color(0, 0, 255));renderer.setSeriesPaint(1, new Color(0, 100, 255));renderer.setSeriesPaint(2, Color.GREEN);//设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.1);//显示每个柱的数值,并修改该数值的字体属性renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setItemLabelsVisible(true);plot.setRenderer(renderer);//设置柱的透明度plot.setForegroundAlpha(0.6f);//设置地区、销量的显示位置plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; %><img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>"> 饼图<%@ page contentType="text/html;charset=GBK"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.plot.PiePlot,org.jfree.data.general.DefaultPieDataset,org.jfree.chart.title.TextTitle,org.jfree.chart.plot.CategoryPlot,org.jfree.chart.ChartUtilities,org.jfree.data.time.Day,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.DefaultCategoryDataset"%><%//图片标题String title = "空调2002年市场占有率";//设定数据源DefaultPieDataset piedata = new DefaultPieDataset();//第一个参数为名称,第二个参数是double数piedata.setValue("联想", 27.3);piedata.setValue("长城", 12.2);piedata.setValue("海尔", 5.5);piedata.setValue("美的", 17.1);piedata.setValue("松下", 9.0);piedata.setValue("科龙", 19.0);//创建JFreeChart,都使用ChartFactory来创建JFreeChart,很标准的工厂设计模式JFreeChart chart =ChartFactory.createPieChart(title, piedata, true, true, true);String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; %><img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>"> 曲线图<%@ page contentType="text/html;charset=GBK"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.plot.PiePlot,org.jfree.data.general.DefaultPieDataset,org.jfree.chart.title.TextTitle,org.jfree.chart.plot.CategoryPlot,org.jfree.chart.ChartUtilities,org.jfree.data.time.Day,org.jfree.data.time.TimeSeries,org.jfree.data.time.TimeSeriesCollection,org.jfree.data.time.TimeSeriesDataItem,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.DefaultCategoryDataset"%> <%// create a default chart based on some sample data...//曲线图标题String title = "趋势分析";//曲线图X轴提示String domain = "月份走势";//曲线图Y轴提示String range = "应收余额";//曲线图自标题String subtitleStr = "2003财年分析";//创建时间数据源//每一个TimeSeries在图上是一条曲线TimeSeries ca = new TimeSeries("用友");for (int i = 1999; i < 2005; i++) {for (int mon = 0; mon < 12; mon++) {//ca.add(new Month(mon + 1, i), new Double(500 + Math.random() * 100)); //TimeSeriesDataPair是一个时间点的数值体现ca.add(new TimeSeriesDataItem(new Day(1, mon + 1, i),new Double(500 + Math.random() * 100)));}}TimeSeries ibm = new TimeSeries("金碟");for (int i = 1999; i < 2005; i++) {for (int mon = 0; mon < 12; mon++) {//ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100)); ibm.add(new TimeSeriesDataItem(new Day(1, mon + 1, i),new Double(400 - Math.random() * 100)));}}TimeSeries king = new TimeSeries("东软");for (int i = 1999; i < 2005; i++) {for (int mon = 0; mon < 12; mon++) {//ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100));king.add(new TimeSeriesDataItem(new Day(1, mon + 1, i),new Double(300 - Math.random() * 100)));}}TimeSeries lx = new TimeSeries("联想");for (int i = 1999; i < 2005; i++) {for (int mon = 0; mon < 12; mon++) {//ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100));lx.add(new TimeSeriesDataItem(new Day(1, mon + 1, i),new Double(200 - Math.random() * 100)));}}//时间曲线数据集合TimeSeriesCollection dataset = new TimeSeriesCollection();dataset.addSeries(ca);dataset.addSeries(ibm);dataset.addSeries(king);dataset.addSeries(lx);//dataset.addSeries(jpy);//dataset.addSeries(mav);//时间曲线元素JFreeChart chart =ChartFactory.createTimeSeriesChart(title,domain,range,dataset,true,true,false);String filename = ServletUtilities.saveChartAsPNG(chart, 600, 300, null, session);String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; %><img src="<%= graphURL %>" width=600 height=300 border=0 usemap="#<%= filename %>"> 优惠促销打折网5号仓库。
JFreechart教程与实例
以图形报表的形式对数据进行统计分析,其显示结果非常直观、清晰,查看者能够一目了然。
然而图表的制作非常繁琐,而且当数据发生变化时,需要对其进行重新绘制。
在Java语言中,JFreeChart组件为图形报表技术提供了解决方案。
JFreeChart组件用于绘制动态图表,其强大的功能、出色的制图效果及便捷的操作方法在Java领域中已得到一致的认可。
本章将向读者介绍JFreeChart组件的使用方法及常见动态图表案例。
通过阅读本章,您可以:了解动态图表掌握JFreeChart组件的制图方法掌握制图对象理解数据集合掌握常用绘图区对象类型及关系掌握坐标轴对象类型及关系掌握图片渲染对象了解JFreeChart组件的内置JDBC1 JFreeChart简介JFreeChart是Java中开源的制图组件,主要用于生成各种动态图表。
在Java的图形报表技术中,JFreeChart组件提供了方便、快捷、灵活的制图方法。
1.1 认识JFreeChart组件作为一个功能强大的图形报表组件,JFreeChart为Java的图形报表技术提供了解决方案。
在Java项目的应用中,JFreeChart组件几乎可以满足目前图形报表的所有需求。
JFreeChart组件可以生成各种各样的图形报表,如常用的柱形图、区域图、饼形图、折线图、时序图、甘特图等;而对于同一种类型的图表,JFreeChart组件还提供了不同的表现方式。
这些效果可以在下载JFreeChart组件后,通过运行JFreeChart提供的例子程序jfreechart-1.0.13-demo.ja进行查看,其运行后的效果如图24.1所示。
1.2 JFreeChart的下载与使用JFreeChart是开放源代码的图形报表组件(开源站点上的一个Jave项目),其主页为/jfreechart/index.html,如图24.2所示。
在主页中单击DOWNLOAD导航链接将进入下载页面,选择所要下载的JfreeChart版本即可进行下载,在本书编写时其最新版本为1.0.13,本章将以此版本为例进行讲解。
通过实例跟我学JFreeChart 图表组件——在J2SE Java应用系统中应用JFreeChart实例(JBuilder开发工具版本)
1.1通过代码实例跟我学JFreeChart 图表组件——在J2SE Java应用系统中应用JFreeChart的实例(JBuilder开发工具版本)1、在JBuilder开发工具中编程JFreeChart 的API的程序首先要引入JFreeChart 的API所在的*.jar 包文件——由于jfreechart-1.0.5.jar 和jcommon-1.0.9.jar、gnujaxp.jar文件不是在JBuilder的JDK中所内带的,因此,应该将该三个文件包含到JBuilder的库环境变量中。
2、配置JFreeChart系统库文件的主要步骤(1)选择Tools菜单下的Configure Libraries菜单(2)在对话框内点击“New”按钮,然后在新的对话框内的名称栏:JFreeChartJar,在Location 中:User Home;然后点击“Add”按钮将JFreeChart的两个主要的jar包文件jfreechart-1.0.0-pre2.jar和jcommon-1.0.0-pre2.jar包含到本库中。
(3)点击“OK”按纽以添加。
3、创建PieChartDemo.java程序类(1)在JBuilder中创建一个使用JFreeChart的Java程序程序类名称为PieChartDemo.java,程序包名称为com.px1987.j2sejfreechart.demo。
(2)编程PieChartDemo.java的功能实现程序代码package com.px1987.j2sejfreechart.demo;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.data.general.DefaultPieDataset;public class PieChartDemo {public PieChartDemo() {}public static void main(String[] args) {PieChartDemo one=new PieChartDemo();JFreeChart oneJFreeChart=one.createOneChart();String chartFileName="myPie.jpeg";one.outPutOneChart(chartFileName, oneJFreeChart);}private DefaultPieDataset getDataSet(){DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("Java",100);dataset.setValue("C++",200);dataset.setValue("Basica",300);dataset.setValue("J2EE",400);dataset.setValue("",500);return dataset;}private JFreeChart createOneChart(){/*JFreeChart oneJFreeChart=ChartFactory.createPieChart3D("创建饼图的示例", // 图表标题getDataSet(), true, // 是否显示图例false, // 是否显示tooltipsfalse); //是否显示URLs*/JFreeChart oneJFreeChart=ChartFactory.createPieChart("XXX学校的选课结果", // 图表标题getDataSet(), true, // 是否显示图例true, // 是否显示tooltipstrue); //是否显示URLs/* PiePlot pieplot = (PiePlot)oneJFreeChart.getPlot(); //通过JFreeChart 对象获得PiePlot,然后对它进行修改和定制pieplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容*/return oneJFreeChart;}private boolean outPutOneChart(String chartFileName,JFreeChart oneJFreeChart){FileOutputStream fos_jpg = null;File tempDir =null;try {tempDir = new File(System.getProperty("java.io.tmpdir"));String tempDirName = tempDir.getAbsolutePath();String picFileName=tempDirName+"/"+chartFileName;fos_jpg = new FileOutputStream(picFileName);ChartUtilities.writeChartAsJPEG(fos_jpg, oneJFreeChart, 500,400);}catch(IOException e){System.out.println(" 在保存图时出现了错误,并且错误内容为"+e.getMessage());return false;}return true;}}4、编译和执行本示例程序5、将产生出下面的结果或者2D。
JFreeChart实例
return linedataset;
}
}
3:柱状图:
package test;
import java.awt.Color;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
// customise the range axis...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
linedataset.addValue(7.9, series2, type3);
linedataset.addValue(2.0, series3, type1);
linedataset.addValue(9.2, series3, type2);
linedataset.addValue(8.9, series3, type3);
return defaultpiedataset;
}
//生成图表主对象JFreeChart
public static JFreeChart createChart(PieDataset piedataset){
//定义图表对象
JFreeChart jfreechart = ChartFactory.createPieChart("CityInfoPort公司组织架构图",piedataset,true,true,false);
super(s);
跟我学JasperReports报表框架——使用脚本类程序动态生成JFreeChart图表的应用实例
1.1跟我学JasperReports报表框架——使用Java脚本类程序动态生成JFreeChart图表的应用实例1、实现原理(1)在报表上插入一个图片,赋给它一个变量Chart(为net.sf.jasperreports.engine.JRRenderable)类型。
在图片的Image Expresion处设置$V{Chart}。
(2)如何再编程一个类,该类为变量Chart返回一个JCommonDrawableRenderer对象,该对象包装一个JFreeChart的对象。
(3)最后利用实现自己的JFreeChart对象以产生满足要求的图表。
下面通过具体的代码示例及操作过程的截图详细说明实现方法和对应的程序代码。
2、产生一个报表,名称为“使用脚本类程序生成JFreeChart图表”3、为该报表设置一个名称为Chart的变量类型为net.sf.jasperreports.engine.JRRenderable,Calculate type 为System4、最后为下面的状态5、在该报表中插入一个图片6、设置图片的属性在图片的Image Expresion处设置$V{Chart}、Image Expresion Class设置为net.sf.jasperreports.engine.JRRenderable类型,其他按照下面的图示设置。
在Hyperlink设置为7、为该编程一个类JFreeChartScriptlet.java它可以动态生成一个饼图并赋给前面的Chart变量(请见下面的黑体的代码)。
import net.sf.jasperreports.engine.JRDefaultScriptlet;import net.sf.jasperreports.engine.JRScriptletException;import net.sf.jasperreports.renderers.JCommonDrawableRenderer;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.PiePlot3D;import org.jfree.data.general.DefaultPieDataset;import org.jfree.util.Rotation;public class JFreeChartScriptlet extends JRDefaultScriptlet{public void afterReportInit() throws JRScriptletException{DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("Java", new Double(43.2));dataset.setValue("Visual Basic", new Double(10.0));dataset.setValue("C/C++", new Double(17.5));dataset.setValue("PHP", new Double(32.5));dataset.setValue("Perl", new Double(1.0));JFreeChart chart =ChartFactory.createPieChart3D("Pie Chart 3D Demo 1",dataset,true,true,false);PiePlot3D plot = (PiePlot3D) chart.getPlot();plot.setStartAngle(290);plot.setDirection(Rotation.CLOCKWISE);plot.setForegroundAlpha(0.5f);plot.setNoDataMessage("No data to display");this.setVariableValue("Chart", new JCommonDrawableRenderer(chart));}}本JFreeChartScriptlet类继承自JRDefaultScriptlet类,并只需要重写其中的一个方法afterReportInit()方法,同时再将包装JFreeChart对象的JCommonDrawableRenderer类对象赋给名称为Chart的变量就行了。
JFreeChart支持的图表类型总结
JFreeChart支持的图表类型总结JFreeChart类:void setAntiAlias(boolean flag) 字体模糊边界void setBackgroundImage(Image image) 背景图片void setBackgroundImageAlignment(int alignment) 背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)void setBackgroundImageAlpha(float alpha) 背景图片透明度(0.0~1.0)void setBackgroundPaint(Paint paint) 背景色void setBorderPaint(Paint paint) 边界线条颜色void setBorderStroke(Stroke stroke) 边界线条笔触void setBorderVisible(boolean visible) 边界线条是否可见-----------------------------------------------------------------------------------------------------------TextTitle类:void setFont(Font font) 标题字体void setPaint(Paint paint) 标题字体颜色void setText(String text) 标题内容-----------------------------------------------------------------------------------------------------------StandardLegend(Legend)类:void setBackgroundPaint(Paint paint) 图示背景色void setTitle(String title) 图示标题内容void setTitleFont(Font font) 图示标题字体void setBoundingBoxArcWidth(int arcWidth) 图示边界圆角宽void setBoundingBoxArcHeight(int arcHeight) 图示边界圆角高void setOutlinePaint(Paint paint) 图示边界线条颜色void setOutlineStroke(Stroke stroke) 图示边界线条笔触void setDisplaySeriesLines(boolean flag) 图示项是否显示横线(折线图有效)void setDisplaySeriesShapes(boolean flag) 图示项是否显示形状(折线图有效)void setItemFont(Font font) 图示项字体void setItemPaint(Paint paint) 图示项字体颜色void setAnchor(int anchor) 图示在图表中的显示位置(参数常量在Legend类中定义)-----------------------------------------------------------------------------------------------------------Axis类:void setVisible(boolean flag) 坐标轴是否可见void setAxisLinePaint(Paint paint) 坐标轴线条颜色(3D轴无效)void setAxisLineStroke(Stroke stroke) 坐标轴线条笔触(3D轴无效)void setAxisLineVisible(boolean visible) 坐标轴线条是否可见(3D轴无效)void setFixedDimension(double dimension) (用于复合表中对多坐标轴的设置)void setLabel(String label) 坐标轴标题void setLabelFont(Font font) 坐标轴标题字体void setLabelPaint(Paint paint) 坐标轴标题颜色void setLabelAngle(double angle)` 坐标轴标题旋转角度(纵坐标可以旋转)void setTickLabelFont(Font font) 坐标轴标尺值字体void setTickLabelPaint(Paint paint) 坐标轴标尺值颜色void setTickLabelsVisible(boolean flag) 坐标轴标尺值是否显示void setTickMarkPaint(Paint paint) 坐标轴标尺颜色void setTickMarkStroke(Stroke stroke) 坐标轴标尺笔触void setTickMarksVisible(boolean flag) 坐标轴标尺是否显示ValueAxis(Axis)类:void setAutoRange(boolean auto) 自动设置数据轴数据范围void setAutoRangeMinimumSize(double size) 自动设置数据轴数据范围时数据范围的最小跨度void setAutoTickUnitSelection(boolean flag) 数据轴的数据标签是否自动确定(默认为true)void setFixedAutoRange(double length) 数据轴固定数据范围(设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围)void setInverted(boolean flag) 数据轴是否反向(默认为false)void setLowerMargin(double margin) 数据轴下(左)边距void setUpperMargin(double margin) 数据轴上(右)边距void setLowerBound(double min) 数据轴上的显示最小值void setUpperBound(double max) 数据轴上的显示最大值void setPositiveArrowVisible(boolean visible) 是否显示正向箭头(3D轴无效)void setNegativeArrowVisible(boolean visible) 是否显示反向箭头(3D轴无效)void setVerticalTickLabels(boolean flag) 数据轴数据标签是否旋转到垂直void setStandardTickUnits(TickUnitSource source) 数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)NumberAxis(ValueAxis)类:void setAutoRangeIncludesZero(boolean flag) 是否强制在自动选择的数据范围中包含0void setAutoRangeStickyZero(boolean flag) 是否强制在整个数据轴中包含0,即使0不在数据范围中void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式void setTickUnit(NumberTickUnit unit) 数据轴的数据标签(需要将AutoTickUnitSelection设false)DateAxis(ValueAxis)类:void setMaximumDate(Date maximumDate) 日期轴上的最小日期void setMinimumDate(Date minimumDate) 日期轴上的最大日期void setRange(Date lower,Date upper) 日期轴范围void setDateFormatOverride(DateFormat formatter) 日期轴日期标签的显示格式void setTickUnit(DateTickUnit unit) 日期轴的日期标签(需要将AutoTickUnitSelection设false)void setTickMarkPosition(DateTickMarkPosition position) 日期标签位置(参数常量在org.jfree.chart.axis.DateTickMarkPosition类中定义)CategoryAxis(Axis)类:void setCategoryMargin(double margin) 分类轴边距void setLowerMargin(double margin) 分类轴下(左)边距void setUpperMargin(double margin) 分类轴上(右)边距void setVerticalCategoryLabels(boolean flag) 分类轴标题是否旋转到垂直void setMaxCategoryLabelWidthRatio(float ratio) 分类轴分类标签的最大宽度-----------------------------------------------------------------------------------------------------------Plot类:void setBackgroundImage(Image image) 数据区的背景图片void setBackgroundImageAlignment(int alignment) 数据区的背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)void setBackgroundPaint(Paint paint) 数据区的背景图片背景色void setBackgroundAlpha(float alpha) 数据区的背景透明度(0.0~1.0)void setForegroundAlpha(float alpha) 数据区的前景透明度(0.0~1.0)void setDataAreaRatio(double ratio) 数据区占整个图表区的百分比void setOutLinePaint(Paint paint) 数据区的边界线条颜色void setOutLineStroke(Stroke stroke) 数据区的边界线条笔触void setNoDataMessage(String message) 没有数据时显示的消息void setNoDataMessageFont(Font font) 没有数据时显示的消息字体void setNoDataMessagePaint(Paint paint) 没有数据时显示的消息颜色CategoryPlot(Plot)类:void setDataset(CategoryDataset dataset) 数据区的2维数据表void setColumnRenderingOrder(SortOrder order) 数据分类的排序方式void setAxisOffset(Spacer offset) 坐标轴到数据区的间距void setOrientation(PlotOrientation orientation) 数据区的方向(PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL)void setDomainAxis(CategoryAxis axis) 数据区的分类轴void setDomainAxisLocation(AxisLocation location) 分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)void setDomainGridlinesVisible(boolean visible) 分类轴网格是否可见void setDomainGridlinePaint(Paint paint) 分类轴网格线条颜色void setDomainGridlineStroke(Stroke stroke) 分类轴网格线条笔触void setRangeAxis(ValueAxis axis) 数据区的数据轴void setRangeAxisLocation(AxisLocation location) 数据轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)void setRangeGridlinesVisible(boolean visible) 数据轴网格是否可见void setRangeGridlinePaint(Paint paint) 数据轴网格线条颜色void setRangeGridlineStroke(Stroke stroke) 数据轴网格线条笔触void setRenderer(CategoryItemRenderer renderer) 数据区的表示者(详见Renderer组)void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释void addRangeMarker(Marker marker,Layer layer) 给数据区加一个数值范围区域PiePlot(Plot)类:void setDataset(PieDataset dataset) 数据区的1维数据表void setIgnoreNullValues(boolean flag) 忽略无值的分类void setCircular(boolean flag) 饼图是否一定是正圆void setStartAngle(double angle) 饼图的初始角度void setDirection(Rotation direction) 饼图的旋转方向void setExplodePercent(int section,double percent) 抽取的那块(1维数据表的分类下标)以及抽取出来的距离(0.0~1.0),3D饼图无效void setLabelBackgroundPaint(Paint paint) 分类标签的底色void setLabelFont(Font font) 分类标签的字体void setLabelPaint(Paint paint) 分类标签的字体颜色void setLabelLinkMargin(double margin) 分类标签与图的连接线边距void setLabelLinkPaint(Paint paint) 分类标签与图的连接线颜色void setLabelLinkStroke(Stroke stroke) 分类标签与图的连接线笔触void setLabelOutlinePaint(Paint paint) 分类标签边框颜色void setLabelOutlineStroke(Paint paint) 分类标签边框笔触void setLabelShadowPaint(Paint paint) 分类标签阴影颜色void setMaximumLabelWidth(double width) 分类标签的最大长度(0.0~1.0)void setPieIndex(int index) 饼图的索引(复合饼图中用到)void setSectionOutlinePaint(int section,Paint paint) 指定分类饼的边框颜色void setSectionOutlineStroke(int section,Stroke stroke) 指定分类饼的边框笔触void setSectionPaint(int section,Paint paint) 指定分类饼的颜色void setShadowPaint(Paint paint) 饼图的阴影颜色void setShadowXOffset(double offset) 饼图的阴影相对图的水平偏移void setShadowYOffset(double offset) 饼图的阴影相对图的垂直偏移void setLabelGenerator(PieSectionLabelGenerator generator) 分类标签的格式,设置成null则整个标签包括连接线都不显示void setToolTipGenerator(PieToolTipGenerator generator) MAP中鼠标移上的显示格式void setURLGenerator(PieURLGenerator generator) MAP中钻取链接格式PiePlot3D(PiePlot)类:void setDepthFactor(double factor) 3D饼图的Z轴高度(0.0~1.0)MultiplePiePlot(Plot)类:void setLimit(double limit) 每个饼图之间的数据关联(详细比较复杂)void setPieChart(JFreeChart pieChart) 每个饼图的显示方式(见JFreeChart类个PiePlot类)-----------------------------------------------------------------------------------------------------------AbstractRenderer类:void setItemLabelAnchorOffset(double offset) 数据标签的与数据点的偏移void setItemLabelsVisible(boolean visible) 数据标签是否可见void setItemLabelFont(Font font) 数据标签的字体void setItemLabelPaint(Paint paint) 数据标签的字体颜色void setItemLabelPosition(ItemLabelPosition position) 数据标签位置void setPositiveItemLabelPosition(ItemLabelPosition position) 正数标签位置void setNegativeItemLabelPosition(ItemLabelPosition position) 负数标签位置void setOutLinePaint(Paint paint) 图形边框的线条颜色void setOutLineStroke(Stroke stroke) 图形边框的线条笔触void setPaint(Paint paint) 所有分类图形的颜色void setShape(Shape shape) 所有分类图形的形状(如折线图的点)void setStroke(Stroke stroke) 所有分类图形的笔触(如折线图的线)void setSeriesItemLabelsVisible(int series,boolean visible) 指定分类的数据标签是否可见void setSeriesItemLabelFont(int series,Font font) 指定分类的数据标签的字体void setSeriesItemLabelPaint(int series,Paint paint) 指定分类的数据标签的字体颜色void setSeriesItemLabelPosition(int series,ItemLabelPosition position) 数据标签位置void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position) 正数标签位置void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position) 负数标签位置void setSeriesOutLinePaint(int series,Paint paint) 指定分类的图形边框的线条颜色void setSeriesOutLineStroke(int series,Stroke stroke) 指定分类的图形边框的线条笔触void setSeriesPaint(int series,Paint paint) 指定分类图形的颜色void setSeriesShape(int series,Shape shape) 指定分类图形的形状(如折线图的点)void setSeriesStroke(int series,Stroke stroke) 指定分类图形的笔触(如折线图的线)AbstractCategoryItemRenderer(AbstractRenderer)类:void setLabelGenerator(CategoryLabelGenerator generator) 数据标签的格式void setToolTipGenerator(CategoryToolTipGenerator generator) MAP中鼠标移上的显示格式void setItemURLGenerator(CategoryURLGenerator generator) MAP中钻取链接格式void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator) 指定分类的数据标签的格式void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator) 指定分类的MAP中鼠标移上的显示格式void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator) 指定分类的MAP中钻取链接格式BarRenderer(AbstractCategoryItemRenderer)类:void setDrawBarOutline(boolean draw) 是否画图形边框void setItemMargin(double percent) 每个BAR之间的间隔void setMaxBarWidth(double percent) 每个BAR的最大宽度void setMinimumBarLength(double min) 最短的BAR长度,避免数值太小而显示不出void setPositiveItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的正数标签位置void setNegativeItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的负数标签位置BarRenderer3D(BarRenderer)类:void setWallPaint(Paint paint) 3D坐标轴的墙体颜色StackedBarRenderer(BarRenderer)类:没有特殊的设置StackedBarRenderer3D(BarRenderer3D)类:没有特殊的设置GroupedStackedBarRenderer(StackedBarRenderer)类:void setSeriesToGroupMap(KeyToGroupMap map) 将分类自由的映射成若干个组(KeyToGroupMap.mapKeyToGroup(series,group))LayeredBarRenderer(BarRenderer)类:void setSeriesBarWidth(int series,double width) 设定每个分类的宽度(注意设置不要使某分类被覆盖)WaterfallBarRenderer(BarRenderer)类:void setFirstBarPaint(Paint paint) 第一个柱图的颜色void setLastBarPaint(Paint paint) 最后一个柱图的颜色void setPositiveBarPaint(Paint paint) 正值柱图的颜色void setNegativeBarPaint(Paint paint) 负值柱图的颜色IntervalBarRenderer(BarRenderer)类:需要传IntervalCategoryDataset作为数据源GanttBarRenderer(IntervalBarRenderer)类:void setCompletePaint(Paint paint) 完成进度颜色void setIncompletePaint(Paint paint) 未完成进度颜色void setStartPercent(double percent) 设置进度条在整条中的起始位置(0.0~1.0)void setEndPercent(double percent) 设置进度条在整条中的结束位置(0.0~1.0)StatisticBarRenderer(BarRenderer)类:需要传StatisticCategoryDataset作为数据源LineAndShapeRenderer(AbstractCategoryItemRenderer)类:void setDrawLines(boolean draw) 是否折线的数据点之间用线连void setDrawShapes(boolean draw) 是否折线的数据点根据分类使用不同的形状void setShapesFilled(boolean filled) 所有分类是否填充数据点图形void setSeriesShapesFilled(int series,boolean filled) 指定分类是否填充数据点图形void setUseFillPaintForShapeOutline(boolean use) 指定是否填充数据点的Paint也被用于画数据点形状的边框LevelRenderer(AbstractCategoryItemRenderer)类:void setItemMargin(double percent) 每个分类之间的间隔void setMaxItemWidth(double percent) 每个分类的最大宽度CategoryStepRenderer(AbstractCategoryItemRenderer)类:void setStagger(boolean shouldStagger) 不同分类的图是否交错MinMaxCategoryRenderer(AbstractCategoryItemRenderer)类:void setDrawLines(boolean drawLines) 是否在每个分类线间画连接线void setGroupPaint(Paint groupPaint) 一组图形连接线的颜色void setGroupStroke(Stroke groupStroke) 一组图形连接线的笔触void setMaxIcon(Icon maxIcon) 最大值的ICONvoid setMinIcon(Icon minIcon) 最小值的ICONvoid setObjectIcon(Icon objectIcon) 所有值的ICONAreaRender(AbstractCategoryItemRenderer)类:没有特殊的设置StackedAreaRender(AreaRender)类:没有特殊的设置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Jfreechart+ChartPanel实时曲线图实例如图:package com.wl.test.servlet;import java.awt.AWTException;import java.awt.Color;import java.awt.Dimension;import java.awt.Frame;import java.awt.Image;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.Toolkit;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.Calendar;import java.util.Random;import javax.swing.JFrame;import javax.swing.JOptionPane;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.NumberTickUnit;import org.jfree.chart.axis.ValueAxis;import bels.ItemLabelAnchor;import bels.ItemLabelPosition;import bels.StandardXYItemLabelGenerator; import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.title.TextTitle;import lisecond;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.ui.TextAnchor;public class TEST4 extends JFrame {/**-* @author wanglong-* @description JfreeChart+ChartPanel实时曲线图* @param args-*/private TrayIcon trayIcon;TimeSeries ts,ts2;public static void main(String[] args) {// TODO Auto-generated method stub-new TEST4();}public TEST4(){jbinit();}public void jbinit(){this.getContentPane().setLayout(null);this.setSize(600,400);this.setResizable(false);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);//设置默认的关闭窗口的方式MyTray();MyAction();MyChart();StartThread();this.show();}public void MyChart(){ts=new TimeSeries("温度",Millisecond.class);ts2=new TimeSeries("湿度",Millisecond.class);TimeSeriesCollection tsc=new TimeSeriesCollection();tsc.addSeries(ts);tsc.addSeries(ts2);JFreeChart jfChart=ChartFactory.createTimeSeriesChart("实时曲线图","时间", "数值", tsc, true, true, true);TextTitle subTitle=new TextTitle(String.valueOf(Calendar.getInstance().get(Calendar.YEAR))+"年份");jfChart.addSubtitle(subTitle);//设置子标题XYPlot xyPlot=(XYPlot)jfChart.getPlot();xyPlot.setDomainGridlinePaint(Color.red);//设置竖网格颜色xyPlot.setRangeGridlinePaint(Color.orange);//设置横网格颜色ValueAxis vx=xyPlot.getDomainAxis();//vx.setRange(0.0D,2000D);//设置Y轴范围//坐标轴标尺值字体//vx.setTickLabelFont(new Font("Serif",Font.CENTER_BASELINE,13));-//vx.setLabelFont(new Font("Serif",Font.CENTER_BASELINE,15));-//纵坐标间距设置//vx.setTickUnit(new NumberTickUnit(20));-vx.setAutoRange(true);XYLineAndShapeRenderer xr=(XYLineAndShapeRenderer)xyPlot.getRenderer();xr.setSeriesPaint(0, Color.blue);//设置线的颜色xr.setSeriesPaint(1, Color.green);xr.setBaseShapesVisible(true);//显示线上各个数据点//显示数据点上的数据值xr.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());xr.setBasePositiveItemLabelPosition(newItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_RIGHT));xr.setBaseItemLabelsVisible(true);ChartPanel cp=new ChartPanel(jfChart);cp.setSize(new Dimension(550,350));this.getContentPane().add(cp);}public void StartThread(){DataThread dt=new DataThread();dt.start();}public void MyAction(){this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e) {int result=JOptionPane.showConfirmDialog(null, "确定要退出吗?","退出",JOptionPane.OK_CANCEL_OPTION);if(result==JOptionPane.OK_OPTION){System.exit(0);}}public void windowIconified(WindowEvent e){if(SystemTray.isSupported()){setVisible(false);SystemTray st=SystemTray.getSystemTray();try {st.add(trayIcon);//添加系统托盘} catch (AWTException e1) {// TODO Auto-generated catch block-e1.printStackTrace();}}}});}public void MyTray(){PopupMenu pm=new PopupMenu();MenuItem showItem=new MenuItem("SHOW");MenuItem exitItem=new MenuItem("EXIT");pm.add(showItem);pm.add(exitItem);Image image = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("wap.jpg"));trayIcon=new TrayIcon(image,"chart test",pm);showItem.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub-setVisible(true);setExtendedState(Frame.NORMAL);SystemTray.getSystemTray().remove(trayIcon);//移除系统托盘}});exitItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int result=JOptionPane.showConfirmDialog(null, "确实要退出吗?","退出",JOptionPane.OK_CANCEL_OPTION);if(result==JOptionPane.OK_OPTION){System.exit(0);}}});}class DataThread extends Thread{public void run(){while(true){Millisecond ms=new Millisecond();ts.add(ms,new Random().nextInt(500)); ts2.add(ms,new Random().nextInt(500)); try {this.sleep(30000);} catch (InterruptedException e) {// TODO Auto-generated catch block-e.printStackTrace();}}} } }。