【问题标题】:achartengine time chart set initial rangeachartengine 时间图表设置初始范围
【发布时间】: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轴标签不同,但我还没有更好的图片):

desired initial range

最后,下面的截图展示了曲线在显示时的样子:

为了让用户能够比较曲线,我锁定了 y 轴缩放。

非常感谢任何帮助。提前致谢!

【问题讨论】:

    标签: android achartengine


    【解决方案1】:

    您考虑过平移选项吗?

    使用此选项,您可以限制轴的最大值,并且您的图表将在开始时显示重要数据,而用户可以向左或向右滚动(无论您有不太重要的数据点)。

    您需要做的就是:

    • 为您需要的轴设置平移
    • 设置平移限制(因此用户不能滚动超过最后一个数据点)

    希望这会有所帮助, 干杯。

    【讨论】:

    • 谢谢,使用 pan 确实改进了我的程序,因为用户无法再滚动到图表的“必杀技”。但是,图表的初始范围还没有改变。为此,我发现了 XYMultipleSeries 实例的 setInitialRange 方法。尽管如此,这种方法似乎并没有影响图表,尽管开发人员已经修复了这样的问题(code.google.com/p/achartengine/issues/detail?id=60)。
    【解决方案2】:

    我不得不使用XYMultipleSeriesRendererInstance.setXAxisMin()XYMultipleSeriesRendererInstance.setXAxisMax() 来设置初始x 值,而不是使用XYMultipleSeriesRendererInstance.setInitialRange()

    double xMinValue = ...;
    double xMaxValue = ...;
    currentDatasetRenderer.setXAxisMin(xMinValue);
    currentDatasetRenderer.setXAxisMax(xMaxValue);
    

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2020-03-29
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多