1

我正在开发一个程序,该程序采用一组双精度并将它们全部显示在水平条形图的一行中。现在它可以工作,除了着色。我有不确定的行数,因此数据被添加到图表中,如下所示:

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循环,它遍历我的双精度数组的长度,并根据它是偶数还是奇数来分配颜色。

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));
        }
    }
4

1 回答 1

1

您需要创建一个新的渲染器并将其指定给绘图。

首先,您将创建一个具有您想要的两种颜色的渲染:

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);
}

希望这能让你到达你想去的地方。

于 2012-08-15T13:39:49.397 回答