创建折线图的两种方式:
1、使用CategoryDataset创建折线图
2、使用XYDataSet创建折线图
样例:
源码:
@Test
public void testCreateByDefaultCategoryDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(212.0, "Classes", "JDK 1.0");
dataset.addValue(504.0, "Classes", "JDK 1.1");
dataset.addValue(1520.0, "Classes", "JDK 1.2");
dataset.addValue(1842.0, "Classes", "JDK 1.3");
dataset.addValue(2991.0, "Classes", "JDK 1.4");
dataset.addValue(3500.0, "Classes", "JDK 1.5");
JFreeChart chart = ChartFactory.createLineChart(
"Java Standard Class Library", //图标标题
"", //X轴标题
"Class Count", //Y轴标题
dataset, //数据集
PlotOrientation.VERTICAL, //方向
false, //是否包含图例
true, //提示信息是否显示
false); //是否使用URLS
chart.addSubtitle(new TextTitle("Number if Classes By Release")); //副标题
TextTitle textTitle = new TextTitle("Source: Java in A Nutshell (5th Edition) by David Flanagan (O' Reilly)");
textTitle.setFont(new Font("SansSerif", 0, 10));
textTitle.setPosition(RectangleEdge.BOTTOM);
textTitle.setHorizontalAlignment(HorizontalAlignment.RIGHT);
chart.addSubtitle(textTitle);
chart.setBackgroundPaint(Color.WHITE);
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(Color.LIGHT_GRAY);
plot.setRangeGridlinePaint(Color.WHITE);
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
renderer.setShapesVisible(true);
renderer.setDrawOutlines(true);
renderer.setUseFillPaint(true);
NumberAxis axis = (NumberAxis) plot.getRangeAxis();
axis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
try {
ChartUtilities.writeChartAsJPEG(new FileOutputStream("E:/chart/LineChart.jpg"), chart, 400, 300, null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
源码:
@Test
public void testCreateByXYDataSet() {
XYSeries series1 = new XYSeries("First");
series1.add(1.0, 1.0);
series1.add(2.0, 4.0);
series1.add(3.0, 3.0);
series1.add(4.0, 5.0);
series1.add(5.0, 6.0);
series1.add(6.0, 7.0);
series1.add(7.0, 7.0);
series1.add(8.0, 8.0);
XYSeries series2 = new XYSeries("Second");
series2.add(1.0, 5.0);
series2.add(2.0, 7.0);
series2.add(3.0, 6.0);
series2.add(4.0, 8.0);
series2.add(5.0, 4.0);
series2.add(6.0, 4.0);
series2.add(7.0, 2.0);
series2.add(8.0, 1.0);
XYSeries series3 = new XYSeries("Third");
series3.add(1.0, 4.0);
series3.add(2.0, 3.0);
series3.add(3.0, 2.0);
series3.add(4.0, 3.0);
series3.add(5.0, 6.0);
series3.add(6.0, 3.0);
series3.add(7.0, 4.0);
series3.add(8.0, 3.0);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
dataset.addSeries(series3);
JFreeChart chart = ChartFactory.createXYLineChart("XY",
"X",
"Y",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false);
chart.setBackgroundPaint(Color.WHITE); //图表背景颜色
//改变图区背景颜色、轴平移、网格线颜色
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(Color.LIGHT_GRAY);//背景颜色
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));//轴平移
//网格线颜色
plot.setDomainGridlinePaint(Color.WHITE);
plot.setRangeGridlinePaint(Color.WHITE);
//显示连接线之间的形状
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setShapesVisible(true);
renderer.setShapesFilled(true);
//只显示整数的刻度值
NumberAxis axis = (NumberAxis) plot.getRangeAxis();
axis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
try {
ChartUtilities.writeChartAsJPEG(new FileOutputStream("E:/chart/LineChart2.jpg"), chart, 400, 300, null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}