平面柱状图
生成柱状图操作:
JFreeChart chart = ChartFactory.createBarChart( String title, // 图标题 String categoryAxisLabel, //x 轴标题 String valueAxisLabel, //y 轴标题 CategoryDataset dataset, // 数据源 PlotOrientation orientation, // 显示方向 boolean legend, // 是否显示图例 boolean tooltips, // 是否显示 tooltip boolean urls) ; // 是否指定 url
平面柱状图的 Plot 对象是 CategoryPlot 类型。 CategoryPlot 对象的 x 轴是 CategoryAxis 对象, y 轴是 NumberAxis 对象,绘制单元是 BarRenderer 对象,数据源是 CategoryDataset 对象。
//获取 CategoryPlot 对象操作为: CategoryPlot plot = ( CategoryPlot ) chart.getPlot(); 或者 CategoryPlot plot = chart.getCategoryPlot(); //获取绘制单元操作: BarRenderer renderer = (BarRenderer) plot.getRenderer(); //获取 x 轴的操作: CategoryAxis xAxis = ( CategoryAxis ) plot.getDomainAxis(); //获取 y 轴操作: NumberAxis yAxis = (NumberAxis) plot.getRangeAxis(); //获取数据源: CategoryDataset dataset=plot.getDataset();
柱状图可以接受一切 CategoryDataset 类型的数据源,下面讲解一下常用的 CategoryDataset 类型 DefaultCategoryDataset 的使用方式
//实例化: DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 增加数据 dataset .addValue(double value, Comparable rowKey, Comparable columnKey) ; //删除数据: 对行同样有上述两种删除方式 dataset .removeValue(Comparable rowKey, Comparable columnKey); dataset. removeColumn(int columnIndex); dataset. removeColumn(Comparable columnKey); //修改数据: dataset. setValue(double value, Comparable rowKey, Comparable columnKey); //查询数据 : dataset. setValue(double value, Comparable rowKey, Comparable columnKey);
对 plot 对象、绘制单元、 x 轴、 y 轴的显示特性修改不再一一介绍。
3D 柱状图
对应的工厂方法为 createBarChart3D ,该方法的参数与平面柱状图相同。 3D 柱状图的 Plot 对象是 CategoryPlot 类型。 CategoryPlot 对象的 x 轴是 CategoryAxis3D 对象, y 轴是 NumberAxis3D 对象,绘制单元是 BarRenderer3D 对象,数据源是 CategoryDataset 对象。
具体使用以及操作与平面柱状图雷同,不在详述。
demo
import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; public class TestBarChart { public static DefaultCategoryDataset createDataset() { DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset(); String rowKey1 = "最高收视率"; String rowKey2 = "最低收视率"; String columnKey1 = "篮球火"; String columnKey2 = "无敌珊宝妹"; String columnKey3 = "不良笑花"; categoryDataset.setValue(2.80, rowKey1, columnKey1); categoryDataset.setValue(1.72, rowKey2, columnKey1); categoryDataset.setValue(3.63, rowKey1, columnKey2); categoryDataset.setValue(2.37, rowKey2, columnKey2); categoryDataset.setValue(2.84, rowKey1, columnKey3); categoryDataset.setValue(1.46, rowKey2, columnKey3); return categoryDataset; } public static void createBarChart() { JFreeChart barChart = ChartFactory.createBarChart("台湾偶像剧收视率2008/09/21", "", "收视率百分点", createDataset(), PlotOrientation.VERTICAL, true, true, false); ChartFrame frame=new ChartFrame("Test Bar Chart",barChart); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { createBarChart(); } }
效果图
package com.px1987.jfreechart; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.IntervalXYDataset; import org.jfree.data.xy.XYBarDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class TestXYBarChart { public static IntervalXYDataset createDataset() { XYSeriesCollection seriesCollection = new XYSeriesCollection(); XYSeries series1 = new XYSeries("平均收视率"); series1.add(1, 7.25); series1.add(2, 4.81); series1.add(3, 3.69); series1.add(4, 3.53); series1.add(5, 2.95); series1.add(6, 3.96); seriesCollection.addSeries(series1); return new XYBarDataset(seriesCollection, 0.9); } public static void createXYBarChart() { JFreeChart chart = ChartFactory.createXYBarChart("无敌珊宝妹平均收视率", "集数", false, "收视率百分比", createDataset(), PlotOrientation.VERTICAL, true, false, false); ChartFrame frame = new ChartFrame("Test XY Bar Chart", chart); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { createXYBarChart(); } }