【图表展示】JFreeChart画折线图

  01 Sep 2014 返回


JFreeChart的关键在于其数据集类型的选择,如果是标签类的数据集就采用CategoryDataset,有序数字类的数据集就采用XYSeriesCollection。 更多数据集类型的内容参考如下博客:JFreeChart 典型数据集设置示例


1. 选择合适的数据集类型

由于我只需要折线图的横坐标是有序数字,故采用XYSeriesCollection类型。

private XYSeriesCollection dataset;


2. 向数据集中加入数据

XYSeries xyseries = new XYSeries("reality");
for (int i = 0; i < horizontal.length; i++ ){
    xyseries.add( horizontal[i], reality[i] );
}
dataset.addSeries(xyseries);

其中,"reality"是这条数据的名称;horizontal是横坐标的数组;reality数组是该条数据的各个值,作为数据点的纵坐标;最后,通过addSeries()函数将该条数据加入到数据集中。


3. 解决中文乱码问题

这里采用设定主题的方式,设置中文字体解决乱码问题,设置如下:

standardChartTheme standardChartTheme = new StandardChartTheme("CN");       //设置标题字体  
standardChartTheme.setExtraLargeFont(new Font("宋体",Font.BOLD,20));      //设置图例的字体  
standardChartTheme.setRegularFont(new Font("宋体",Font.PLAIN,15));        //设置轴向的字体  
standardChartTheme.setLargeFont(new Font("宋体",Font.PLAIN,15));          //应用主题样式  
ChartFactory.setChartTheme(standardChartTheme);


4. 画图

要画折线图,则采用XYLineChart

JFreeChart chart = ChartFactory.createXYLineChart(
                "图表标题在这里", "横坐标标题", "纵坐标标题", dataset);

将jfreechart放入java容器组件,并显示:

ChartFrame chartFrame = new ChartFrame("窗口标题在这里",chart); 
//chart要放在Java容器组件中,ChartFrame继承自java的Jframe类。该第一个参数的数据是放在窗口左上角的,不是正中间的标题。
chartFrame.pack();         //以合适的大小展现图形
chartFrame.setVisible(true);    //图形是否可见


5. 设置背景色与纵坐标范围(补充)

jfree默认的背景色是灰色,看不清折线图,故将其改为白色

XYPlot p = chart.getXYPlot();
p.setBackgroundPaint(ChartColor.WHITE);
p.setRangeGridlinePaint(ChartColor.GRAY);

纵坐标的范围可以人为设定,如下:

NumberAxis numberaxis = (NumberAxis)p.getRangeAxis();
numberaxis.setAutoTickUnitSelection(false);
numberaxis.setTickUnit(new NumberTickUnit(10));   //设置纵坐标值的间距(10)
numberaxis.setRangeWithMargins(0,100);           //纵坐标值只能是这之间的值(0~100)