JFreeChart 使用 一 直方图之柱状图-高级特性

来源:互联网 发布:彩票平台源码 编辑:程序博客网 时间:2024/04/26 19:37

本节内容主要讲述柱状图的一些高级特性。

1、简单定制之修改背景颜色

调用JFreeChartCategoryPlot类方法可以进行一些简单的直方图表外观的修改。例如,改变图表和区域的背景颜色代码如下:

chart.setBackgroundPaint(Color.white);   CategoryPlot plot = (CategoryPlot) chart.getPlot();   //设置图像区域背景色   plot.setBackgroundPaint(Color.lightGray);   //水平轴网格线颜色   plot.setRangeGridlinePaint(Color.white);

运行效果:

区域Plot的引用(CategoryPlot)是必须的——转换类型也是非常安全的,因为我们知道该图表类型使用CategoryPlotJFreeChart使用不同的区域类型(比如PiePlotXYPlot)控制不同类型的图表。我们必须将plot的引用转化成图表响应的类型,因为基本类Plot仅仅定义了一些通用的属性和方法。随着对JFreeChart了解的加深,我们将学习每一种图表使用的不同的plot子类。

在我们的例子中,我们使用plot的引用来改变水平轴的网格线颜色。看一下CategoryPlot类的API文件,就会看到我们能够修改的地方。

2、定制外观

回顾之前章节内容,CategoryPlot管理这一个BarRenderer的实例renderer。如果我们想获得这个renderer的引用,大量的定制选择项会变得有效。

2.1、直方条形图颜色的定制

改变图表中每个系列直方图的颜色,使用如下代码:

BarRenderer renderer = (BarRenderer) plot.getRenderer();   renderer.setSeriesPaint(0, Color.gray);   renderer.setSeriesPaint(1, Color.orange);   renderer.setDrawBarOutline(false);

运行效果:

 

注意setSeriesPaint()方法是在抽象AbstractRenderer基类里面定义的——所以,我们可以在任何类型的renderer里面使用。

 2.2、种类里直方条形图之间的空间

此外,renderer还可以控制每个种类中直方条形图之间的间距。因此我们可以在同一个种类中将空间完全去掉,代码如下:

 BarRenderer renderer = (BarRenderer) plot.getRenderer();   renderer.setItemMargin(0.0);

 运行效果:

 

 

注意条形图看上去有点变宽——主要是因为JFreeChart分配空间时,分配给种类条形图之间的间距的尺度比较少,所以看上去就显得有点长宽了。

 使用GradientPaint实例对象为每一个系列修改renderer(渐变色)

代码如下:

复制代码
 public class BarChartGradientFrame extends ApplicationFrame   {       private static final long serialVersionUID = -4316075518094318809L;                       public BarChartGradientFrame(String title){           super(title);           JPanel jpanel = createDemoPanel();           jpanel.setPreferredSize(new Dimension(500, 270));           setContentPane(jpanel);       }                       private JPanel createDemoPanel()       {           JFreeChart jfreechart = createChart(createDataset());           return new ChartPanel(jfreechart);       }                       private JFreeChart createChart(DefaultCategoryDataset categorydataset)       {           JFreeChart jfreechart = ChartFactory.createBarChart("Bar Chart Demo 1",                   "Category", "Value", categorydataset, PlotOrientation.VERTICAL,                   true, true, false);           jfreechart.setBackgroundPaint(Color.WHITE);           CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();           categoryplot.setBackgroundPaint(Color.lightGray);           categoryplot.setDomainGridlinePaint(Color.white);           categoryplot.setDomainGridlinesVisible(true);           categoryplot.setRangeGridlinePaint(Color.white);                           //刻度轴刻度设置           NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();           //设置数据轴刻度梯进范围           numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());                           //renderer设置           BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();           barrenderer.setDrawBarOutline(false);//设置外廓线不可见           //渐变色           GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue,                   0.0F, 0.0F, new Color(0, 0, 64));           GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F,                   Color.green, 0.0F, 0.0F, new Color(0, 64, 0));           GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F,                   Color.red, 0.0F, 0.0F, new Color(64, 0, 0));           //设置系列柱体颜色           barrenderer.setSeriesPaint(0, gradientpaint);           barrenderer.setSeriesPaint(1, gradientpaint1);           barrenderer.setSeriesPaint(2, gradientpaint2);                           //设置种类标签旋转的角度,逆时针旋转           CategoryAxis categoryaxis = categoryplot.getDomainAxis();           categoryaxis.setCategoryLabelPositions(CategoryLabelPositions                   .createUpRotationLabelPositions(Math.PI / 6));           return jfreechart;       }                       private DefaultCategoryDataset createDataset()       {           DefaultCategoryDataset dataset = new DefaultCategoryDataset();           dataset.addValue(100, "First", "Category1");           dataset.addValue(100, "Second", "Category1");           dataset.addValue(100, "Three", "Category1");           dataset.addValue(200, "First", "Category2");           dataset.addValue(200, "Second", "Category2");           dataset.addValue(200, "Three", "Category2");           dataset.addValue(300, "First", "Category3");           dataset.addValue(300, "Second", "Category3");           dataset.addValue(300, "Three", "Category3");           dataset.addValue(400, "First", "Category4");           dataset.addValue(400, "Second", "Category4");           dataset.addValue(400, "Three", "Category4");           return dataset;       }                       public static void main(String[] args)       {           BarChartGradientFrame barchartdemo = new BarChartGradientFrame("Bar Chart Demo");           barchartdemo.pack();           RefineryUtilities.centerFrameOnScreen(barchartdemo);           barchartdemo.setVisible(true);                       }   }
复制代码

显示效果如下:

程序代码说明:

lMain()方法执行直方条形图。编写方法与饼图一样。

lBarChartDemo1构造函数中创了一个JPanel,并设置大小。

lcreateDemoPanel()方法创建了一个JPanel,并且在该panel上创建了直方条形图。

lcreateDataset()方法创建了数据集。类型为CategoryDataset。注意数据集为三维数据。与饼图不同。

l使用ChartFactory.createBarChart()方法创建直方条形图

ljfreechart.setBackgroundPaint(Color.WHITE):设置图表的背景颜色。

lcategoryplot.setBackgroundPaint(Color.lightGray):设置直方条形图的背景颜色。

lsetDomainGridlinePaint(Color.whites):设置垂直格线的颜色。默认不可见。

lsetRangeGridlinePaint(Color.white):设置水平格线的颜色。默认可见。

lsetStandardTickUnits(NumberAxis.createIntegerTickUnits()):设置数据轴的刻度递进范围。

lGradientPaint类用来设置渐变色。

lcategoryaxis.setCategoryLabelPositions():设置标签文字旋转的角度。

 

4 使用二维数组生成CategoryDataset 同时显示水平直方图

代码如下:

复制代码
 private static CategoryDataset createDataset() {       double[][] ds = { { 1.0, 43.0, 35.0, 58.0, 54.0, 77.0, 71.0, 89.0 },               { 54.0, 75.0, 63.0, 83.0, 43.0, 46.0, 27.0, 13.0 },               { 41.0, 33.0, 22.0, 34.0, 62.0, 32.0, 42.0, 34.0 } };       return DatasetUtilities.createCategoryDataset("Series ", "Factor ", ds);   }            private static JFreeChart createChart(CategoryDataset categorydataset) {       JFreeChart jfreechart = ChartFactory.createBarChart("Bar Chart Demo 2",               "Category", "Score (%)", categorydataset,               PlotOrientation.VERTICAL, true, true, false);       jfreechart.setBackgroundPaint(Color.white);       CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();       categoryplot.setBackgroundPaint(Color.lightGray);       categoryplot.setRangeGridlinePaint(Color.white);       categoryplot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);       NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();       //设置值域范围       numberaxis.setRange(0.0, 100.0);       numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());       BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();       barrenderer.setDrawBarOutline(false);       barrenderer.setLegendItemToolTipGenerator(new StandardCategorySeriesLabelGenerator("Tooltip: {0}"));       return jfreechart;   }
复制代码

 

运行效果:


转载自:   http://www.cnblogs.com/jtmjx/archive/2013/04/23/3039161.html


0 0
原创粉丝点击