gpt4 book ai didi

java - 在 XYDifference(渲染器)图下方创建面积图

转载 作者:行者123 更新时间:2023-11-30 04:54:51 26 4
gpt4 key购买 nike

上周我一直在尝试找到一种方法让 JFreeChart 显示类似于下图的内容。基本上,您正在查看三个系列(上、中、下),中间有填充。下面有一个(浅绿色)填充颜色,或者有些人可能会称之为面积图 - 没有任何意义,只是为了看起来。

enter image description here

我所想出的唯一真正缺少的是最后一部分:下面的填充/面积图:

enter image description here

我什至尝试子类化 XYDifferenceRenderer 并将其与 Areachart 的渲染器结合起来,但我无法控制 Areachart 的高度,基本上将绘图填充到顶部。所以那是不行的。之前创建了简单的渲染器来创建圆形条形图,我认为我也许可以更改 XYDifferenceRenderer 的代码。但 XYDifferenceRenderer 的代码涉及相当多的几何图形和 JFree 图表的内部工作原理,任务有点繁重。那么关于如何以任何“正常”方式实现这种效果(不涉及破解 JFreeChart 的内部工作原理)的任何提示?

最佳答案

发现一个旧帖子 describing how to use two renderers in the same plot ,这就是本例中的情况。

要在下面填充,您需要

  1. 创建两个新系列
    • 1 是差异图的下界
    • 另一个是图底部的值 - 通常为零。通过调用 plot.getRangeAxis().getLowerBound()
    • 轻松获取
  2. 将它们添加到新数据集并将其添加到绘图中我不知道一个图可以有多个数据集。事实证明,只需使用索引即可访问它们。
  3. 为“填充”数据集创建新的渲染器
    • 创建一个新的渲染器
    • 设置正确的填充颜料
    • 将新数据集的渲染器设置为新渲染器

代码类似于以下内容,其中填充 Paint 显然取决于您:

static void addFill(Plot plot) {

XYSeries lowerLimitSeries = ((XYSeriesCollection) (plot.getDataset())).getSeries(1);
XYSeriesCollection fillSet = new XYSeriesCollection();
double lowerBound = plot.getRangeAxis().getLowerBound();
fillSet.addSeries(lowerLimitSeries);
fillSet.addSeries(createLowerFillSeries(lowerLimitSeries, lowerBound));
plot.setDataset(1, fillSet);
Paint fillPaint = Color.GREEN;
XYDifferenceRenderer fillRenderer = new XYDifferenceRenderer(fillPaint, fillPaint, false);
fillRenderer.setSeriesStroke(0, new BasicStroke(0)); //do not show
fillRenderer.setSeriesStroke(1, new BasicStroke(0)); //do not show
plot.setRenderer(1, fillRenderer);
...
}

static XYSeries createLowerFillSeries(XYSeries lowerLimitSeries, double lowerLimit) {
int size = lowerLimitSeries.getItems().size();
XYSeries res = new XYSeries("lowerFillSeries");
for (int i = 0; i < size; i++) res.add(new XYDataItem(lowerLimitSeries.getX(i), lowerLimit));
return res;
}

关于java - 在 XYDifference(渲染器)图下方创建面积图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8866390/

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