自定义条形图的颜色XYJfree图表



如何用不同的颜色绘制不同的条,我尝试使用渲染器,这里是我的示例代码:

    public IntervalXYDataset createDataset() throws InterruptedException {
    parseFile();
    final XYSeries series = new XYSeries("Analysis");
    int i=0;
    while(parsedArray[i]!=0)
        {
        series.add(xaxisArray[i], yaxisArray[i]);
        i++;
    }
    final XYSeriesCollection dataset = new XYSeriesCollection(series);
     dataset.setIntervalWidth(0.15);//set width here
    return dataset;
}

我是这样画这个图的:

public className (final String title) throws InterruptedException {
    super(title);
    IntervalXYDataset dataset = createDataset();
    JFreeChart chart = createChart(dataset);
    final ChartPanel chartPanel = new ChartPanel(chart);
     XYPlot plot = (XYPlot) chart.getPlot();
    plot.getRenderer().setSeriesPaint( 0, Color.black);//0 works and paints all 40 bars in black, 1 and above fails. 
             // plot.getRenderer().setSeriesPaint( 1, Color.green);// this fails
    chartPanel.setPreferredSize(new java.awt.Dimension(2000,1000));//(width,height) of display
    setContentPane(chartPanel);
}

我能够像我在程序中评论的那样设置宽度,但是我现在想为不同的条形设置颜色,例如,我想在图表中获得条形,并为数组[0]绘制红色,为[3]绘制蓝色,为单元格[17]绘制橙色,你能指导我吗?非常感谢。


您需要做的是:

XYPlot plot = (XYPlot) chart.getPlot();
plot.getRenderer().setSeriesPaint(1, Color.yellow);

将1替换为您想要更改颜色的条形图的(从零开始的)索引。

编辑回复评论:

List<Color> myBarColors = .....
XYPlot plot = (XYPlot) chart.getPlot();
XYItemRenderer renderer = plot.getRenderer();
for (int i = 0; i < 40; i++) {
    renderer.setSeriesPaint(i, myBarColors.get(i));
}

编辑2:误解的OPs问题,新的解决方案在评论中

最灵活的方法是在自定义的XYBarRenderer中覆盖AbstractRenderergetItemPaint()方法,如下面的XYLineAndShapeRenderer所示。

我找到了答案创建两个系列,然后添加所需的横条数量,并为每个系列设置颜色。使用setSeriesPaint

最新更新