我正在处理包含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);
// ...
}
感谢您抽出宝贵的时间查看此内容。任何见解都将不胜感激。
最佳答案
我想到了!从我在前面的代码中停下来的地方,我首先确定了我的CursorX位置值正在输出的是OADate。知道这一点后,我为每个系列构建了一个foreach语句(如下所述):首先初始化数据点的可视属性(pt),然后检查数据点是否落在以0.9为中心的0.9天间隔内光标(CursorX-0.4
因此,这会在系列之间跳转到落入所选范围内的任何数据点,如果它们应该在同一日期,则还会在多个系列中选择多个数据点。
// 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();
}
}
// ...
关于c# - 根据日期时间间隔(半天之内)在图表上突出显示数据点C#-Visual Studio 2008,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18219758/