java - JFreeChart - 如何对 StackedBarRenderer 中的多行进行颜色编码?

标签 java graph jfreechart graphing

我正在开发一个程序,它接受一组 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 种不同的颜色。我附上这张图片是为了向您展示它的样子:

http://i.imgur.com/hg33P.png

正如您所看到的,这使得数据完全不可读。我想要的是看到红色和蓝色交替的条形。

编辑:我找到了答案;我用的是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/

相关文章:

java - 如何使用UTF-8编码打开java程序生成的zip文件

java - JTable 计算正在使用的行数并返回数字

algorithm - 贝尔曼福特算法可以有任意顺序的边吗?

c++ - C++ 图结构中边的高效表示

java - JFreechart XYAreaChart 改变颜色

java - 在Jfreechart中更改图形的X轴起始值

JAVA char[] 到 Zip 到文件

java for循环运行list只执行一次

algorithm - 为什么贝尔曼福特算法允许下降沿?

java - 将图表添加到缓冲区