package com.nexr.platform.search.result.utils;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import java.awt.*;
import java.io.File;
import java.io.IOException;
/**
* User: david
* Date: 7/18/11
* Time: 5:02 PM
*/
public class Chart extends ApplicationFrame {
private JFreeChart _chart;
public Chart(XYSeriesCollection dataSet, String title, int serverCount) throws IOException {
super(title);
_chart = createChart(dataSet, title, serverCount);
}
public void save(String saveFilePath, int width, int height) throws IOException {
ChartUtilities.saveChartAsPNG(new File(saveFilePath), _chart, width, height);
}
public static XYSeriesCollection createDataSet() {
final XYSeries series = new XYSeries("Random Data");
series.add(1.0, 500.2);
series.add(5.0, 694.1);
series.add(4.0, 100.0);
series.add(12.5, 734.4);
series.add(17.3, 453.2);
series.add(21.2, 500.2);
series.add(21.9, 10.0);
series.add(25.6, 734.4);
series.add(30.0, 453.2);
final XYSeries series2 = new XYSeries("Random Data2");
series2.add(1.0, 13.2);
series2.add(5.0, 50.4);
series2.add(4.0, 8.1);
series2.add(12.5, 200.3);
series2.add(17.3, 573.2);
series2.add(21.2, 831.2);
series2.add(21.9, 492.1);
series2.add(25.6, 1111.2);
series2.add(30.0, 0.0);
final XYSeriesCollection data = new XYSeriesCollection();
data.addSeries(series);
data.addSeries(series2);
return data;
}
private JFreeChart createChart(final XYSeriesCollection dataSet, String title, int serverCount) {
final JFreeChart chart = ChartFactory.createXYLineChart(
title, // chart title
"run count", // domain axis label
"ns (nano seconds)", // range axis label
dataSet, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
plot.setBackgroundPaint(Color.white);
plot.setRangeGridlinePaint(Color.lightGray);
for(int i = 0 ; i < serverCount; i++){
renderer.setSeriesLinesVisible(i, true);
renderer.setSeriesShapesVisible(i, false);
renderer.setSeriesStroke(
i, new BasicStroke(
1.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
0.5f, new float[] {7.5f, 4.0f}, 0.0f
)
);
}
plot.setRenderer(renderer);
/*chart.setBackgroundPaint(Color.white);
final CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.white);
plot.setRangeGridlinePaint(Color.lightGray);
plot.setAnchorValue(1000);
CategoryAxis domainAxis = (CategoryAxis) plot.getDomainAxis();
// domainAxis.setFixedDimension(3600.0);
// domainAxis.setCategoryMargin(1.0);
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
for(int i = 0 ; i < serverCount; i++){
renderer.setSeriesStroke(
i, new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {10.0f, 6.0f}, 0.0f
)
);
}*/
return chart;
}
public static void main(final String[] args) {
try {
XYSeriesCollection dataSet = Chart.createDataSet();
Chart chart = new Chart(dataSet, "Line Chart Demo", dataSet.getSeriesCount());
chart.save("/home/david/1.png", 600, 500);
} catch (Exception e){
e.printStackTrace();
}
}
}