找到一箇舊的帖子describing how to use two renderers in the same plot,這只是在這種情況下的事情。
要下你需要
- 創建得到填充兩個新系列
- 一個是在的底部下限差異圖
- 其他的是價值觀情節 - 通常只是零。通過調用
plot.getRangeAxis().getLowerBound()
- 將它們添加到一個新的數據集,將其添加到情節 我不知道,一個情節可以有多個數據集輕鬆得到。原來,只能使用索引來訪問它們。
- 創建一個新的渲染爲「補」數據集
- 創建一個新的渲染
- 設置正確的補漆
- 設置了新的數據集的rendererer成爲新的渲染
該代碼類似於以下內容,其中填充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;
}
關於使用文檔中兩個呈現器的另一個示例:http://www.java2s.com/Code/Java/Chart/JFreeChartOverlaidBarChartDemo.htm – oligofren 2012-01-16 12:30:24