💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 6.2 创建一个直方条形图 ### 6.2.1 概述 直方条形图常常被用来显示表列数据。如下表,为一个简单的两行、三列数据。 表 6.1 | | Colnums1 | Colnums2 | Colnums3 | | --- | --- | --- | --- | | Row1 | 1.0 | 5.0 | 3.0 | | Row2 | 2.0 | 3.0 | 2.0 | 在JFreeChart里,这个表格数据封装为一个dataset数据对象,每列标题为一个种类,每行为一个系列。每行标题为一个系列名称(或者系列关键值)。直方条形图展现的数据图如图6.2. ![](https://box.kancloud.cn/2016-01-23_56a34083f0726.png) 图6.2 简单的直方条形图(参见:BarExample1.java) 在这个图表的实例中,我们可以看到JFreeChart将每列数据(即一个种类)组合在一起。而且对每行数据(即每个系列)使用各种颜色高亮显示。图表的图例将颜色和系列的名称/关键值对应起来。 ### 6.2.2 创一个dataset 创建直方条形图的第一步就是创建一个合适的dataset数据集。JFreeChart为直方条形图提供的访问表列数据的一系列方法,必须符合接口CategoryDataset定义。 JFreeChart中提供了一个便利的实现CategoryDataset接口的类为DefaultCategoryDataset。下面显示我们如何使用这个类来封装表6.1数据。代码如下: ``` private CategoryDataset createDataset() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1.0, "Row 1", "Column 1"); dataset.addValue(5.0, "Row 1", "Column 2"); dataset.addValue(3.0, "Row 1", "Column 3"); dataset.addValue(2.0, "Row 2", "Column 1"); dataset.addValue(3.0, "Row 2", "Column 2"); dataset.addValue(2.0, "Row 2", "Column 3"); return dataset; } ``` ### 6.2.3 创建一个chart图表 接下来就是要创建一个JFreeChart的实例,使用上面提供的dataset数据集画一个直方条形图。简单的,我们使用ChartFactory类来创建这个JFreeChart实例。代码如下: ``` private JFreeChart createChart(CategoryDataset dataset) { JFreeChart chart = ChartFactory.createBarChart( "BarChartDemo", // chart title "Category", // domain axis label "Value", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, // tooltips? false // URLs? ); return chart; } ``` CreateBarChart()的大部分参数是比较容易理解的,但其中一部分还需要进一步说明。 + 图显示的方向可以是水平的,还是可以是垂直的。 + 图表的信息提示,是否要添加,有一个标志来控制——在上面的例子中,我们将这个标识设置为true,因此当我们在一个swing应用窗口显示这个图表时,我们会看到这个信息提示。 + URLs标志,设置为false。 我们完成这个直方条形图后,我们将会过头来,仔细看看ChartFactory类在后台做了写什么。 ### 6.2.4 显示该chart图表 为了完成我们的第一个直方条形图实例,我们将JFreeChart实例传给一个ChartPanel对象,然后在一个Swing应用窗口上显示该实例。全部的代码如下: ``` import java.awt.Dimension; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; /** * A simple demonstration application showing how to create a bar chart. */ public class BarExample1 extends ApplicationFrame { /** * Creates a new demo instance. * * @param title * the frame title. */ public BarExample1(String title) { super(title); DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1.0, "Row 1", "Column 1"); dataset.addValue(5.0, "Row 1", "Column 2"); dataset.addValue(3.0, "Row 1", "Column 3"); dataset.addValue(2.0, "Row 2", "Column 1"); dataset.addValue(3.0, "Row 2", "Column 2"); dataset.addValue(2.0, "Row 2", "Column 3"); JFreeChart chart = ChartFactory.createBarChart( "Bar Chart Demo", // chart // title "Category", // domain axis label "Value", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, // tooltips? false // URLs? ); ChartPanel chartPanel = new ChartPanel(chart, false); chartPanel.setPreferredSize(new Dimension(500, 270)); setContentPane(chartPanel); } /** * Starting point for the demonstration application. * * @param args * ignored. */ public static void main(String[] args) { BarExample1 demo = new BarExample1("Bar Demo 1"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } ``` 完成这些代码后,运行代码,将会显示如6.2图的界面。