001package ca.bc.webarts.tools; 002 003import java.awt.Color ; 004 005//import org.jfree.chart.demo; 006 007import org.jfree.chart.ChartFactory; 008import org.jfree.chart.ChartPanel; 009import org.jfree.chart.JFreeChart; 010import org.jfree.chart.title.LegendTitle; 011import org.jfree.chart.axis.AxisLocation; 012import org.jfree.chart.axis.NumberAxis3D; 013import org.jfree.chart.axis.ValueAxis; 014import org.jfree.chart.plot.CategoryPlot; 015import org.jfree.chart.plot.DatasetRenderingOrder; 016import org.jfree.chart.plot.PlotOrientation; 017import org.jfree.chart.renderer.category.CategoryItemRenderer; 018import org.jfree.chart.renderer.category.LineAndShapeRenderer; 019import org.jfree.data.category.CategoryDataset; 020import org.jfree.data.category.DefaultCategoryDataset; 021import org.jfree.ui.ApplicationFrame; 022import org.jfree.ui.RefineryUtilities; 023 024 /** 025 * A simple demonstration application showing how to create a dual axis chart based on data 026 * from two {@link CategoryDataset} instances. 027 * 028 * @author David Gilbert 029 */ 030 public class DualAxisDemo4 extends ApplicationFrame { 031 032 /** 033 * Creates a new demo instance. 034 * 035 * @param title the frame title. 036 */ 037 public DualAxisDemo4(String title) { 038 039 super(title); 040 041 CategoryDataset dataset1 = createDataset1(); 042 043 // create the chart... 044 JFreeChart chart = ChartFactory.createBarChart3D( 045 "Dual Axis Chart", // chart title 046 "Category", // domain axis label 047 "Value", // range axis label 048 dataset1, // data 049 PlotOrientation.VERTICAL, 050 true, // include legend 051 true, 052 false 053 ); 054 055 // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART... 056 057 // set the background color for the chart... 058 chart.setBackgroundPaint(new Color (0xCC, 0xFF, 0xCC)); 059 chart.getLegend().setLegendItemGraphicLocation(org.jfree.ui.RectangleAnchor.BOTTOM); 060 061 // get a reference to the plot for further customisation... 062 CategoryPlot plot = chart.getCategoryPlot(); 063 plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT); 064 plot.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT); 065 CategoryItemRenderer renderer1 = plot.getRenderer(); 066 renderer1.setSeriesPaint(0, Color.red); 067 renderer1.setSeriesPaint(1, Color.yellow); 068 renderer1.setSeriesPaint(2, Color.green); 069 CategoryDataset dataset2 = createDataset2(); 070 ValueAxis axis2 = new NumberAxis3D("Secondary"); 071 plot.setRangeAxis(1, axis2); 072 plot.setDataset(1, dataset2); 073 plot.mapDatasetToRangeAxis(1,1); 074 CategoryItemRenderer renderer2 = new LineAndShapeRenderer(); 075 renderer2.setSeriesPaint(0, Color.blue); 076 plot.setRenderer(1, renderer2); 077 078 plot.setDatasetRenderingOrder(DatasetRenderingOrder.REVERSE); 079 // OPTIONAL CUSTOMISATION COMPLETED. 080 081 // add the chart to a panel... 082 ChartPanel chartPanel = new ChartPanel(chart); 083 chartPanel.setPreferredSize(new java.awt.Dimension (500, 270)); 084 setContentPane(chartPanel); 085 086 } 087 088 089 /** 090 * Creates a sample dataset. 091 * 092 * @return The dataset. 093 */ 094 private CategoryDataset createDataset1() { 095 096 // row keys... 097 String series1 = "First"; 098 String series2 = "Second"; 099 String series3 = "Third"; 100 101 // column keys... 102 String category1 = "Category 1"; 103 String category2 = "Category 2"; 104 String category3 = "Category 3"; 105 String category4 = "Category 4"; 106 String category5 = "Category 5"; 107 108 // create the dataset... 109 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 110 111 dataset.addValue(1.0, series1, category1); 112 dataset.addValue(4.0, series1, category2); 113 dataset.addValue(3.0, series1, category3); 114 dataset.addValue(5.0, series1, category4); 115 dataset.addValue(5.0, series1, category5); 116 117 dataset.addValue(5.0, series2, category1); 118 dataset.addValue(7.0, series2, category2); 119 dataset.addValue(6.0, series2, category3); 120 dataset.addValue(8.0, series2, category4); 121 dataset.addValue(4.0, series2, category5); 122 123 dataset.addValue(4.0, series3, category1); 124 dataset.addValue(3.0, series3, category2); 125 dataset.addValue(2.0, series3, category3); 126 dataset.addValue(3.0, series3, category4); 127 dataset.addValue(6.0, series3, category5); 128 129 return dataset; 130 131 } 132 133 /** 134 * Creates a sample dataset. 135 * 136 * @return The dataset. 137 */ 138 private CategoryDataset createDataset2() { 139 140 // row keys... 141 String series1 = "Fourth"; 142 143 // column keys... 144 String category1 = "Category 1"; 145 String category2 = "Category 2"; 146 String category3 = "Category 3"; 147 String category4 = "Category 4"; 148 String category5 = "Category 5"; 149 150 // create the dataset... 151 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 152 153 dataset.addValue(15.0, series1, category1); 154 dataset.addValue(24.0, series1, category2); 155 dataset.addValue(31.0, series1, category3); 156 dataset.addValue(25.0, series1, category4); 157 dataset.addValue(56.0, series1, category5); 158 159 return dataset; 160 } 161 162 /** 163 * Starting point for the demonstration application. 164 * 165 * @param args ignored. 166 */ 167 public static void main(String [] args) { 168 169 DualAxisDemo4 demo = new DualAxisDemo4("Dual Axis Demo 4"); 170 demo.pack(); 171 RefineryUtilities.centerFrameOnScreen(demo); 172 demo.setVisible(true); 173 174 } 175 176 }