【问题标题】:Help with JFreeChart overlay帮助 JFreeChart 覆盖
【发布时间】:2011-04-11 18:03:51
【问题描述】:

我遇到了 JFreeChart 叠加图的问题。我正在使用 JFreeChart 1.0.13。我正在尝试做的事情似乎在早期版本的 JFreeChart 中更容易做?

图表显示折线图和条形图。 Y 轴的折线图绘制的数据范围在 0-100 范围内,条形图的轴在 0-5 范围内。

就我个人而言,当我布置每张图表并进行绘制时,它们看起来很棒。这是一个例子:

条形图 折线图

但是当我叠加它们时,条形图被缩小到看起来非常无用......大概是因为两个数据集的比例非常不同。

示例:

我真正想要的是拆分两个数据集的系列数据,并在左侧 Y 轴上显示折线图的 0-100 范围,并让条形图全尺寸显示,如下面的第一个示例,但在图表的右侧 Y 轴侧显示刻度 0-5。

为了创建图表,我首先使用 XYSeriesCollection 创建条形图,添加数据并创建绘图...

XYSeriesCollection histogramDataset= new XYSeriesCollection();
XYSeries xy= new XYSeries("Temp");
xy.add(100,0.0);
xy.add(101,0.3769791404875597);
histogramDataset.addSeries(xy);
...
final NumberAxis xAxis = new NumberAxis("Temperature C");
xAxis.setAutoRangeIncludesZero(false);
final ValueAxis yAxis = new NumberAxis("Percent Time above Temperature");
final XYItemRenderer renderer = new XYBarRenderer();

final XYPlot plot = new XYPlot((XYDataset) histogramDataset, xAxis, yAxis, renderer);

然后我以类似的方式创建折线图并将第二个系列添加到绘图中......

final XYSeries xy = new XYSeries("First");
final XYDataset xySeriesData = new XYSeriesCollection();
final XYItemRenderer xyLineRenderer = new XYLineAndShapeRenderer();
xyLineRenderer.setSeriesShape(0, new Line2D.Double(0.0, 0.0, 0.0, 0.0));
xyLineRenderer.setSeriesStroke(0, new BasicStroke(4.5f));
xy.add(100,100.0);
xy.add(101,100.0);
xyseriesData.add(xy);
plot.setDataset(1, xySeriesData);
plot.setRenderer(1, xyLineRenderer);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

我的怀疑是,每个图表都需要以某种方式成为自己的情节并组合在一起。任何人都可以帮忙吗?我在这里要做的是这样的:

除了我不希望条形图成为背景图像。 X 轴应相同,Y 轴应位于右侧,并具有适当的比例,以使图形能够以全尺寸显示。

感谢任何/所有回复...

【问题讨论】:

    标签: overlay jfreechart scale mismatch


    【解决方案1】:

    我看到您正在向绘图中添加第二个数据集和渲染器,但您强制它们使用相同的范围轴。相反,为第二个数据集的范围提供一个新的NumberAxis

    顺便说一句,不要忽视JFreeChart Demo 中与轴相关的示例,也不要低估JFreeChart Developer Guide 的价值。

    【讨论】:

    • 不隶属于jfree.org/jfreechart;只是一个满意的客户和有时的贡献者。
    • 感谢您朝着正确的方向前进。添加: final ValueAxis yAxis = new NumberAxis("Percent Time at Temperature"); plot.setRangeAxis(1, yAxis); plot.mapDatasetToRangeAxis(0, 1); MapDataSetToRange 是关键...
    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多