发现一篇旧帖子描述了如何在同一个情节中使用两个渲染器,这就是本例中的内容。
要在下面填充,您需要
- 创建两个新系列
- 一个是差异图的下限
- 另一个是图底部的值 - 通常为零。打电话轻松搞定
plot.getRangeAxis().getLowerBound()
- 将它们添加到新数据集并将其添加到图中
我不知道一个图可能有多个数据集。事实证明,可以只使用索引来访问它们。
- 为“填充”数据集创建一个新的渲染器
- 创建一个新的渲染器
- 设置正确的填充油漆
- 将新数据集的渲染器设置为新渲染器
该代码类似于以下内容,其中填充 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;
}