Jfreechart显示数据点图表(线上可以显示点数据)

来源:互联网 发布:java线程池工作原理 编辑:程序博客网 时间:2024/04/28 18:04

Jfreechart显示数据点图表


journal_insert_pic_70539052

 

package com.ccxe.layer.code;import java.awt.Color;import java.awt.Font;import java.awt.RenderingHints;import java.io.FileOutputStream;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.Axis;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.labels.StandardXYToolTipGenerator;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.StandardXYItemRenderer;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.time.Day;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 HealthLineTao { public static void main(String[] args)  {   HealthLineTao healthline=new HealthLineTao("xiaotao","小淘");  healthline.CreatePicture();   }  String stockId;  String stockName; private XYLineAndShapeRenderer localObject;   /**构造函数,初始化**/  public HealthLineTao(String stockId, String stockName)  {   super();   this.stockId = stockId;   this.stockName = stockName;  }    private static XYDataset getDataSetHeight()  {      TimeSeries timeSeries1 = new TimeSeries("身高(cm)");     //时间曲线数据集合     TimeSeriesCollection lineDataset = new TimeSeriesCollection();         timeSeries1.add(new Day(22, 7, 2010), 46.0D);     timeSeries1.add(new Day(22, 8, 2010), 58.0D);     timeSeries1.add(new Day(22, 9, 2010), 60.0D);     timeSeries1.add(new Day(22, 10, 2010), 61.0D);     timeSeries1.add(new Day(22, 11, 2010), 63.0D);     timeSeries1.add(new Day(22, 12, 2010), 64.0D);     timeSeries1.add(new Day(22, 1, 2011), 66.0D);     timeSeries1.add(new Day(22, 2, 2011), 68.0D);     timeSeries1.add(new Day(22, 3, 2011), 70.0D);     timeSeries1.add(new Day(22, 4, 2011), 71.0D);     timeSeries1.add(new Day(22, 5, 2011), 72.0D);     timeSeries1.add(new Day(22, 6, 2011), 73.0D);     timeSeries1.add(new Day(22, 7, 2011), 74.8D);     timeSeries1.add(new Day(22, 8, 2011), 75.0D);     timeSeries1.add(new Day(22, 9, 2011), 76.0D);     timeSeries1.add(new Day(22, 10, 2011), 80.0D);         lineDataset.addSeries(timeSeries1);           return lineDataset;  }    private static XYDataset getDataSetWeight()  {     //时间曲线数据集合     TimeSeriesCollection lineDataset = new TimeSeriesCollection();        TimeSeries timeSeries2 = new TimeSeries("体重(kg)");       timeSeries2.add(new Day(22, 7, 2010), 3.1D);    timeSeries2.add(new Day(22, 8, 2010), 4.3D);    timeSeries2.add(new Day(22, 9, 2010), 5.3D);    timeSeries2.add(new Day(22, 10, 2010), 6.8D);    timeSeries2.add(new Day(22, 11, 2010), 7.0D);    timeSeries2.add(new Day(22, 12, 2010), 7.2D);    timeSeries2.add(new Day(22, 1, 2011), 7.4D);    timeSeries2.add(new Day(22, 2, 2011), 7.6D);    timeSeries2.add(new Day(22, 3, 2011), 7.8D);    timeSeries2.add(new Day(22, 4, 2011), 8.0D);    timeSeries2.add(new Day(22, 5, 2011), 8.4D);    timeSeries2.add(new Day(22, 6, 2011), 8.6D);    timeSeries2.add(new Day(22, 7, 2011), 8.7D);    timeSeries2.add(new Day(22, 8, 2011), 9.0D);    timeSeries2.add(new Day(22, 9, 2011), 9.2D);    timeSeries2.add(new Day(22, 10, 2011), 10.0D);         lineDataset.addSeries(timeSeries2);             return lineDataset;  }    @SuppressWarnings("deprecation") public void CreatePicture()  {   XYDataset dataset=getDataSetHeight();   JFreeChart chart = ChartFactory.createTimeSeriesChart("分时图", "时间","身高(cm)", dataset, true, true, false);   XYPlot plot = (XYPlot) chart.getPlot();   //设置网格背景颜色   plot.setBackgroundPaint(Color.white);   plot.setOutlineVisible(true);   plot.setOutlinePaint(Color.magenta);   //设置网格竖线颜色   plot.setDomainGridlinePaint(Color.pink);//   plot.setDomainGridlinesVisible(false);   //设置网格横线颜色   plot.setRangeGridlinePaint(Color.pink);   //设置曲线图与xy轴的距离   plot.setAxisOffset(new RectangleInsets(10D, 10D, 10D, 10D));     //对X轴做操作   ValueAxis domainAxis = plot.getDomainAxis();   domainAxis.setTickLabelsVisible(true);//X轴的标题文字是否显示   domainAxis.setTickMarksVisible(true);   domainAxis.setAutoRange(true);  // //对Y轴做操作   ValueAxis rAxisL = plot.getRangeAxis();   ((Axis) rAxisL).setTickLabelsVisible(true);//Y轴的标题文字是否显示   ((NumberAxis) rAxisL).setAutoRangeStickyZero(true);   //身高   XYLineAndShapeRenderer localXYItemRenderer = (XYLineAndShapeRenderer)plot.getRenderer();  localXYItemRenderer.setBaseShapesVisible(true);  localXYItemRenderer    .setBaseToolTipGenerator(new StandardXYToolTipGenerator(      "{0}: ({1}, {2})", new SimpleDateFormat("d-MMM-yyyy"),      new DecimalFormat("0.00")));     //体重  NumberAxis localNumberAxis2 = new NumberAxis("体重(kg)");  localNumberAxis2.setUpperMargin(1.0D);  plot.setRangeAxis(1, localNumberAxis2);  plot.setDataset(1, getDataSetWeight());  plot.setRangeAxis(1, localNumberAxis2);  plot.mapDatasetToRangeAxis(1, 1);    StandardXYItemRenderer xYItemRenderer = new StandardXYItemRenderer();  xYItemRenderer.setBaseShapesVisible(true);  xYItemRenderer  .setBaseToolTipGenerator(new StandardXYToolTipGenerator(    "{0}: ({1}, {2})", new SimpleDateFormat("d-MMM-yyyy"),    new DecimalFormat("0.00")));  plot.setRenderer(1, xYItemRenderer);  ChartUtilities.applyCurrentTheme(chart);    /*--柱状图start  XYBarRenderer localXYBarRenderer = new XYBarRenderer(0.2D);    localXYBarRenderer    .setBaseToolTipGenerator(new StandardXYToolTipGenerator(      "{0}: ({1}, {2})", new SimpleDateFormat("d-MMM-yyyy"),      new DecimalFormat("0,000.00")));  plot.setRenderer(1, localXYBarRenderer);  ChartUtilities.applyCurrentTheme(chart);  localXYBarRenderer.setBarPainter(new StandardXYBarPainter());  localXYBarRenderer.setShadowVisible(false);    柱状图end--*/  //  //对Y轴做操作    ValueAxis rAxisR = plot.getRangeAxis(1);    ((Axis) rAxisR).setTickLabelsVisible(true);//Y轴的标题文字是否显示    ((NumberAxis) rAxisR).setAutoRangeStickyZero(true);     //    XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();       //设置曲线是否显示数据点//    xylineandshaperenderer.setBaseShapesVisible(true);//    xylineandshaperenderer.setSeriesShapesVisible(0, true);//    xylineandshaperenderer.setSeriesShapesVisible(1, true);        //设置曲线显示各数据点的值//     XYItemRenderer xyitem = plot.getRenderer();  //     xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));//     xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());//     xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 140));//     xyitem.setBaseItemLabelsVisible(false);//     plot.setRenderer(xyitem);//将修改后的属性值保存到图中         /*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/     chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);         //设置X轴坐标上的文字  domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));  //设置X轴的标题文字  domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));  //设置Y轴坐标上的文字  rAxisL.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));  //设置Y轴的标题文字  rAxisL.setLabelFont(new Font("黑体", Font.PLAIN, 12));       //设置Y轴坐标上的文字  rAxisR.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));  //设置Y轴的标题文字  rAxisR.setLabelFont(new Font("黑体", Font.PLAIN, 12));       //底部汉字乱码的问题   chart.getLegend().setItemFont(new Font("宋体",Font.PLAIN,12));     //设置子标题   String subtitletext=stockName+" "+"英文拼音("+stockId+")";   TextTitle subtitle = new TextTitle(subtitletext, new Font("隶书", Font.ITALIC, 15));   chart.addSubtitle(subtitle);     //设置主标题//   String title=stockName+" "+"英文拼音("+stockId+")";   String title="2010年7月——2011年11月成长指标";   String filename="HealthLine_"+stockName;   chart.setTitle(new TextTitle(title, new Font("黑体", Font.BOLD, 16)));   chart.setAntiAlias(true);//字体模糊边界     FileOutputStream fos_jpg = null;    /* 导出分时图的jpg格式的图片*/   try   {    fos_jpg = new FileOutputStream("D:"+filename+".jpg");    ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 1024, 480, null);    fos_jpg.close();   }   catch (Exception e)   {   }  }}