JFreeChart:当时间轴减少时如何缩放 Y 轴?

Posted

技术标签:

【中文标题】JFreeChart:当时间轴减少时如何缩放 Y 轴?【英文标题】:JFreeChart: how to scale Y-axis when time axis is reduced? 【发布时间】:2019-07-14 07:10:19 【问题描述】:

我在 JFreeChart 中创建了一个绘图,由 TimeSeriesCollectionXYPlot 组成。水平轴使用DateAxis,垂直(Y)轴使用NumberAxis。如果水平轴使用我有数据点的所有日期,我会在使用时得到正确的 Y 轴刻度:

Y1axis.setAutoRangeIncludesZero(false);
Y1axis.setRangeWithMargins(LeftSeries.getRangeBounds(true));

现在我想仅从可用时间数据的一部分创建一个绘图。例如:我有涵盖四年的数据点,但想创建一个仅包含第二年的图。为此,我创建了一个日期范围(MinDate 是我要显示的最旧数据点,MaxDate 我要显示的最新数据点):

dateAxis.setMinimumDate(MinDate);
dateAxis.setMaximumDate(MaxDate);

这会根据需要缩放水平轴。但是,如果我现在使用相同的代码来缩放 Y 轴 (Y1axis.setRangeWithMargins(LeftSeries.getRangeBounds(true))),我会得到适用于整个数据集的整个垂直范围。我想要的是适合日期范围MinDate~MaxDate 的垂直刻度。 我已经尝试了一些方法来使垂直轴正确缩放,但我的尝试都没有任何好处。例如:

double LowValue = Y1axis.getLowerBound();
double HighValue = Y1axis.getUpperBound();
Y1axis.setRange(LowValue, HighValue);

没用。 我应该使用什么代码来调整垂直 (Y) 轴上的比例以使其适应图中显示的水平时间轴数据点?

【问题讨论】:

【参考方案1】:

您只需为Y1axis 轴启用自动范围

Y1axis.setAutoRangeIncludesZero(false);
Y1axis.setAutoRange(true);

例子:

所有数据:

具有自动范围的值的子集已禁用

具有自动范围的值的子集启用

【讨论】:

如此明显,但不知何故我忽略了这一点。谢谢 Topaco,因为它回答了我的问题。

以上是关于JFreeChart:当时间轴减少时如何缩放 Y 轴?的主要内容,如果未能解决你的问题,请参考以下文章

jfreechart 在客户端

切换 JFreeChart 轴范围的上限

JFreechart - 想要自定义 Y 轴值

Android 图表框架MPAndroidChartr如何不绘制右边的Y轴

JfreeChart Axis 自定义精度或范围

使用 JFreeChart 在 x 轴上的日期时间