数据为: 
      北京 上海 广州 成都 深圳 
  苹果  672  766  223  540  126 
  梨子  325  521  210  340  106 
  葡萄  332  256  523  240  526 构建的dataset:  String[] rowKeys={"苹果","梨子","葡萄"}; 
              String[] columnKeys={"北京","上海","广州","成都","深圳"};我现在就想画5根柱子,每个颜色都不一样,还是这五个城市,比如北京为红色,上海为蓝色,
广州为绿色等,如果这样的话:
               String[] rowKeys={"苹果"}; 
               String[] columnKeys={"北京","上海","广州","成都","深圳"};
颜色都为一种颜色,而renderer.setSeriesPaint(i,Color)这个i要为rowKey,颜色没法改
如果这样:
               String[] rowKeys={"苹果","梨子","葡萄","桔子","香蕉"}; 
               String[] columnKeys={"北京"};
颜色是不同显示了,可是下标全是北京了,我要的结果是一个柱子一个颜色,并且代表不同城市,
请问怎么做,还是我这个方式是错误的,请指教不知道大家明白我的意思不,在线等,请大家多多指教

解决方案 »

  1.   

    给个链接http://hi.baidu.com/no_computer/blog/item/5439c9fb468847d8b58f3175.html
    呵呵,这个网上很多的,LZ可以再仔细找找
    另外这个有可能跟你的jreechart的版本也有关系啊
    希望对LZ有帮助柱状图的dataset 一般是用CatagoryDataset接口(具体实现类是DefaultCategoryDataset),也会用 IntervalXYDataset
    接口
    1、创建一个数据源(dataset):
    private static CategoryDataset createDataset()
    {
    String series1 = “First”;
    String series2 = “Second”;
    String series3 = “Third”;
    String category1 = “Category 1″;
    String category2 = “Category 2″;
    String category3 = “Category 3″;
    String category4 = “Category 4″;
    String category5 = “Category 5″;
    DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
    defaultcategorydataset.addValue(1.0D, series1, category1);
    defaultcategorydataset.addValue(4D, series1, category2);
    defaultcategorydataset.addValue(3D, series1, category3);
    defaultcategorydataset.addValue(5D, series1, category4);
    defaultcategorydataset.addValue(5D, series1, category5);defaultcategorydataset.addValue(5D, series2, category1);
    defaultcategorydataset.addValue(7D, series2, category2);
    defaultcategorydataset.addValue(6D, series2, category3);
    defaultcategorydataset.addValue(8D, series2, category4);
    defaultcategorydataset.addValue(4D, series2, category5);defaultcategorydataset.addValue(4D, series3, category1);
    defaultcategorydataset.addValue(3D, series3, category2);
    defaultcategorydataset.addValue(2D, series3, category3);
    defaultcategorydataset.addValue(3D, series3, category4);
    defaultcategorydataset.addValue(6D, series3, category5);
    return defaultcategorydataset;
    }
    2、由ChartFactory 产生 JFreeChart 对象
    private static JFreeChart createChart(CategoryDataset categorydataset)
    {
    JFreeChart jfreechart = ChartFactory.createBarChart(
    "Bar Chart Demo", //图形标题名称
    "Category",//domain 轴 Lable这里先简单理解为横坐标Lable好了
    "Value", //range 轴 Lable这里也先简单理解为纵坐标Lable好了
    categorydataset, // dataset
    PlotOrientation.VERTICAL, //垂直显示
    true, // legend?
    true, // tooltips?
    false); //URLs?
    jfreechart.setBackgroundPaint(Color.white); //设定背景色为白色
    CategoryPlot categoryplot = jfreechart.getCategoryPlot(); //获得 plot:CategoryPlot!!
    categoryplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色
    categoryplot.setDomainGridlinePaint(Color.white); //横坐标网格线白色
    categoryplot.setDomainGridlinesVisible(true); //可见
    categoryplot.setRangeGridlinePaint(Color.white); //纵坐标网格线白色
    //设置series1与category的显示位置;类似效果图http://www.chinabs.net/webimages/PieChart7.png
    categoryplot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
    categoryplot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); //使纵坐标的最小单位格为整数
    NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
    numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer(); //获得renderer 注意这里是下嗍造型到BarRenderer!!
    //显示每个柱的数值,并修改该数值的字体属性;类似效果图http://www.chinabs.net/webimages/PieChart6.png
    barrenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    barrenderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));
    barrenderer.setItemLabelsVisible(true);barrenderer.setDrawBarOutline(false); // Bar的外轮廓线不画
    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); //给series1 Bar设定上面定义的颜色
    barrenderer.setSeriesPaint(1, gradientpaint1); //给series2 Bar 设定上面定义的颜色
    barrenderer.setSeriesPaint(2, gradientpaint2); //给series3 Bar 设定上面定义的颜色
    CategoryAxis categoryaxis = categoryplot.getDomainAxis(); //横轴上的 Lable 45度倾斜
    categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
    return jfreechart;
    }
    一些重要的方法:(增加一块标记)
    IntervalMarker intervaler = new IntervalMarker(4.5D, 7.5D);
    intervaler.setLabel("Target Range");
    intervaler.setLabelFont(new Font(”SansSerif”, 2, 11));
    intervaler.setLabelAnchor(RectangleAnchor.LEFT);
    intervaler.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
    intervaler.setPaint(new Color(222, 222, 255, 128));
    categoryplot.addRangeMarker(intervaler, Layer.BACKGROUND);