使用鼠标在数据图表上选择数据间隔
Selecting data intervals on Datachart with Mouse
我使用堆积面积图,我想 select 使用鼠标设置数据点间隔,如下所示。
我知道有些应用程序提供此功能,但是我找不到如何操作。
你能告诉我正确的方法吗?
您需要的字词是DataVisualization.Charting.Cursor
您可以使用以下属性组合:
// a few short references:
ChartArea ca = chart1.ChartAreas[0];
Axis ax = ca.AxisX;
var cx = ca.CursorX;
cx.IsUserEnabled = true; // allow a cursor to be placed
cx.IsUserSelectionEnabled = true; // allow it to be used for selecting
ax.ScaleView.Zoomable = false; // prevent from automatically zooming in
这是选择的第一个和最后一个值:
var x1 = cx.SelectionStart;
var x2 = cx.SelectionEnd;
这是第一个和最后一个 DataPoints
选择的:
var p1 = s.Points.Select(x => x).Where(x => x.XValue >= x1).First();
var p2 = s.Points.Select(x => x).Where(x => x.XValue <= x2).Last();
第一个和最后一个DataPoints
选择的索引:
var i1 = s.Points.IndexOf(p1);
var i2 = s.Points.IndexOf(p2);
现在您可以知道选择了哪些点:
textBox1.Text += (i2 - i1) + " points selected.\r\n\r\n";
for (int i = i1; i < i2; i++)
{
textBox1.Text += i + ". " + chart1.Series[0].Points[i].ToString() + "\r\n";
chart1.Series[0].Points[i].Color = Color.Red;
}
注意:识别起点和终点的代码假定所有DataPoints
都是按递增x值顺序[=38] =].由于您可以按任何顺序添加 DataPoints
,因此当您插入乱序点时它会失败!在这种情况下,您将改为在 List<DataPoint>
中收集选择中的点(对双方进行测试),然后枚举此列表。
我使用堆积面积图,我想 select 使用鼠标设置数据点间隔,如下所示。
我知道有些应用程序提供此功能,但是我找不到如何操作。
你能告诉我正确的方法吗?
您需要的字词是DataVisualization.Charting.Cursor
您可以使用以下属性组合:
// a few short references:
ChartArea ca = chart1.ChartAreas[0];
Axis ax = ca.AxisX;
var cx = ca.CursorX;
cx.IsUserEnabled = true; // allow a cursor to be placed
cx.IsUserSelectionEnabled = true; // allow it to be used for selecting
ax.ScaleView.Zoomable = false; // prevent from automatically zooming in
这是选择的第一个和最后一个值:
var x1 = cx.SelectionStart;
var x2 = cx.SelectionEnd;
这是第一个和最后一个 DataPoints
选择的:
var p1 = s.Points.Select(x => x).Where(x => x.XValue >= x1).First();
var p2 = s.Points.Select(x => x).Where(x => x.XValue <= x2).Last();
第一个和最后一个DataPoints
选择的索引:
var i1 = s.Points.IndexOf(p1);
var i2 = s.Points.IndexOf(p2);
现在您可以知道选择了哪些点:
textBox1.Text += (i2 - i1) + " points selected.\r\n\r\n";
for (int i = i1; i < i2; i++)
{
textBox1.Text += i + ". " + chart1.Series[0].Points[i].ToString() + "\r\n";
chart1.Series[0].Points[i].Color = Color.Red;
}
注意:识别起点和终点的代码假定所有DataPoints
都是按递增x值顺序[=38] =].由于您可以按任何顺序添加 DataPoints
,因此当您插入乱序点时它会失败!在这种情况下,您将改为在 List<DataPoint>
中收集选择中的点(对双方进行测试),然后枚举此列表。