同じプロットで 2 つのレンダラーを使用する方法を説明している古い投稿を見つけました。
下に塗りつぶすには、次のことが必要です
- 2 つの新しいシリーズを作成する
- 1 つは差分プロットの下限です
- もう 1 つは、プロットの下部にある値です。多くの場合、ゼロです。電話で簡単に取得
plot.getRangeAxis().getLowerBound()
- それらを新しいデータセットに追加し、これをプロット
に追加します。プロットに複数のデータセットが含まれる可能性があることを知りませんでした。インデックスを使用してそれらにアクセスできることがわかりました。
- 「塗りつぶし」データセット用の新しいレンダラーを作成する
- 新しいレンダラーを作成する
- 適切な塗りつぶしペイントを設定する
- 新しいデータセットのレンダラーを新しいレンダラーに設定します
コードは次のようなもので、塗りつぶしペイントは明らかにあなた次第です。
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;
}