代码改变世界

jfreeChart生成折线图示例(转)

2013-11-08 18:15  夜半花开  阅读(903)  评论(0编辑  收藏  举报

原文:http://xuehu2009.iteye.com/blog/480387


java代码:

  1 import java.awt.BasicStroke;  
  2 import java.awt.Color;  
  3 import java.awt.Polygon;  
  4 import java.awt.Shape;  
  5 import java.awt.geom.Rectangle2D;  
  6   
  7 import org.jfree.chart.ChartFactory;  
  8 import org.jfree.chart.ChartPanel;  
  9 import org.jfree.chart.JFreeChart;  
 10 import org.jfree.chart.axis.NumberAxis;  
 11 import org.jfree.chart.plot.CategoryPlot;  
 12 import org.jfree.chart.plot.DefaultDrawingSupplier;  
 13 import org.jfree.chart.plot.DrawingSupplier;  
 14 import org.jfree.chart.plot.PlotOrientation;  
 15 import org.jfree.chart.renderer.category.LineAndShapeRenderer;  
 16 import org.jfree.data.category.CategoryDataset;  
 17 import org.jfree.data.category.DefaultCategoryDataset;  
 18 import org.jfree.ui.ApplicationFrame;  
 19 import org.jfree.ui.RefineryUtilities;  
 20   
 21 /**    
 22  * A line chart demo showing the use of a custom drawing supplier.    
 23  *    
 24  */  
 25 public class LineChartDemo5 extends ApplicationFrame  
 26 {  
 27   
 28     /**    
 29      * Creates a new demo.    
 30      *    
 31      * @param title the frame title.    
 32      */  
 33     public LineChartDemo5(final String title)  
 34     {  
 35         super(title);  
 36         final CategoryDataset dataset = createDataset();  
 37         final JFreeChart chart = createChart(dataset);  
 38         final ChartPanel chartPanel = new ChartPanel(chart);  
 39         chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));  
 40         setContentPane(chartPanel);  
 41   
 42     }  
 43   
 44     /**    
 45      * Creates a sample dataset.    
 46      *    
 47      * @return a sample dataset.    
 48      */  
 49     private CategoryDataset createDataset()  
 50     {  
 51   
 52         // row keys...      
 53         final String series1 = "First";  
 54         final String series2 = "Second";  
 55         final String series3 = "Third";  
 56   
 57         // column keys...      
 58         final String type1 = "Type 1";  
 59         final String type2 = "Type 2";  
 60         final String type3 = "Type 3";  
 61         final String type4 = "Type 4";  
 62         final String type5 = "Type 5";  
 63         final String type6 = "Type 6";  
 64         final String type7 = "Type 7";  
 65         final String type8 = "Type 8";  
 66   
 67         // create the dataset...      
 68         final DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
 69   
 70         dataset.addValue(1.0, series1, type1);  
 71         dataset.addValue(4.0, series1, type2);  
 72         dataset.addValue(3.0, series1, type3);  
 73         dataset.addValue(5.0, series1, type4);  
 74         dataset.addValue(5.0, series1, type5);  
 75         dataset.addValue(7.0, series1, type6);  
 76         dataset.addValue(7.0, series1, type7);  
 77         dataset.addValue(8.0, series1, type8);  
 78   
 79         dataset.addValue(5.0, series2, type1);  
 80         dataset.addValue(7.0, series2, type2);  
 81         dataset.addValue(6.0, series2, type3);  
 82         dataset.addValue(8.0, series2, type4);  
 83         dataset.addValue(4.0, series2, type5);  
 84         dataset.addValue(4.0, series2, type6);  
 85         dataset.addValue(2.0, series2, type7);  
 86         dataset.addValue(1.0, series2, type8);  
 87   
 88         dataset.addValue(4.0, series3, type1);  
 89         dataset.addValue(3.0, series3, type2);  
 90         dataset.addValue(2.0, series3, type3);  
 91         dataset.addValue(3.0, series3, type4);  
 92         dataset.addValue(6.0, series3, type5);  
 93         dataset.addValue(3.0, series3, type6);  
 94         dataset.addValue(4.0, series3, type7);  
 95         dataset.addValue(3.0, series3, type8);  
 96   
 97         return dataset;  
 98   
 99     }  
100   
101     /**    
102      * Creates a sample chart.    
103      *    
104      * @param dataset the dataset.    
105      *    
106      * @return a chart.    
107      */  
108     private JFreeChart createChart(final CategoryDataset dataset)  
109     {  
110   
111         final JFreeChart chart = ChartFactory.createLineChart(  
112                 "Line Chart Demo 5", // chart title      
113                 "Type", // domain axis label      
114                 "Value", // range axis label      
115                 dataset, // data      
116                 PlotOrientation.VERTICAL, // orientation      
117                 true, // include legend      
118                 true, // tooltips      
119                 false // urls      
120                 );  
121   
122         // final StandardLegend legend = (StandardLegend) chart.getLegend();      
123         // legend.setDisplaySeriesShapes(true);      
124   
125         final Shape[] shapes = new Shape[3];  
126         int[] xpoints;  
127         int[] ypoints;  
128   
129         // right-pointing triangle      
130         xpoints = new int[] { -3, 3, -3 };  
131         ypoints = new int[] { -3, 0, 3 };  
132         shapes[0] = new Polygon(xpoints, ypoints, 3);  
133   
134         // vertical rectangle      
135         shapes[1] = new Rectangle2D.Double(-2, -3, 3, 6);  
136   
137         // left-pointing triangle      
138         xpoints = new int[] { -3, 3, 3 };  
139         ypoints = new int[] { 0, -3, 3 };  
140         shapes[2] = new Polygon(xpoints, ypoints, 3);  
141   
142         final DrawingSupplier supplier = new DefaultDrawingSupplier(  
143                 DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE,  
144                 DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE,  
145                 DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE,  
146                 DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE, shapes);  
147         final CategoryPlot plot = chart.getCategoryPlot();  
148         plot.setDrawingSupplier(supplier);  
149   
150         chart.setBackgroundPaint(Color.green);  
151   
152         // set the stroke for each series...      
153         plot.getRenderer().setSeriesStroke(  
154                 0,  
155                 new BasicStroke(2.0f, BasicStroke.CAP_ROUND,  
156                         BasicStroke.JOIN_ROUND, 1.0f,  
157                         new float[] { 10.0f, 6.0f }, 0.0f));  
158         plot.getRenderer().setSeriesStroke(  
159                 1,  
160                 new BasicStroke(2.0f, BasicStroke.CAP_ROUND,  
161                         BasicStroke.JOIN_ROUND, 1.0f,  
162                         new float[] { 6.0f, 6.0f }, 0.0f));  
163         plot.getRenderer().setSeriesStroke(  
164                 2,  
165                 new BasicStroke(2.0f, BasicStroke.CAP_ROUND,  
166                         BasicStroke.JOIN_ROUND, 1.0f,  
167                         new float[] { 2.0f, 6.0f }, 0.0f));  
168   
169         // customise the renderer...      
170         final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot  
171                 .getRenderer();  
172         // renderer.setDrawShapes(true);      
173         renderer.setItemLabelsVisible(true);  
174         // renderer.setLabelGenerator(new StandardCategoryLabelGenerator());      
175   
176         // customise the range axis...      
177         final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();  
178         rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());  
179         rangeAxis.setAutoRangeIncludesZero(false);  
180         rangeAxis.setUpperMargin(0.12);  
181   
182         return chart;  
183   
184     }  
185   
186     // ****************************************************************************      
187     // * JFREECHART DEVELOPER GUIDE *      
188     // * The JFreeChart Developer Guide, written by David Gilbert, is available *      
189     // * to purchase from Object Refinery Limited: *      
190     // * *      
191     // * http://www.object-refinery.com/jfreechart/guide.html *      
192     // * *      
193     // * Sales are used to provide funding for the JFreeChart project - please *      
194     // * support us so that we can continue developing free software. *      
195     // ****************************************************************************      
196   
197     /**    
198      * Starting point for the demonstration application.    
199      *    
200      * @param args ignored.    
201      */  
202     public static void main(final String[] args)  
203     {  
204   
205         final LineChartDemo5 demo = new LineChartDemo5("Line Chart Demo 5");  
206         demo.pack();  
207         RefineryUtilities.centerFrameOnScreen(demo);  
208         demo.setVisible(true);  
209   
210     }  
211   
212 }