在制作柱状图时候,想修改柱子的颜色,加入的数据如下:
dataset.addValue(1,  "苹果","2001-1"); //柱状图
dataset.addValue(2,  "苹果","2001-2");
dataset.addValue(3, "苹果","2001-3");
dataset.addValue(4, "苹果","2001-4");
dataset.addValue(5, "苹果","2001-5");
dataset.addValue(6, "苹果","2001-6");
dataset.addValue(5, "苹果","2001-7");
已有的方法renderer.setSeriesPaint(0,   fiveType);   其中只能根据第二列数据设置颜色,我现在想根据第三列数据修改柱子的颜色,也就是想根据时间列修改柱子的颜色,该如何考虑呢,现在比较着急,公司等着交活呢,谢谢各位了!

解决方案 »

  1.   

    这个不行,如果想你说的那样,图例就没发画了
    dataset.addValue(1, "苹果","2001-1"); //柱状图
    dataset.addValue(2, "苹果","2001-2");
    dataset.addValue(3, "苹果","2001-3");
    dataset.addValue(4, "桔子","2001-4");
    dataset.addValue(5, "桔子","2001-5");
    dataset.addValue(6, "桔子","2001-6");
    这个时候图例显示苹果是一个颜色,桔子是一个颜色。但是像你说的那样图例就没法画了。可以给你一个变通的方法,就是把第二列的数据和第三列的数据交换位置
      

  2.   

    知道了,谢谢,再请教一个问题,我可以将y轴上面的数据根据需要在图上显示,比如柱子上的数据为2,我想在柱子上显示为“II类”,这个可以解决吗?谢谢了!
      

  3.   

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import javax.swing.JPanel;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.labels.CategoryItemLabelGenerator;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.CategoryItemRenderer;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;public class ItemLabelDemo1 extends ApplicationFrame
    {
    static class ItemLabelGenerator implements CategoryItemLabelGenerator
    {
    private double threshold; public ItemLabelGenerator(double threshold)
    {
    this.threshold = threshold;
    } public String generateLabel(CategoryDataset dataset, int series,
    int category)
    {
    String result = null;
    final Number value = dataset.getValue(series, category);
    if (value != null)
    {
    final double v = value.doubleValue();
    if (v > this.threshold)
    {
    result = value.toString();
    }
    }
    return result;
    } public String generateColumnLabel(CategoryDataset dataset, int column)
    {
    return null;
    } public String generateRowLabel(CategoryDataset dataset, int row)
    {
    return null;
    }
    } public ItemLabelDemo1(String title)
    {
    super(title);
    CategoryDataset dataset = createDataset();
    JFreeChart chart = createChart(dataset);
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new Dimension(500, 270));
    setContentPane(chartPanel);
    } private static CategoryDataset createDataset()
    {
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(11.0, "S1", "C1");
    dataset.addValue(44.3, "S1", "C2");
    dataset.addValue(93.0, "S1", "C3");
    dataset.addValue(35.6, "S1", "C4");
    dataset.addValue(75.1, "S1", "C5");
    return dataset;
    } private static JFreeChart createChart(CategoryDataset dataset)
    {
    JFreeChart chart = ChartFactory.createBarChart("Item Label Demo 1",
    "Category", "Value", dataset, PlotOrientation.VERTICAL, false,
    true, false);
    chart.setBackgroundPaint(Color.white);
    CategoryPlot plot = chart.getCategoryPlot();
    plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);
    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setUpperMargin(0.15);
    CategoryItemRenderer renderer = plot.getRenderer();
    renderer.setItemLabelGenerator(new ItemLabelGenerator(50.0));
    renderer.setItemLabelFont(new Font("Serif", Font.PLAIN, 20));
    renderer.setItemLabelsVisible(true);
    return chart;
    } public static JPanel createDemoPanel()
    {
    JFreeChart chart = createChart(createDataset());
    return new ChartPanel(chart);
    } public static String getDemoDescription()
    {
    return "A bar chart with item labels displayed only for values greater than a threshold.";
    } public static void main(String[] args)
    {
    ItemLabelDemo1 demo = new ItemLabelDemo1("Item Label Demo 1");
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);
    }
    }
    你可以参考一下这个例子