jfreechartDemo--使用jfreechart制作柱状图

来源:互联网 发布:html css js关系 编辑:程序博客网 时间:2024/04/27 12:59
下面的Demo根据jfreechart的用户开发指南以及csdn上的一片文章改编而成。
blog的的地址是:http://blog.csdn.net/simon_21/archive/2007/08/21/1752656.aspx
显示效果如下:

//package newTechnology;

/**
 *
 *  
@author: Tonychow  Create On :2007-8-26
 *
 
*/


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
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.CategoryLabelPosition;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.CategoryLabelWidthType;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.text.TextBlockAnchor;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;
import org.jfree.util.Log;
import org.jfree.util.PrintStreamLogTarget;

// import com.cabletech.demo.BarChart3DDemo4.CustomBarRenderer3D;

public class Demo extends ApplicationFrame {
    
/**
     *
     
*/

    
private static final long serialVersionUID = -7661683768592125573L;

    
public Demo(String string) {
        
super(string);
        JPanel jpanel 
= createDemoPanel();
        jpanel.setPreferredSize(
new Dimension(500270));
        setContentPane(jpanel);
    }

   
//生成数据集
    private static CategoryDataset createDataset() {
        
// row keys
        String series1 = "First";
        String series2 
= "Second";
        String series3 
= "Third";

        
// category keys
        String category1 = "London";
        String category2 
= "New York";
        String category3 
= "Istanbul";
        String category4 
= "Cairo";

        DefaultCategoryDataset defaultcategorydataset 
= new DefaultCategoryDataset();
        defaultcategorydataset.addValue(
23.0, series1, category1);
        defaultcategorydataset.addValue(
14.0, series1, category2);
        defaultcategorydataset.addValue(
14.0, series1, category3);
        defaultcategorydataset.addValue(
14.0, series1, category4);
        defaultcategorydataset.addValue(
13.0, series2, category1);
        defaultcategorydataset.addValue(
19.0, series2, category2);
        defaultcategorydataset.addValue(
19.0, series2, category3);
        defaultcategorydataset.addValue(
19.0, series2, category4);
        defaultcategorydataset.addValue(
7.0, series3, category1);
        defaultcategorydataset.addValue(
2, series3, category2);
        defaultcategorydataset.addValue(
9.0, series3, category3);
        defaultcategorydataset.addValue(
9.0, series3, category4);
        
return defaultcategorydataset;
    }


    
private static JFreeChart createChart(CategoryDataset categorydataset) {
        JFreeChart jfreechart 
= ChartFactory.createBarChart3D(
                
"3D Bar Chart Demo ",//标题
                  "Category"//横轴标签
                 "Value",//纵轴标签
                 categorydataset,//数据集
                PlotOrientation.VERTICAL, //柱体方向(垂直)
               true//是否显示提示标签(tooltips)
              true//lendge?
            false//是否在主题上使用超链接);
        
//设置 背景色
        jfreechart.setBackgroundPaint(Color.cyan);
        
// 需要更改其它的设置要获得categoryplot...如下...
        CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
        categoryplot.setForegroundAlpha(
1.0F);
        
// 显示每个柱的数值,并修改该数值的字体属性
        categoryplot.getRenderer().setItemLabelGenerator(
                
new StandardCategoryItemLabelGenerator());
        categoryplot.getRenderer().setItemLabelsVisible(
true);
        categoryplot.getRenderer().setPositiveItemLabelPosition(
                
new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,
                        TextAnchor.BOTTOM_LEFT));
        
// disable bar outlines...
        BarRenderer renderer = (BarRenderer) categoryplot.getRenderer();
     renderer.setDrawBarOutline(
false);
      
//设置柱体标签
      renderer.setItemLabelAnchorOffset(.5f);
      renderer.setItemLabelFont(
new Font("myfont",Font.ITALIC,10));
      renderer.setItemLabelsVisible(
true);
      renderer.setItemMargin(.
3);
        
// set up gradient paints for series...
        
//设置在每一个category中的series的颜色....第一个coloe参数是柱体要显示的颜色,
        
//第二个color参数是series之间间隔的颜色
        GradientPaint gp0 = new GradientPaint(0.0f0.0f, Color.blue, 0.0f,
                
0.0f, Color.lightGray);
        GradientPaint gp1 
= new GradientPaint(0.0f0.0f, Color.green, 0.0f,
                
0.0f, Color.lightGray);
        GradientPaint gp2 
= new GradientPaint(0.0f0.0f, Color.red, 0.0f,
                
0.0f, Color.lightGray);
        renderer.setSeriesPaint(
0, gp0);
        renderer.setSeriesPaint(
1, gp1);
        renderer.setSeriesPaint(
2, gp2);
        
// 设置坐标轴位置
        
// categoryplot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);

        CategoryAxis categoryaxis 
= categoryplot.getDomainAxis();
        categoryaxis.setCategoryMargin(
0.1);
   
          
/ /设置横轴显示的样式
        CategoryLabelPositions categorylabelpositions 
= categoryaxis
                .getCategoryLabelPositions();
        CategoryLabelPosition categorylabelposition 
= new CategoryLabelPosition(
                RectangleAnchor.LEFT, TextBlockAnchor.CENTER_LEFT,
                TextAnchor.CENTER_LEFT, 
0.0, CategoryLabelWidthType.RANGE, 0.3F);
        categoryaxis.setCategoryLabelPositions(CategoryLabelPositions
                .replaceLeftPosition(categorylabelpositions,
                        categorylabelposition));

        
return jfreechart;
    }


    
public static JPanel createDemoPanel() {
        JFreeChart jfreechart 
= createChart(createDataset());
        
return new ChartPanel(jfreechart);
    }


    
public static void main(String[] strings) {
        Log.getInstance().addTarget(
new PrintStreamLogTarget());
        Demo barchart3ddemo2 
= new Demo("3D Bar Chart Demo 2");
        barchart3ddemo2.pack();
        RefineryUtilities.centerFrameOnScreen(barchart3ddemo2);
        barchart3ddemo2.setVisible(
true);
    }

}