JFreeChart| 图解JFreeChart中的折线图(LineChart)

前言

前面介绍了饼状图,柱状图,这里介绍下折线图,折线图和饼状图用法定义大致类似.


关于数据集

本文讲解的是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月"));

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u011479200/article/details/81505887