在AChartEngine中设置最小网格分辨率?

时间:2014-03-11 11:47:19

标签: achartengine

我正在使用AchartEngine库绘制传感器的测量值。值大约为1E-6。

当我尝试绘制它们正确显示的值时,但是当我缩放绘图时,我在x标签中看到的最大分辨率大约是1E-4。我使用以下代码来更改标签数量:

mRenderer.setXLabels(20);
mRenderer.setYLabels(20);  

我也在改变y轴的范围,但分辨率保持不变。有没有人以前发现过这个问题?

修改

我没有足够的声誉来发布图片,但以下链接显示了我得到的图表视图。

https://dl.dropboxusercontent.com/u/49921111/measurement1.png

我想要的是在3.0E-5和4.0E-5之间有更多的网格线。不幸的是我还没有找到如何做到这一点。我还尝试更改渲染器平移,绘图的初始范围和缩放限制。一切都没有成功。我认为剩下的唯一选择是覆盖一些绘制方法,但我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

我已经深入研究了AChartEngine的源代码,并发现了在绘制小数字时存在的问题。它是一个静态函数,用于按每个图表绘制标签:

private static double[] computeLabels(final double start, final double end,
final int approxNumLabels) {
// The problem is right here in this condition.
if (Math.abs(start - end) < 0.000001f) {
  return new double[] { start, start, 0 };
}
double s = start;
double e = end;
boolean switched = false;
if (s > e) {
switched = true;
double tmp = s;
s = e;
e = tmp;
}
double xStep = roundUp(Math.abs(s - e) / approxNumLabels);
// Compute x starting point so it is a multiple of xStep.
double xStart = xStep * Math.ceil(s / xStep);
double xEnd = xStep * Math.floor(e / xStep);
if (switched) {
return new double[] { xEnd, xStart, -1.0 * xStep };
}
return new double[] { xStart, xEnd, xStep };
}

因此,此函数基本上采用绘图的开始(最小)和结束(最大)值以及标签的近似数量。然后它舍入值并计算网格的步长(xStep)。如果开始和结束之间的差异太小(0.000001f),那么开始和结束是相同的,步骤是0.这就是为什么它没有在这个小值和任何网格线之间显示任何标签!所以我只需要用较小的数字或变量来改变0.000001f,以便控制网格的分辨率。我希望这可以帮助别人。