【发布时间】:2013-03-22 08:21:38
【问题描述】:
将 C# 与 .NET 图表结合使用。
我正在尝试绘制几个波形,我希望将鼠标移过图表区域,并让我的工具提示在此 X 值位置显示图表中每个系列的 Y 值。
| at xValue 12 | |
| _ = 3 | |
| * = 2 | * * |
| ________|______________________________*_____ |
| / | * |
| __________*/*********|***************************** |
| * | |
| * | |
|______________________|_____________________________________|
有点像上面这张图。以下是我的代码的一个版本:
void chart1_MouseMove(object sender, MouseEventArgs e)
{
var pos = e.Location;
_point.X = e.Location.X;
_point.Y = e.Location.Y;
try
{
if ((chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X) >= 0) && (chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X) <= max))
{
//Crossair
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(_point, true);
//Tooltips
double xValue = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
double yValue = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
string all_Data_Values = "";
foreach (var series in chart1.Series)
{
all_Data_Values = all_Data_Values + Environment.NewLine + series.Name + ": " + yValue;
}
tooltip.Show("At " + Math.Truncate(xValue * 1000) / 1000 + all_Data_Values, this.chart1, pos.X - 40, pos.Y - 20);
}
}
catch (Exception exception)
{
//
}
}
这就是我所拥有的,现在它只显示我的鼠标光标位置的 Y 值。我尝试了其他代码,试图以某种方式将 x 值映射到 chart1.Series[] 但它也不起作用。
【问题讨论】:
-
考虑使用ZedGraph,还不错。
-
您是否尝试过使用调试器单步执行代码以查看问题所在?
-
对我来说看起来差不多 - 我有类似的代码(除了得到 X 值,我在系列中查找它以获得最接近的实际值)。你有任何例外吗?
max是什么? -
我认为这更多的是我不知道图表结构的哪个部分可以为我提供Yvalue查找能力的情况。唯一错误的是我不知道用什么替换 chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);和。我见过类似 foreach (var series in chart1.Series) { all_Data_Values = all_Data_Values + Environment.NewLine + series.Name + ":" + series.Points[somepoint].YValues[0];但我也不能让它工作,我不知道用什么来索引点。
-
@MatthewWatson 嗨,你是如何查找最接近的实际值的,我想这就是我的意思。