在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 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