在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
覆盖AbstractRenderer
的getItemPaint()
方法,如此处针对XYLineAndShapeRenderer
所示。
我找到了答案创建两个系列,然后添加你想要的酒吧数量并为每个系列设置颜色。 使用setSeriesPaint