JFreeChart入门简介
openkk
13年前
经过三天的学习,现在对于JFreeChart有了一些了解,下面说一下什么是JFreeChart以及如何用JFreeChart创建简单的图形。 <br /> JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以 <br /> 及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time <br /> - series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。 <br /> <br /> 我们在建立报表时经常使用的图形有饼状图,柱状图,线形图,所以现在我将说明一下这些图的画法。 <br /> <br /> 但是在画图之前,有一些问题是我们需要先知道的,下面我分为几点来说: <br /> <br /> 不同的图都有一个各自的数据集xxxDataset,这些数据集的作用是提供图表呈现的数据,但是由于不同图用到的数据集不 <br /> 同,所以需要对各个图表所呈现的数据内容有所了解,才能针对当前数据的结构选择最好的图表。 <br /> JFreeChart如果要建立出一个最简单的图形,需要经过三步: <br /> 建立数据集。 <br /> 创建JFreeChart实例,这里可以有两种方法建立,一种是通过xxxPlot获取数据集然后将xxxPlot传递给JFreeChart的构 <br /> 造方法,一种是通过ChartFactory通过数据集来创建一个JFreeChart实例。 <br /> 如果是先获取xxxPlot就不用这一步,如果是通过ChartFactory的话,则需要JFactory实例返回一个xxxPlot。 <br /> 然后对plot进行相关操作,在这里可以改变图形的显示。 <br /> 上面说的是最基本的,还有许多功能将在以后详细描述。 <br /> <br /> 下面的实例均是Java环境下直接运行的,目的在于专注于如何使用JFreeChart,现在我们来创建一个饼状图: <br /> <br /> <pre class="brush:java; toolbar: true; auto-links: false;">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); } </pre> <br /> <br /> 由于现在自己只将饼状图实现过,为了能更清楚解释其它图的参数以及方法,关于柱状图和线形图就等到之后再讨论。 <br /> <br /> 最后生成的图表如下,其中的显示出来的34%就是ToolLip的效果: <br /> <img title="JFreeChart入门简介" border="0" alt="JFreeChart入门简介" src="https://simg.open-open.com/show/e4d232aa6dd0faac7adb55e3da9b52eb.jpg" width="696" height="454" />