2

我正在制作一个包含 4 个系列的图表:x 轴是日期,y 轴从 -10 缩放到 10。每个数据点(无论系列如何)都在不同的日子,尽管系列确实代表不同测量。

我已经创建了从 SQL 查询填充的图表,并获得了一条垂直线与光标一起水平移动。我接下来想做的(但已经很难过)是将垂直线的位置与数据点(无论哪个系列)进行比较,并在视觉上突出显示该点(并提取 x/y 值以进行挖掘图表信息)。

我对如何逐步完成不同系列有一些想法,但我不知道如何在我的滚动垂直线周围创建一个日期时间窗口(大约半天)——如何将该垂直线与时间序列中的数据点。也许我只是没有正确考虑这个问题?

这是我的鼠标移动代码,但我还没有为有问题的部分做任何工作:

private void calCheckChart_MouseMove(object sender, MouseEventArgs e) {
    // Set style of cursor over chart, including dotted vertical line

    calCheckChart.ChartAreas[0].CursorX.IsUserEnabled = true;
    calCheckChart.ChartAreas[0].CursorX.Interval = 0;
    calCheckChart.ChartAreas[0].CursorX.LineColor = Color.Black;
    calCheckChart.ChartAreas[0].CursorX.LineWidth = 1;
    calCheckChart.ChartAreas[0].CursorX.LineDashStyle = ChartDashStyle.Dot;

    // Move the vertical line with cursor
    Point cursorDate = new Point(e.X);
    calCheckChart.ChartAreas[0].CursorX.SetCursorPixelPosition(cursorDate, true);

    // ...
}

感谢您花时间查看此内容。非常感谢任何见解。

4

1 回答 1

1

我想到了!从我在前面的代码中中断的地方开始,我首先确定了我的 CursorX 位置值输出的是什么,即 OADate。一旦我知道了这一点,我就为我的每个系列构建了一个 foreach 语句(如下所示):首先初始化数据点 (pt) 的视觉属性,然后检查数据点是否落在以 0.9 天为中心的间隔内光标 (CursorX-0.4 < pt < CursorX+0.5),如果是,则更改标记类型/大小。然后,我对图表上的 4 个系列中的每一个都使用了相同的 foreach(并附上 if 语句),只更改了系列的索引。

因此,这会在系列之间跳到所选范围内的任何数据点,并且如果它们应该落在同一日期,也会选择多个系列中的多个数据点。

          // Scan through series and find the nearest datapoint within a given time interval
            foreach (DataPoint pt in calCheckChart.Series[0].Points)
            {
                // Initialize point attributes.
                pt.MarkerStyle = MarkerStyle.None;
                // Check if the cursor's x-value is the near a point in series, and if so highlight it
                if (pt.XValue > calCheckChart.ChartAreas[0].CursorX.Position - 0.4 && pt.XValue < calCheckChart.ChartAreas[0].CursorX.Position + 0.5)
                {
                    pt.MarkerStyle = MarkerStyle.Circle;
                    pt.MarkerSize = 8;
                    // toolStripStatusLabel1.Text = pt.YValues[0].ToString();
                }
            }

 // ...
于 2013-08-15T23:39:31.300 回答