BarChart 柱状图 实例

BarChart

 

第一步,创建数据集

定义:DefaultCategoryDataset dataset = new DefaultCategoryDataset();

设值:dataset.addValue(

                value, //柱子的值(高度)

                Row keys, //每一个柱子的行坐标名称.

                Column keys);//每一个柱子的列坐标名称.

例如:一个类别有三个柱子,column keys表示该类别,row keys表示每个柱子的具体名称.

在比如,一年每季度的粮食的产量图,column keys表示年份,row keys表示每年的每个季度.

 

第二步,创建图.

方法一:

JFreeChart chart = ChartFactory.createBarChart(

                   "Bar Chart", // 标题

                "Category", // 横坐标名称

                "Value", // 纵坐标名称

                dataset, // 数据集

                PlotOrientation.VERTICAL, //柱子显示方式(垂直或水平HORIZONTAL

                true, // 是否显示比例(也就是显示不同颜色的代表的意思)

                true, // 是否显示点的坐标(将鼠标放在每个图上是否显示坐标)

                false); // 是否有链接,目前我还不知道如何用

方式二:

JFreeChart chart = ChartFactory.createBarChart3D(参数同上);//3D效果.

 

第三步:设置图表属性.

chart.setBackgroundPaint(Color.white);

        chart.addSubtitle(new TextTitle("first"));

//      chart.setAntiAlias(true);

        chart.setBorderVisible(true);

        chart.setBackgroundImageAlpha(0.1f);

        //设置副标题.

        LegendTitle legendTitle = new LegendTitle(chart.getPlot());

        legendTitle.setBorder(1, 1, 1, 2);

        legendTitle.setPosition(RectangleEdge.RIGHT);

        chart.addLegend(legendTitle);

        // get a reference to the plot for further customisation...

        CategoryPlot plot = chart.getCategoryPlot();

        plot.setBackgroundPaint(Color.lightGray);

        plot.setDomainGridlinePaint(Color.white);

        plot.setDomainGridlinesVisible(true);

        plot.setRangeGridlinePaint(Color.white);

        // set the range axis to display integers only...

        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();

        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        // disable bar outlines...

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

        renderer.setDrawBarOutline(false);

        // set up gradient paints for series...

        GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.blue, 0.0f,

                0.0f, new Color(0, 0, 64));

        GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, Color.green, 0.0f,

                0.0f, new Color(0, 64, 0));

        GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f,

                0.0f, new Color(64, 0, 0));

        renderer.setSeriesPaint(0, gp0);

        renderer.setSeriesPaint(1, gp1);

        renderer.setSeriesPaint(2, gp2);

        CategoryAxis domainAxis = plot.getDomainAxis();

        domainAxis.setCategoryLabelPositions(CategoryLabelPositions

                .createUpRotationLabelPositions(Math.PI / 6.0));

 

第四步:创建面板,设置面板内容

ChartPanel chartPanel = new ChartPanel(chart);//创建面板.

chartPanel.setPreferredSize(new Dimension(500, 270));//设置面板宽和高.

setContentPane(chartPanel);

 

完整实例如下:

package barChartDemo;

 

import java.awt.Color;

import java.awt.Dimension;

import java.awt.GradientPaint;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.CategoryAxis;

import org.jfree.chart.axis.CategoryLabelPositions;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.event.ChartChangeEvent;

import org.jfree.chart.event.ChartChangeListener;

import org.jfree.chart.plot.CategoryPlot;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.renderer.category.BarRenderer;

import org.jfree.chart.title.LegendTitle;

import org.jfree.chart.title.TextTitle;

import org.jfree.data.category.CategoryDataset;

import org.jfree.data.category.DefaultCategoryDataset;

import org.jfree.ui.ApplicationFrame;

import org.jfree.ui.RectangleEdge;

import org.jfree.ui.RectangleInsets;

import org.jfree.ui.RefineryUtilities;

 

/**

 * A simple demonstration application showing how to create a bar chart.

 */

public class BarChartDemo1 extends ApplicationFrame {

         /**

          *

          */

         private static final long serialVersionUID = 1L;

 

         /**

          * Creates a new demo instance.

          * @param title the frame title.

          */

         public BarChartDemo1(String title)

         {

                   super(title);

                   CategoryDataset dataset = createDataset();//设置数据集.

                   JFreeChart chart = createChart(dataset);//创建图.

                   dataset =  createDataset2();

                   chart.fireChartChanged();

                   System.out.println(chart.isNotify() );

                   ChartPanel chartPanel = new ChartPanel(chart);//创建面板.

                   chartPanel.setPreferredSize(new Dimension(500, 270));//设置面板宽和高.

                   setContentPane(chartPanel);

         }

 

         /**

          * Returns a sample dataset.

          * @return The dataset.

          */

         private static CategoryDataset createDataset()

         {

                   // row keys...

                   String series1 = "First";

                   String series2 = "Second";

                   String series3 = "Third";

                   // column keys...

                   String category1 = "Category 1";

                   String category2 = "Category 2";

                   String category3 = "Category 3";

                   String category4 = "Category 4";

                   String category5 = "Category 5";

                   // create the dataset...

                   DefaultCategoryDataset dataset = new DefaultCategoryDataset();

                   dataset.addValue(1.0, series1, category1);

                   dataset.addValue(4.0, series1, category2);

                   dataset.addValue(3.0, series1, category3);

                   dataset.addValue(5.0, series1, category4);

                   dataset.addValue(5.0, series1, category5);

                   dataset.addValue(5.0, series2, category1);

                   dataset.addValue(7.0, series2, category2);

                   dataset.addValue(6.0, series2, category3);

                   dataset.addValue(8.0, series2, category4);

                   dataset.addValue(4.0, series2, category5);

                   dataset.addValue(4.0, series3, category1);

                   dataset.addValue(3.0, series3, category2);

                   dataset.addValue(2.0, series3, category3);

                   dataset.addValue(3.0, series3, category4);

                   dataset.addValue(6.0, series3, category5);

                   return dataset;

         }

 

         /**

          * Creates a sample chart.

          * @param dataset the dataset.

          * @return The chart.

          */

         private static JFreeChart createChart(CategoryDataset dataset)

         {

                   // create the chart...

                   JFreeChart chart = ChartFactory.createBarChart(

                                     "Bar Chart Demo", // chart

                                     "Category", // domain axis label

                                     "Value", // range axis label

                                     dataset, // data

                                     PlotOrientation.VERTICAL, // orientation

                                     true, // include legend

                                     true, // tooltips?

                                     false // URLs?

                                     );

                   // set the background color for the chart...

                   chart.setBackgroundPaint(Color.white);

                   chart.addSubtitle(new TextTitle("sub titile"));

                   chart.setAntiAlias(true);

                   chart.setBorderVisible(true);

                   chart.setBackgroundImageAlpha(0.1f);

                   //设置图例.

                   LegendTitle legendTitle = new LegendTitle(chart.getPlot());

                   legendTitle.setBorder(1, 1, 1, 2);

                   legendTitle.setPosition(RectangleEdge.RIGHT);

                   chart.addLegend(legendTitle);

                   chart.createBufferedImage(100, 200);

                   // get a reference to the plot for further customisation...

                   CategoryPlot plot = chart.getCategoryPlot();

                   plot.setBackgroundPaint(Color.lightGray);

                   plot.setDomainGridlinePaint(Color.white);

                   plot.setDomainGridlinesVisible(true);

                   plot.setRangeGridlinePaint(Color.white);

                   // set the range axis to display integers only...

                   final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();

                   rangeAxis.setLowerBound(0);//设置起始点.

                   rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

                   // disable bar outlines...

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

                   renderer.setDrawBarOutline(false);

                   // set up gradient paints for series...

                   GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.blue, 0.0f,

                                     0.0f, new Color(0, 0, 64));

                   GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, Color.green, 0.0f,

                                     0.0f, new Color(0, 64, 0));

                   GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f,

                                     0.0f, new Color(64, 0, 0));

                   renderer.setSeriesPaint(0, gp0);

                   renderer.setSeriesPaint(1, gp1);

                   renderer.setSeriesPaint(2, gp2);

                   CategoryAxis domainAxis = plot.getDomainAxis();

                   domainAxis.setCategoryLabelPositions(CategoryLabelPositions

                                     .createUpRotationLabelPositions(Math.PI / 6.0));

                   // OPTIONAL CUSTOMISATION COMPLETED.

                   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);

         }

 

         /**

          * Returns a description of the demo.

          * @return A description.

          */

         public static String getDemoDescription()

         {

                   return "A bar chart.";

         }

 

         /**

          * Starting point for the demonstration application.

          * @param args ignored.

          */

         public static void main(String[] args)

         {

                   BarChartDemo1 demo = new BarChartDemo1("Bar Chart Demo");

                   demo.pack();

                   RefineryUtilities.centerFrameOnScreen(demo);

                   demo.setVisible(true);

         }

}

 

效果图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值