当前位置: 首页 > 知识库问答 >
问题:

在JFreeChart堆叠3D条形图中更改自定义颜色

饶铭
2023-03-14

我已经在网上搜索了足够多的东西,但没有运气。

我已经创建了一个堆叠的3D条形图,其中我无法更改默认颜色。我试了所有提供的建议。

A   0   2
B   15  53
C   0   2
D   0   2
E   0   1
F   1   0
G   0   1
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(item,models, data);
chart = ChartFactory.createStackedBarChart3D(chartDescription, X-axis, Y-axis, dataset,PlotOrientation.VERTICAL, true, true, true);
CategoryPlot plot = chart.getCategoryPlot();
CategoryItemRenderer r = plot.getRenderer();
r.setSeriesPaint(0, Color.GREEN);
r.setSeriesPaint(1, Color.GRAY);
 plot.setRenderer(new StackedBarRenderer3D() {

@Override
public Paint getItemPaint(int row, int col) {
    System.out.println("row:"+row);
    System.out.println("Col:"+col);
    return Color.getHSBColor(row / 42f, 1, 1);
}
});
CategoryAxis domainAxis = plot.getDomainAxis(); 
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);

NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

StackedBarRenderer3D renderer = (StackedBarRenderer3D)plot.getRenderer();
//renderer.setBarPainter(new StandardBarPainter());
renderer.setSeriesFillPaint(0,Color.BLACK);
renderer.setSeriesFillPaint(1,Color.GREEN);
renderer.setDrawBarOutline(false);
renderer.setShadowVisible(false);
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER,TextAnchor.CENTER));
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setIgnoreZeroValues(true);
renderer.setMaximumBarWidth(.05);
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer.setPositiveItemLabelPositionFallback(new ItemLabelPosition(
    ItemLabelAnchor.CENTER, TextAnchor.CENTER_RIGHT));
renderer.setNegativeItemLabelPositionFallback(new ItemLabelPosition(
ItemLabelAnchor.CENTER, TextAnchor.CENTER_RIGHT));
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
    ItemLabelAnchor.CENTER, TextAnchor.TOP_CENTER));
renderer.setBaseNegativeItemLabelPosition(new ItemLabelPosition(
    ItemLabelAnchor.CENTER, TextAnchor.TOP_CENTER));
LegendTitle legend = chart.getLegend(0); 
legend.setBackgroundPaint(Color.white);
legend.setFrame(new BlockBorder(Color.green));
StandardChartTheme theme = (StandardChartTheme)org.jfree.chart.StandardChartTheme.createJFreeTheme();
theme.setTitlePaint(Color.decode("#4572a7"));
theme.setExtraLargeFont(new Font("Arial",Font.BOLD, 16) ); 
theme.setLargeFont(new Font("Arial",Font.BOLD, 15)); 
theme.setRegularFont( new Font("Arial",Font.PLAIN, 11));
theme.setRangeGridlinePaint(Color.RED);
theme.setPlotBackgroundPaint( Color.white );
theme.setChartBackgroundPaint( Color.white );
theme.setItemLabelPaint(Color.YELLOW);
theme.setShadowVisible(true);
theme.setAxisLabelPaint( Color.decode("#666666")    );
theme.apply( chart );

EvenI使用了SetSeriesPaint,但它不起作用。与图表、情节和渲染器中的创作顺序有关吗?

当我打印行和列时,我得到以下信息:

row:1
Col:0
row:0
Col:1
row:1
Col:1
row:1
Col:2
row:1
Col:3
row:1
Col:4
row:0
Col:5
row:1
Col:6

共有1个答案

商高谊
2023-03-14

您可以重写呈现器的getitempaint(),如下所示。

plot.setRenderer(new StackedBarRenderer3D() {

    @Override
    public Paint getItemPaint(int row, int col) {
        return Color.getHSBColor(row / 42f, 1, 1);
    }
});
 类似资料:
  • 问题内容: 我使用以下代码处理了一个简单的3d条形图: 认为这只是一个测试,到目前为止,一切似乎都还很清楚。我只是想知道如何以堆叠的方式绘制这9个条形图的每一个,以便例如将每个条形图分成4个部分,组成整个条形图。 基本上,我想以此处的示例方式执行此操作。 但是,我希望有2个堆栈,而不是2个堆栈。有什么想法可以从我现在的角度出发吗?每个提示将不胜感激。 谢谢! 编辑:如果我想实现每个堆叠的酒吧给定的

  • Highcharts 3D图 以下实例演示了堆叠3D柱形图。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。 配置 chart.options3d 配置 以下列出了 3D 图的基本配置,设置 chart 的 type 属性为 column,options3d 选项可设置三维效果。 var chart = { type: 'column',

  • 我正在制作一个应用程序,它需要一些数据来制作一个条形图,但条形的颜色必须与它所代表的数据相关。 想象一下我有这种数据:香蕉430水梅隆300 现在我要做一个条形图,我想用黄色颜料画BANANA酒吧,用绿色颜料画WATER MELLON酒吧。我正在使用java中的JFreeChart库。我的研究使我制作了自定义渲染器,但如果我制作自定义渲染器的话,颜色会随机出现在条形图上。有什么解决办法吗?

  • 我有以下不同月份的数据 一月:[1,5,3] Feb:[10,5] 三月:[4,8] 四月:[7] 可能:[3,1,5,0,7] 我想生成如下所示的条形图 现在,我有以下代码,我想知道如何生成如上图所示的条形图。 }); 非常感谢。

  • Highcharts 条形图 以下实例演示了堆叠条形图。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。 配置 plotOptions 配置图表堆叠使用 plotOptions.series.stacking,并设置为 "normal"。如果禁用堆叠可设置为 null , "normal" 通过值设置堆叠, "percent" 堆叠则按百分比。 v

  • 我正在使用gnuplot绘制条形图。 问题是:我希望每个酒吧都有不同的颜色。例如:红色的MSA-GA ACO和蓝色的MSA-GA PACO。 我该怎么做呢? 以下是我使用过的命令: “data.dat”: