【发布时间】:2015-04-03 20:11:25
【问题描述】:
解决方案
我不得不使用setXAxisMin() 和setXAxisMax() 来设置初始x 值,而不是使用setInitialRange()。我觉得有点混乱。
原始问题
我目前正在从事一个涉及 acharteninge 库的项目,该库用于绘制时间图,到目前为止效果非常好。用户可以通过单独的按钮在各种图表(一个 XYMultipleSeriesDataset 加上每个图表一个 TimeSeries)之间切换。到目前为止,achartengine 在显示图表时会显示所有 x 值。
但是,我被要求仅显示图表显示前三个小时内捕获的数据,因为这些信息最相关。尽管如此,用户仍然应该能够滚动到前三个小时后捕获的数据,这意味着限制 x 轴最大值不是一种选择。
例如:有两条曲线。第一条曲线是使用 4 小时内捕获的数据绘制的,而第二条曲线是根据 18 小时内捕获的数据创建的。
在当前版本中,我的程序最初会显示图表的所有数据,这意味着第一条曲线显示了三个小时的非常相关的数据,同时也显示了 1 小时的不太重要的信息。第二条曲线的“比率”为 3 到 15(高度显着数据与常规数据)。因此,当用户比较两条曲线时,会显示不同数量的高重要信息,这使得用户更难比较这些数据,因为他必须手动调整缩放。
编辑 01.04.2015 15:46
为了设置初始范围,我使用了 XYMultipleSeriesRenderer 实例的方法setInitialRange(double[] initialRange);,它根本不会影响图形。下面你可以看到我的声明(currentlyProcessedCurve.getRecordStart() 是 Joda 的 DateTime 的一个实例,而且它是第一个显示点的 x 值):
public static final int CHART_X_AXIS_INITIAL_MAX = 3;
public static final int CHART_MARGIN_PAN = 45;
...
double[] initialRange = { currentlyProcessedCurve.getRecordStart().minusMinutes(ApplicationSettings.CHART_MARGIN_PAN).toDate().getTime(), currentlyProcessedCurve.getRecordStart().plusHours(ApplicationSettings.CHART_X_AXIS_INITIAL_MAX).toDate().getTime(), 0, 600 };
currentDatasetRenderer.setInitialRange(initialRange);
潮汐(编辑结束)
下面的屏幕截图大致显示了曲线最初的样子(只是为了清楚起见:请只考虑图形的形状,因为它们看起来应该相等 --> 我想说的是:我知道 x -axis和两张截图的y轴标签不同,但我还没有更好的图片):
最后,下面的截图展示了曲线在显示时的样子:
为了让用户能够比较曲线,我锁定了 y 轴缩放。
非常感谢任何帮助。提前致谢!
【问题讨论】:
标签: android achartengine