前言
前面介绍了饼状图,柱状图,这里介绍下折线图,折线图和饼状图用法定义大致类似.
关于数据集
本文讲解的是JFreeChart创建折线图的内容。
根据数据集的不同,我可以将折线图分为以下几类:
CategoryDataset: 普通的折线图,主要是domainAxis(X轴)可以为非数值
XYDataset: 数值类折线图,主要是domainAxis(X轴)一定是数值类型
(Plot对应的domainAxis为ValueAxis)
普通的Series类型为XYSeries,Plot对应为NumberAxis
时序图Series类型为TimeSeries,Plot对应为DateAxis
种类数据集(CategoryDataset)图形
针对单系列图形
操作如下,如果需要针对所有系列图形设置可以参考在XYDataSet中的对多系列的操作.
//显示数据点,设置形状
renderer.setBaseShapesVisible(true);
renderer.setSeriesShape(0, new Rectangle2D.Double(-5.0D, -5.0D, 10.0D, 10.0D));// 设置形状
// java.awt.geom.Ellipse2D 圆
// java.awt.geom.Rectangle2D 正方形 ...
//使用数据点颜色填充
renderer.setUseFillPaint(true);
//开启显示外廓线
renderer.setDrawOutlines(true);
// 单系列设置
renderer.setSeriesFillPaint(0, Color.BLUE);// 数据点中填充颜色
renderer.setSeriesPaint(0, Color.YELLOW);// 设置绘制线条的颜色,包括了外廓线的颜色
renderer.setSeriesOutlinePaint(0, Color.BLUE, true);//无效果
renderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F), true);// 数据点外廓线粗细
XYDataset图形
针对多系列
的常用操作
// 显示数据点
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
// 数据点填充色设置 (当开启数据点时有效)
renderer.setUseFillPaint(true);//开启填充色
renderer.setBaseFillPaint(Color.PINK, true);//设置填充色
//设置数据点外廓线 (当填充色生效时有效)
renderer.setDrawOutlines(true); // 绘制数据点外廓线
renderer.setOutlineStroke(new BasicStroke(2.0F));//外廓线大小
// 设置所有形状(包括形状的大小)
renderer.setShape(new Rectangle2D.Double(-10.0D, -10.0D, 20.0D, 20.0D));//圆形数据点
// 设置所有线条粗细
renderer.setStroke(new BasicStroke(9.0F)); // 该版本setBaseStrok无效果,如果是想统一设置,需要用setStroke来设置
// 设置所有线条是否可见
renderer.setLinesVisible(true);// false为取消所有线条可见
// 设置所有label
renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator("{2}"));//StandardXYItemLabelGenerator为标准的标签生成器,可以自定义
// {0}为SeriesKeyName {1} 为x值, {2}为Y值
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelFont(new Font("Dialog", 1, 14));
时序图(TimeSeriesChart)–XYDataset图形的一种
考虑到时序图,X轴的显示很多时候是会显示中文的,这里对中文乱码做一个处理
public static void setChineseTheme(JFreeChart chart) {
//设置支持中文的字体
Font FONT = new Font("宋体", Font.PLAIN, 12);
StandardChartTheme chartTheme = new StandardChartTheme("CN");
// 设置标题字体
chartTheme.setExtraLargeFont(FONT);
// 设置图例的字体
chartTheme.setRegularFont(FONT);
// 设置轴向的字体
chartTheme.setLargeFont(FONT);
chartTheme.setSmallFont(FONT);
ChartFactory.setChartTheme(chartTheme);
// 使当前主题马上生效
ChartUtilities.applyCurrentTheme(chart);
}
定制时序图X轴显示格式,遵循SimpleDateFormat的格式化
XYPlot xyPlot = (XYPlot) chart.getPlot();
ValueAxis domainAxis = xyPlot.getDomainAxis();
//已知是时序图可以强转为DateAxis类型
((DateAxis) domainAxis).setDateFormatOverride(new SimpleDateFormat("yyyy年MM月"));