1
package org.hisp.gtool.charts;
4
import java.awt.image.BufferedImage;
5
import java.io.PrintWriter;
7
import javax.servlet.http.HttpServletRequest;
8
import javax.servlet.http.HttpServletResponse;
9
import javax.servlet.http.HttpSession;
11
import org.jfree.chart.ChartFactory;
12
import org.jfree.chart.ChartRenderingInfo;
13
import org.jfree.chart.ChartUtilities;
14
import org.jfree.chart.JFreeChart;
15
import org.jfree.chart.axis.AxisLocation;
16
import org.jfree.chart.axis.CategoryAxis;
17
import org.jfree.chart.axis.CategoryLabelPositions;
18
import org.jfree.chart.axis.NumberAxis;
19
import org.jfree.chart.entity.StandardEntityCollection;
20
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
21
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
22
import org.jfree.chart.plot.CategoryPlot;
23
import org.jfree.chart.plot.DatasetRenderingOrder;
24
import org.jfree.chart.plot.PlotOrientation;
25
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
26
import org.jfree.chart.title.TextTitle;
27
import org.jfree.data.category.CategoryDataset;
28
import org.jfree.data.category.DefaultCategoryDataset;
29
import org.jfree.ui.RectangleEdge;
30
import org.jfree.ui.VerticalAlignment;
32
public class DualAxisChart1 {
34
// Data Related Bar Chart
47
// Data Related Line Chart
57
public DualAxisChart1() { }
59
// Function For Creating Dataset for Barchart
60
private DefaultCategoryDataset getDataset1()
63
// create the dataset...
64
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
66
for(int i=0;i<series1.length;i++)
68
for(int j=0;j<categories1.length;j++)
70
dataset.addValue(data1[i][j], series1[i], categories1[j]);
77
// Function For Creating Dataset for Linechart
78
private DefaultCategoryDataset getDataset2()
81
// create the dataset...
82
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
84
for(int i=0;i<series2.length;i++)
86
for(int j=0;j<categories2.length;j++)
88
dataset.addValue(data2[i][j], series2[i], categories2[j]);
94
public String getChartViewer(HttpServletRequest request, HttpServletResponse response) {
95
final CategoryDataset dataset1 = getDataset1();
97
// create the chart...
98
final JFreeChart chart = ChartFactory.createBarChart(
100
"Category", // domain axis label
101
"Value", // range axis label
103
PlotOrientation.VERTICAL,
104
true, // include legend
106
false // URL generator? Not required...
109
// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
110
// chart.setBackgroundPaint(Color.white);
111
// chart.getLegend().setAnchor(Legend.SOUTH);
114
final TextTitle mainTitle = new TextTitle("Dual Axis Chart");
115
mainTitle.setFont(new Font("times", Font.BOLD, 13));
116
mainTitle.setPosition(RectangleEdge.TOP);
117
mainTitle.setVerticalAlignment(VerticalAlignment.BOTTOM);
118
chart.addSubtitle(mainTitle);
121
final TextTitle subtitle = new TextTitle(chartTitle);
122
subtitle.setFont(new Font("times", Font.BOLD, 13));
123
subtitle.setPosition(RectangleEdge.TOP);
124
subtitle.setVerticalAlignment(VerticalAlignment.BOTTOM);
125
chart.addSubtitle(subtitle);
127
// get a reference to the plot for further customisation...
128
final CategoryPlot plot = chart.getCategoryPlot();
129
// plot.setBackgroundPaint(new Color(0xEE, 0xEE, 0xFF));
130
plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
132
// customise the range axis...
133
final NumberAxis rangeAxis1 = (NumberAxis) plot.getRangeAxis();
134
rangeAxis1.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
135
rangeAxis1.setAutoRangeIncludesZero(true);
136
rangeAxis1.setUpperMargin(0.15);
137
rangeAxis1.setLowerMargin(0.15);
138
rangeAxis1.setLabel(yAxis_Title);
140
final CategoryDataset dataset2 = getDataset2();
141
plot.setDataset(1, dataset2);
142
plot.mapDatasetToRangeAxis(1, 1);
143
// customise the range axis...
147
final CategoryAxis domainAxis = plot.getDomainAxis();
148
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
149
domainAxis.setLabel(xAxis_Title);
151
//final ValueAxis axis2 = new NumberAxis("Secondary");
154
final NumberAxis rangeAxis2 = (NumberAxis) plot.getRangeAxis();
155
rangeAxis2.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
156
rangeAxis2.setAutoRangeIncludesZero(true);
157
rangeAxis2.setUpperMargin(0.30);
158
rangeAxis2.setLowerMargin(0.15);
159
rangeAxis2.setLabel(yAxis_Title);
160
plot.setRangeAxis(1, rangeAxis2);
162
final LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();
163
renderer2.setToolTipGenerator(new StandardCategoryToolTipGenerator());
164
renderer2.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
165
renderer2.setItemLabelsVisible(true);
167
plot.setRenderer(1, renderer2);
168
plot.setDatasetRenderingOrder(DatasetRenderingOrder.REVERSE);
172
// OPTIONAL CUSTOMISATION COMPLETED.
175
ChartRenderingInfo info = null;
176
HttpSession session = request.getSession();
179
//Create RenderingInfo object
180
response.setContentType("text/html");
181
info = new ChartRenderingInfo(new StandardEntityCollection());
182
BufferedImage chartImage = chart.createBufferedImage(800, 500, info);
184
// putting chart as BufferedImage in session,
185
// thus making it available for the image reading action Action.
186
session.setAttribute("chartImage", chartImage);
188
PrintWriter writer = new PrintWriter(response.getWriter());
191
ChartUtilities.writeImageMap(writer,"imageMap",info,true);
197
catch (Exception e) {
198
// handel your exception here
201
String pathInfo = "http://";
202
pathInfo += request.getServerName();
203
int port = request.getServerPort();
204
pathInfo += ":"+String.valueOf(port);
205
pathInfo += request.getContextPath();
206
String chartViewer = pathInfo + "/servlet/ChartViewer";
213
public String getChartTitle() {
217
public void setChartTitle(String chartTitle) {
218
this.chartTitle = chartTitle;
221
public String[] getCategories1() {
225
public void setCategories1(String[] categories1) {
226
this.categories1 = categories1;
229
public String[] getCategories2() {
233
public void setCategories2(String[] categories2) {
234
this.categories2 = categories2;
237
public double[][] getData1() {
241
public void setData1(double[][] data1) {
245
public double[][] getData2() {
249
public void setData2(double[][] data2) {
253
public String[] getSeries1() {
257
public void setSeries1(String[] series1) {
258
this.series1 = series1;
261
public String[] getSeries2() {
265
public void setSeries2(String[] series2) {
266
this.series2 = series2;
269
public String getXAxis_Title() {
273
public void setXAxis_Title(String axis_Title) {
274
xAxis_Title = axis_Title;
277
public String getYAxis_Title() {
281
public void setYAxis_Title(String axis_Title) {
282
yAxis_Title = axis_Title;