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 }