原文: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 }