gpt4 book ai didi

java - 如何使用 JFreeChart 创建堆叠区间图?

转载 作者:行者123 更新时间:2023-11-30 11:35:29 25 4
gpt4 key购买 nike

目标是构建一个区间条形图,指示每个类别的可接受值范围(0 - 100% 之间)。

对于每个类别,我想指出 2 个间隔(即绿色的中心间隔和灰色的周围间隔),我认为使用 IntervalBarRenderer 是不可行的,因此我一直在使用 StackedBarRenderer (在每个栏的最左边和右边有透明层)。

这是正确的方法吗?

另外,如果这是正确的方法,似乎透明的条间隔(在每个条的最左边和最右边)不显示它们的轮廓:他们有什么方法可以有一个透明的轮廓油漆?

请参阅下面的主要代码和当前结果的屏幕截图。

非常感谢任何帮助或提示!

托马斯 Current result - not satisfactory



private JFreeChart createChart(LeaksChartSeriesVO 数据){
JFreeChart 图表 = ChartFactory.createStackedBarChart(
"泄漏计",//标题
"Leaks",//域轴(X)标签
"%",//范围轴(Y)标签
数据条,
PlotOrientation.HORIZONTAL,
真的,//传说?
真的,//工具提示?
错误的);//网址?
CategoryPlot plot = (CategoryPlot) chart.getPlot();

//设置X轴子图例
SubCategoryAxis subCat = new SubCategoryAxis("漏水表");

//添加第二个数据集
plot.setDataset(1, data.dots);

//定义关卡渲染器
LevelRenderer renderer1 = new LevelRenderer();
renderer1.setSeriesPaint(0, Color.black);
plot.setRenderer(1, renderer1);

//设置Y轴为%
((StackedBarRenderer) plot.getRenderer()).setRenderAsPercentages(true);

//设置颜色
((StackedBarRenderer) plot.getRenderer()).setSeriesPaint(0, new Color(0, 0, 0, 0));//透明开始
((StackedBarRenderer) plot.getRenderer()).setSeriesPaint(1, Color.gray);//灰色低
((StackedBarRenderer) plot.getRenderer()).setSeriesPaint(2, Color.green);//绿色的
((StackedBarRenderer) plot.getRenderer()).setSeriesPaint(3, Color.gray);//灰高
((StackedBarRenderer) plot.getRenderer()).setSeriesPaint(4, new Color(0, 0, 0, 0));//透明结束
((StackedBarRenderer) plot.getRenderer()).setDrawBarOutline(true);
((StackedBarRenderer) plot.getRenderer()).setBaseOutlinePaint(Color.black);

//设置在图例中不显示哪些项目
((StackedBarRenderer) plot.getRenderer()).setSeriesVisibleInLegend(0, false);
((StackedBarRenderer) plot.getRenderer()).setSeriesVisibleInLegend(3, false);
((StackedBarRenderer) plot.getRenderer()).setSeriesVisibleInLegend(4, false);

//设置渲染器和轴
plot.setDomainAxis(subCat);

//更改绘图渲染顺序,使条形图在背景中,形状在前面
chart.getCategoryPlot().setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

//设置条之间的边距
chart.getCategoryPlot().getDomainAxis().setCategoryMargin(0.5f);

返回图表;
}

最佳答案

这是 GradientBarPainter 的默认行为用于绘制条形图:当条形图透明时,不绘制轮廓。

您可以改为使用 StandardBarPainter这将绘制轮廓。

只需添加:

StackedBarRenderer renderer = (StackedBarRenderer) plot.getRenderer();
renderer.setBarPainter(new StandardBarPainter());

另一种解决方案是保留 GradientBarPainter 但使用 几乎透明 条的颜色:

setSeriesPaint(0, new Color(0, 0, 0, 1));

关于java - 如何使用 JFreeChart 创建堆叠区间图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15099261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com