Jfreechart(未看)

来源:互联网 发布:手机恶作剧软件 编辑:程序博客网 时间:2024/04/29 15:43

jfreechart详细设置 http://gavinshaw.iteye.com/blog/468956

                              http://hoocy.iteye.com/blog/327162
 
 
[java] view plaincopy
  1. package CreateChart;  
  2.   
  3. import graph.readXmlFile.ReadXmlFileToObject;  
  4. import graph.xmlModel.Chart;  
  5.   
  6. import java.util.ArrayList;  
  7. import java.util.Collections;  
  8. import java.util.List;  
  9. import java.awt.Color;  
  10. import java.awt.Font;  
  11. import java.awt.Paint;  
  12. import java.io.FileNotFoundException;  
  13. import java.io.FileOutputStream;  
  14. import java.io.IOException;  
  15.   
  16. import org.jfree.chart.ChartFactory;  
  17. import org.jfree.chart.ChartUtilities;  
  18. import org.jfree.chart.JFreeChart;  
  19. import org.jfree.chart.axis.AxisLocation;  
  20. import org.jfree.chart.axis.CategoryAxis;  
  21. import org.jfree.chart.axis.CategoryLabelPositions;  
  22. import org.jfree.chart.axis.NumberAxis;  
  23. import org.jfree.chart.axis.NumberTickUnit;  
  24. import org.jfree.chart.axis.ValueAxis;  
  25. import org.jfree.chart.plot.CategoryPlot;  
  26. import org.jfree.chart.plot.PlotOrientation;  
  27. import org.jfree.chart.plot.XYPlot;  
  28. import org.jfree.chart.renderer.category.LineAndShapeRenderer;  
  29. import org.jfree.chart.renderer.category.LineRenderer3D;  
  30. import org.jfree.chart.title.LegendTitle;  
  31. import org.jfree.chart.title.TextTitle;  
  32. import org.jfree.data.category.CategoryDataset;  
  33. import org.jfree.data.category.DefaultCategoryDataset;  
  34. import org.jfree.data.time.Month;  
  35. import org.jfree.data.time.TimeSeries;  
  36. import org.jfree.data.time.TimeSeriesCollection;  
  37. import org.jfree.data.xy.XYDataset;  
  38. public class CreateChart {  
  39.   
  40.     //图片宽高  
  41.     private static int width= 0;  
  42.     private static int height = 0;  
  43.     //图片横向、纵向扩展倍数  
  44.     private static int XExtendNum = 20;  
  45.     private static int YExtendNum = 10;  
  46.     //y轴最小值、最大值  
  47.     private static double yMinValue= 0.0;  
  48.     private static double yMaxValue= 0.0;  
  49.     //y轴刻度间隔值  
  50.     private static final double YDISTANCE = 0.5d;  
  51.     //定义一个集合xmlMoneyList,存放xml_money已得到最大最小值  
  52.     private static List<Double> xmlMoneyList = new ArrayList<Double>();  
  53.     //定义标题、横轴、纵轴、图例名称  
  54.     private static String titleName = "时间&金钱";  
  55.     private static String XName = "时间";  
  56.     private static String YName = "金钱";  
  57.     private static String TLName = "波动率";  
  58.     //图片生成到的路径  
  59.     private static String picOutPath = "e:/money.jpg";  
  60.     //设置背景颜色  
  61.     private static Paint backColor = Color.LIGHT_GRAY;  
  62.     //设置背景 横向网格线条的颜色  
  63.     private static Paint backXColor = Color.blue;  
  64.     //设置背景 纵向网格线条的颜色  
  65.     private static Paint backYColor = Color.blue;  
  66.     //设置波动率 线条的颜色,alpha  
  67.     private static Color lineColor =  new Color(9,171,40);  
  68.     //控制波动率图线的alpha值,alpha值在0.0-1.0之间  
  69.     private static float alpha = 1.0f;  
  70.     //设置图表边框的颜色  
  71.     private static Paint borderColor = Color.yellow;  
  72.     //设置标题字体、加粗类型、大小  
  73.     private static Font titleFont = new Font("宋体", Font.BOLD, 22);  
  74.     //设置横轴、刻度(字体、加粗类型、大小)  
  75.     private static Font XFont = new Font("宋体" , Font.BOLD , 15);  
  76.     private static Font XKDFont = new Font("宋体" , Font.PLAIN , 10);  
  77.     //设置纵轴、刻度(字体、加粗类型、大小)  
  78.     private static Font YFont = new Font("宋体" , Font.BOLD , 15);  
  79.     //设置图例、刻度(字体、加粗类型、大小)  
  80.     private static Font TLFont = new Font("宋体" , Font.PLAIN , 10);  
  81.     //设置横轴数据 倾斜方向  
  82.     private static CategoryLabelPositions xplable = CategoryLabelPositions.UP_90;  
  83.       
  84.     /** 
  85.      * 生成图表 
  86.      * @param args 
  87.      * @throws IOException 
  88.      */  
  89.     public static void main(String[] args) throws IOException  
  90.     {  
  91.         //获取Xml文件路径,当然,这里路径是写死的  
  92.         String Path = System.getProperty("user.dir")+"\\sourceXmlFile\\klineServlet.xml";  
  93.         ReadXmlFileToObject r = ReadXmlFileToObject.getInstance();  
  94.         Chart chartObject = r.insertDataToChart(Path);  
  95.   
  96.         //定义JFreeChart  
  97.         JFreeChart chart = ChartFactory.createLineChart(  
  98.                 titleName,                  // 标题  
  99.                 XName,                      // 横坐标  
  100.                 YName,                      // 纵坐标  
  101.                 (CategoryDataset) getDataSet(chartObject),//获取数据  
  102.                 PlotOrientation.VERTICAL,   // 竖直图表  
  103.                 true,                       // 是否显示legend  
  104.                 false,                      // 是否显示tooltip  
  105.                 false                       // 是否使用url链接  
  106.         );  
  107.         //处理标题、x、y轴中英文字体,避免中文乱码、图表样式  
  108.         doHandleWord(chart);  
  109.         //输出图片  
  110.         outPutPic(chart);  
  111.     }  
  112.   
  113.     //处理标题、x、y轴中英文字体,避免中文乱码、图表样式  
  114.     private static void doHandleWord(JFreeChart chart) {  
  115.         //start标题处理  
  116.         TextTitle textTitle = chart.getTitle();   
  117.         textTitle.setFont(titleFont);   
  118.         //nd标题处理  
  119.   
  120.         //设置图的高级属性   
  121.         CategoryPlot plot = (CategoryPlot)chart.getPlot();  
  122.         LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) plot.getRenderer();  
  123.           
  124.         //start横轴处理  
  125.         //取得横轴  
  126.         CategoryAxis categoryAxis = plot.getDomainAxis();  
  127.         //设置横轴显示标签的字体  
  128.         categoryAxis.setLabelFont(XFont);  
  129.         //分类标签以90度角倾斜  
  130.         categoryAxis.setCategoryLabelPositions(xplable);  
  131.         categoryAxis.setTickLabelFont(XKDFont);  
  132.         //end横轴处理  
  133.   
  134.         //start纵轴处理  
  135.         NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();  
  136.         //设置纵轴显示标签的字体  
  137.         numberAxis.setLabelFont(YFont);  
  138.         //设置纵轴刻度 非自动处理  
  139.         numberAxis.setAutoTickUnitSelection(false);  
  140.         //设置增值 为10各单位 ,太小了图片会很模糊  
  141.         NumberTickUnit   nt=   new   NumberTickUnit(YDISTANCE);   
  142.         numberAxis.setTickUnit(nt);   
  143.         //设置纵坐标的起始值  
  144.         numberAxis.setLowerBound(yMinValue);  
  145.         numberAxis.setUpperBound(yMaxValue);  
  146.         //end纵轴处理  
  147.   
  148.         //底部图例中文设置  
  149.         chart.getLegend().setItemFont(TLFont);   
  150.           
  151.          //设置网格竖线颜色   
  152.          plot.setDomainGridlinePaint(backYColor);  
  153.          plot.setDomainGridlinesVisible(true);   
  154.          //设置网格横线颜色   
  155.          plot.setRangeGridlinePaint(backXColor);   
  156.          plot.setRangeGridlinesVisible(true);   
  157.          //图片背景色   
  158.          plot.setBackgroundPaint(backColor);   
  159.          plot.setOutlineVisible(true);   
  160.          //图边框颜色   
  161.          plot.setOutlinePaint(borderColor);   
  162.          //控制波动率图线的alpha值,alpha值在0.0-1.0之间  
  163.          plot.setForegroundAlpha(alpha);  
  164.          //设置波动率图线的颜色  
  165.          lineandshaperenderer.setSeriesPaint(0, lineColor);  
  166.     }  
  167.   
  168.     //输出图片  
  169.     private static void outPutPic(JFreeChart chart) {  
  170.         FileOutputStream fos = null;  
  171.         try {  
  172.             fos = new FileOutputStream(picOutPath);  
  173.             ChartUtilities.writeChartAsPNG(fos, chart, width, height);  
  174.         } catch (IOException e) {  
  175.             e.printStackTrace();  
  176.         }finally{  
  177.             try {  
  178.                 fos.close();  
  179.             } catch (IOException e) {  
  180.                 e.printStackTrace();  
  181.             }  
  182.         }  
  183.     }  
  184.   
  185.   
  186.     //返回一个CategoryDataset实例  
  187.     private static CategoryDataset getDataSet(Chart chartObject)  
  188.     {  
  189.         //关键1.定义你要使用的图形类型实例  
  190.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  191.   
  192.         //根据取到的数据多少,决定图片大小,规则自己定义(图片的长=横轴显示的个数*20 宽=横轴显示的个数*10 动态扩展)  
  193.         List<String> stringList = disposeString(chartObject);  
  194.         width = stringList.size() * XExtendNum;  
  195.         height = stringList.size() * YExtendNum;  
  196.   
  197.         for(int i = 0 ;i < stringList.size() ; i++)  
  198.         {  
  199.             String ptValue = stringList.get(i);  
  200.             String[] rs=ptValue.split("%");  
  201.             String time = rs[0];  
  202.             String xml_money =rs[1];  
  203.             //你们让取的最后一个值,我不知道要用到什么地方,就先把值传到这里吧,  
  204.             String index_number = rs[2];  
  205.   
  206.             //把所有的xml_money都放放入集合xmlMoneyList  
  207.             xmlMoneyList.add(Double.parseDouble(xml_money));  
  208.               
  209.             //关键2.将你取到的数据,添加到实例dataset中去,参数1:y轴数据、参数2:图例名称、参数3:x轴数据  
  210.             dataset.addValue(Double.parseDouble(xml_money),TLName, time);  
  211.         }  
  212.   
  213.         //对xmlMoneyList排序,默认为升序  
  214.         Collections.sort(xmlMoneyList);  
  215.         /**取到最大、最小值,因为我们得到的最大值最小值可能处于75.45-76.4之间, 
  216.            这样在步伐增值为0.5的时候就会丢失一些不必要的数据,所以我们采用 
  217.            最小值向下取最小整数(75),最大值向上取最小整数 77 
  218.          */  
  219.         yMinValue = Math.floor(xmlMoneyList.get(0));  
  220.         yMaxValue = Math.round(xmlMoneyList.get(xmlMoneyList.size() - 1) + 0.5);  
  221.   
  222.         //关键3:返回数据  
  223.         return dataset;  
  224.     }  
  225.   
  226.     /** 
  227.      * 处理XML文件中PT标签中的值,得到我需要得到的即可,我只需要得到第2、6、7个数据 
  228.      */  
  229.     private static List<String> disposeString(Chart chartObject)  
  230.     {  
  231.         //因为一条数据里面有好几种,所以考虑用list嵌套  
  232.         List<String> ptValue = new ArrayList<String>();  
  233.         //获得pt的个数  
  234.         int pt_num = chartObject.getPts().getPtList().size();  
  235.         for(int i = 0 ;i < pt_num ; i++)  
  236.         {  
  237.             //遍历数据  
  238.             String data = chartObject.getPts().getPtList().get(i).getValue();  
  239.             /* 
  240.              * 因为数据格式是:20110624;09:35;75.75;75.6;75.75;75.5;706000;53407200.000;0;0 
  241.              * 我暂时不考虑其他情况,默认为数据都是这样的数据 
  242.              */  
  243.             String[] datas = data.split(";");  
  244.             //按照您们的要求去取2、6、7、的数据  
  245.             String time = datas[1];  
  246.             String money = datas[5];  
  247.             String index_number = datas[6];  
  248.             String rs = time+"%"+money+"%"+index_number;  
  249.             //然后把数据放到集合中  
  250.             ptValue.add(rs);  
  251.         }  
  252.   
  253.         return ptValue;  
  254.     }  
  255. }  
原创粉丝点击