TimeSeries:如何在线下渲染填充(或者,似乎是区域图)

时间:2011-10-05 11:23:24

标签: jfreechart

我正在绘制CPU负载平均值(5秒间隔)。传统上,这是作为实心填充区域图而不是单个浮动线完成的,例如......

enter image description here

这似乎是一个非常简单的请求,但我找不到解决方案。

我剩下的一条途径是将默认渲染器子类化。但我一直认为必须有更简单的东西。

你的线索&其他指针将是最受欢迎的。

微米。

2 个答案:

答案 0 :(得分:2)

也许我有点晚了,但我有一个可能的解决方案。 jfreechart允许制作这些图表。 由于您需要CPU负载图表,因此最佳类型的图表是TimeSeriesChart。用于此图表的最佳数据集是TimeSeriesCollection。在图片中,您的时间序列集包含2个时间序列。

主要解决方案是使用2个渲染器和2个独立的数据集。第一个渲染(显示实心区域)应为XYAreaRenderer。第二个(显示水平线)应为XYLineAndShapeRenderer。
以下是我们如何使用它的示例:

JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle, 
                       axisXTitle, axisYTitle, dataset, true, true, false);
XYPlot plot = (XYPlot) chart.getPlot();
XYAreaRenderer renderer = new XYAreaRenderer();
renderer.setSeriesVisible(0, true);
renderer.setSeriesVisible(1, false);
plot.setRenderer(0, renderer);

// this part is important, we should create 
// the new dataset object exactly the same as original
TimeSeriesCollection newDataset = null;

if (plot.getDataset(0) instanceof TimeSeriesCollection) {
    newDataset = (TimeSeriesCollection) 
                 ((TimeSeriesCollection) plot.getDataset()).clone();
}
plot.setDataset(1, newDataset);

// add new XYLineAndShapeRenderer to display capacity
XYLineAndShapeRenderer lineAndShapeRenderer = new XYLineAndShapeRenderer(true, false);
lineAndShapeRenderer.setSeriesVisible(0, false);
lineAndShapeRenderer.setSeriesVisible(1, true);
plot.setRenderer(1, lineAndShapeRenderer);

当然,您可以根据需要自定义这些渲染器(例如设置自定义颜色等)。请在此界面中查看更多信息:XYItemRenderer 此外,您可以自定义图表(图表)。请看这里:Plot

答案 1 :(得分:1)

您可能正在寻找org.jfree.chart.renderer.AreaRenderer。在区域图表下的示例demo中显示了几个问题。或者,XYBarRenderer可以生成一个漂亮的直方图。