1

我正在展示一个包含两个 XYSeries 的漂亮图表。每个系列有 24 个值,绘制在 X 位置 0 到 23。一个系列显示 24 小时内的温度,另一个系列显示同一 24 小时内的降水概率。

当我尝试添加第三个系列来绘制一条垂直线(用作“光标”,以及OnTouchListener)时,问题就来了。这个想法是绘制一个 2 数据点系列,它将呈现为一条垂直线,我可以将其用于我的光标。

我试过这个:

XYSeries cursorLine = new XYSeries("", 2);
cursorLine.add(5, 0);
cursorLine.add(5, 100);
dataset.addSeries(cursorLine);

但这并没有显示任何东西。

我还尝试使用 ACE 的 Dan 在此 Google Group 帖子中建议的两个非常接近的 X 值:

XYSeries cursorLine = new XYSeries("", 2);
cursorLine.add(5.00000, 0);
cursorLine.add(5.00001, 100);
dataset.addSeries(cursorLine);

不幸的是,这会将“光标”线延伸到图表的整个宽度,就像假设它由 24 个数据点组成,而不仅仅是我指定的 2 个。例子:

在此处输入图像描述

我还尝试添加 24 个数据点,其中 23 个的 Y 值为 0,只有一个(在 X 位置 5)的 Y 值为 100。因为这是一个 CUBIC 折线图,所以我的光标在其上显示为“高跟鞋”底部; 其他 23 个点上的光标也在图表底部可见。例子:

显示光标线的后跟

我尝试将相邻的数据点设置为 +/- 0.00001 的 X 值,但这并没有移除脚跟——无论我设置它们与光标位置的水平距离有多近,它们都差不多小。

过去一个小时左右我一直在玩这个,但我无法显示一条简单的垂直线。有任何想法吗?

4

2 回答 2

1

问题似乎是您将 scale = 2 用于垂直线系列。每个比例计算可见数据范围,并尝试完全拟合数据,例如它显示的数据。我建议您将垂直线数据添加到已经存在的比例。

于 2013-03-27T07:57:37.553 回答
0

我终于想出了一些可行的方法,因为它显示了一条看似垂直的直线。感觉真的,真的很脏,但这里是代码:

double x = 5;

for(double i = 0; i < 24; i++)
{
    if(i != x)
    {
        cursorLine.add(i, -100);
    }
    else
    {
        cursorLine.add(x - 0.000001, -100);
        cursorLine.add(x, 200);
        cursorLine.add(x + 0.000001, -100);
    }
}

x可以设置为绘制光标的任何 X 位置。

基本上,我正在做的是将线的底部和顶部绘制到远离图形的地方,以至于可见的部分是直线部分。所以这仍然在底部有“高跟鞋”等。但由于我不允许缩放或平移,这些东西是隐藏的,因此它工作得很好。

如果有人对此有更好的解决方案,那就太好了。我要去洗个冷水澡...

于 2013-03-27T07:12:12.227 回答