经过三天的学习,现在对于JFreeChart有了一些了解,下面说一下什么是JFreeChart以及如何用JFreeChart创建简单的图形。
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以
及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time
- series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。
我们在建立报表时经常使用的图形有饼状图,柱状图,线形图,所以现在我将说明一下这些图的画法。
但是在画图之前,有一些问题是我们需要先知道的,下面我分为几点来说:
- 不同的图都有一个各自的数据集xxxDataset,这些数据集的作用是提供图表呈现的数据,但是由于不同图用到的数据集不
同,所以需要对各个图表所呈现的数据内容有所了解,才能针对当前数据的结构选择最好的图表。 - JFreeChart如果要建立出一个最简单的图形,需要经过三步:
- 建立数据集。
- 创建JFreeChart实例,这里可以有两种方法建立,一种是通过xxxPlot获取数据集然后将xxxPlot传递给JFreeChart的构
造方法,一种是通过ChartFactory通过数据集来创建一个JFreeChart实例。 - 如果是先获取xxxPlot就不用这一步,如果是通过ChartFactory的话,则需要JFactory实例返回一个xxxPlot。
- 然后对plot进行相关操作,在这里可以改变图形的显示。
上面说的是最基本的,还有许多功能将在以后详细描述。
下面的实例均是Java环境下直接运行的,目的在于专注于如何使用JFreeChart,现在我们来创建一个饼状图:
import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
/**
* A simple demonstration application showing how to create a pie chart using
* data from a {@link DefaultPieDataset}.
*/
public class PieChartDemo1 extends ApplicationFrame {
/**
* Default constructor.
*
* @param title the frame title.
*/
public PieChartDemo1(String title) {
super(title);
setContentPane(createDemoPanel());
}
/**
* Creates a sample dataset.
*
* @return A sample dataset.
*/{color:#808080} {color}
//生成冰砖数据集
private static PieDataset createDataset() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("One", new Double(43.2));
dataset.setValue("Two", new Double(10.0));
dataset.setValue("Three", new Double(27.5));
dataset.setValue("Four", new Double(17.5));
dataset.setValue("Five", new Double(11.0));
dataset.setValue("Six", new Double(19.4));
return dataset;
}
/**
* Creates a chart.
*
* @param dataset the dataset.
*
* @return A chart.
*/
private static JFreeChart createChart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart(
"Pie Chart Demo 1", // 图表标题
dataset, // 数据集
true, // 是否为一个图例
true, //是否使用工具条,工具条就是将鼠标移动到图表不同部分后,出现的一个小提示框
false //图片是否有URL连接
);
//生成PiePlot
PiePlot plot = (PiePlot) chart.getPlot();
plot.setSectionOutlinesVisible(false); //是否显示分界线
plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12)); //Label的字体
plot.setNoDataMessage("No data available"); //如果没有数据该如何显示
plot.setCircular(false); //是否为正圆
plot.setLabelGap(0.02); //这个不太清楚,应该是设置椭圆内部的间距,如果改的很大的话图形会变得很奇怪。。
plot.setForegroundAlpha(Float.parseFloat("0.4")); //图片前景的透明度,图片的前景就是这里的饼状图,透明度为0.0~1.0
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}: ({1}M, {2})",
NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%"))); //设置图片是否显示出百分比,0是数据,1是数值,2是百分比,
//后面两个参数是设置百分比取值到小数点几位,这里取到小数点后两位,如果百分比要设置为整数,就将这两个参数去掉即可
plot.setToolTipGenerator(new StandardPieSectionLabelGenerator("{0}: ({1}M, {2})",
NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%"))); //设置工具条是否显示出百分比,其它同上
return chart;
}
/**
* Creates a panel for the demo (used by SuperDemo.java).
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
return new ChartPanel(chart);
}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
PieChartDemo1 demo = new PieChartDemo1("Pie Chart Demo 1");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
由于现在自己只将饼状图实现过,为了能更清楚解释其它图的参数以及方法,关于柱状图和线形图就等到之后再讨论。
最后生成的图表如下,其中的显示出来的34%就是ToolLip的效果: