2

我有一个 JFreeChart 线图,它会为我的算法的每次迭代使用一个数据点动态更新。因为数据点的数量很快就会变得非常大,所以我在域轴上使用了setFixedAutoRange(double)方法。这将图表限制为显示最近的 n 次迭代(在我的情况下为 200 次)。

除了前 200 次迭代外,这很有效。问题是,在 200 次迭代之前,轴包含负值(例如,在 50 次迭代之后,范围是从 -150 到 50)。负迭代没有意义。我希望轴从零而不是负值开始。我怎样才能做到这一点?

我不介意轴最初是从 0 到 200(图表的右侧部分留空,直到绘图填满)还是从 0 到 1 开始并增长(这样绘图总是被拉伸横跨图表的整个宽度)。两者都可以接受,尽管我对前者略有偏好。

我尝试过的事情:

有任何想法吗?

4

4 回答 4

4

我遇到了同样的问题,我解决了:

axis.setAutoRangeMinimumSize(100); // Ensures graph always shows at least 0-100.
axis.setRangeType(RangeType.POSITIVE);

我正在使用 JFreeChart v1.0.14。setAutoRangeType自从问题最初发布以来,也许他们已经修复了一个错误?

这种方法的一个缺点是零值不可见。

于 2013-04-03T10:17:08.873 回答
1

看起来您正在寻找一种解决方案,该解决方案涉及配置 JFreeChart 来为您做这件事,而不是手动设置范围。

我对此无能为力....但是这里有一些其他丑陋的解决方案:P ....

你可以做这样的事情(对不起伪代码):

while(producingData) {
   this.produceData();
   if(!allDataButton.isSelected()) {
      domainAxis.setRange((count < 200) ? 0 : count-200), count);
    } else {
      domainAxis.setRange(0, count);
    }
}

如果我是 perl 编码器,我会这样写,只是为了让它更难阅读:P

while(producingData) {
   this.produceData();
   domainAxis.setRange(
       (((count < 200) || allDataButton.isSelected()) ? 0 : count-200), count);

}
于 2009-01-29T21:09:08.447 回答
0

我现在有一个可行的解决方案,虽然我仍然对更好的方法感兴趣,

最初,我将域轴的范围设置为 0 到 200 的固定范围:

domainAxis.setRange(0, 200);

在将数据添加到绘图的代码中,我检查它是否是正在添加的第 200 个值,如果是,我将范围切换到 200 的固定自动范围。虽然有点笨拙,但这是可行的(特别是因为我还必须检查用户是否选择了完全禁用固定窗口并让它显示所有值的选项)。

if (!allDataButton.isSelected() && count == 200)
{
    domainAxis.setAutoRange(true);
    domainAxis.setFixedAutoRange(200);
}
于 2009-01-29T18:22:58.953 回答
0

我尝试过的事情:

调用 setLowerBound 不能很好地与 setFixedAutoRange 配合使用。调用 setRangeType(RangeType.POSITIVE) 似乎没有任何区别。有任何想法吗?

你试过了吗axis.setRange(0, 200);

于 2009-10-27T09:20:25.900 回答