我正在开发一个程序,它接受一组 double 并将它们全部显示在水平条形图上的一行中。现在除了着色之外它可以工作。我的行数不确定,因此数据添加到图表中,如下所示:
public CategoryDataset createDataset() {
DefaultCategoryDataset bardataset1 = new DefaultCategoryDataset();
for (int i = 0; i < nanoArray.length; i++) {
bardataset1.addValue(nanoArray[i], "Packet" + i, "Class A");
bardataset1.addValue(startgap, "Packet Gap" + i, "Class A");
}
}
这会正确堆叠数据,但由于大约有 300 个不同的 rowKey,因此它分配了 300 种不同的颜色。我附上这张图片是为了向您展示它的样子:
正如您所看到的,这使得数据完全不可读。我想要的是看到红色和蓝色交替的条形。
编辑:我找到了答案;我用的是jcern的方法。我还编写了一个 for
循环,它迭代 double 组的长度,并根据它是偶数还是奇数分配颜色。
for (int i = 0; i < packetCount; i++) {
setSeriesToolTipGenerator(i, new StandardCategoryToolTipGenerator());
if (i % 2 == 0) {
setSeriesPaint(i, new Color(255, 0, 0));
} else {
setSeriesPaint(i, new Color(0, 0, 0));
}
}
最佳答案
您需要创建一个新的渲染器并将其指定到绘图中。
首先,您将创建一个具有所需两种颜色的渲染:
CategoryItemRenderer renderer = new StackedBarRenderer {
private Paint[] colors = new Paint[] {
new Color(255, 0, 0),
new Color(0, 0, 255)
}
public Paint getSeriesPaint(int series) {
return colors[(series % 2)];
}
};
然后,抓取绘图并指定要使用的渲染:
if(chart.getPlot() instanceof CategoryPlot){
chart.getCategoryPlot().setRenderer(renderer);
}
希望这能让您到达您想要的位置。
关于java - JFreeChart - 如何对 StackedBarRenderer 中的多行进行颜色编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970124/