gpt4 book ai didi

c# - 根据光标位置访问折线图的 Y 值

转载 作者:行者123 更新时间:2023-11-30 17:35:59 24 4
gpt4 key购买 nike

我是图表新手,有一个看起来像这样的折线图。

https://s15.postimg.org/vzl71faqj/Untitled.png

垂直线是光标所在的位置,通过 mousemove 而不是 mouseclick 进行更新。

如标题所示,我想做的是访问垂直线和“数据线”相交点的 Y 值。

我试过了 - Get Y value of series from the X Cursor position where a ChartArea is clicked on但除非我遗漏了一些它根本不起作用的东西,否则它会根据您使用的数据点返回系列中的第一个或最后一个值。

我试过 hittestresult,它似乎只有在你“触摸”数据线本身时才有效。

有什么想法吗?

最佳答案

由于您没有向我们展示任何代码并且没有回答我的问题,我只能假设您的图表没有有效的,即数字 x 值。

这意味着 x 值都是 0 并且不能用于任何事情:既不能用于设置缩放范围,也不能用于格式化轴或其他标签,也不能用于查找 DataPoints 在 x 位置。

这可以称为“隐式索引”。结果类似于显式索引图表,这是将 SeriesIsXValueIndexed 设置为 true 的结果:DataPoints 排成一行并且都显示在相同的距离。

通常不是人们想要的,我真的建议您通过添加 DataPoints 来修复它,而不是像这样:

for (int i = 0; i < count; i++) chart1.Series[0].Points.AddY(someYValue);

但也许是这样的:

for (int i = 0; i < count; i++) chart1.Series[0].Points.AddXY(i, someYValue);

然后 linked answer会工作得很好。

但这里只是为了展示您可以的解决方法是如何在索引图表中找到两个最接近的点。

请注意,它使用了一个函数(实际上是两个)来计算内部绘图位置的像素矩形。你可以找到他们herehere ..:

private void chart1_MouseMove(object sender, MouseEventArgs e)
{
ChartArea ca = chart1.ChartAreas[0];
Series S = chart1.Series[0];
RectangleF rf = InnerPlotPositionClientRectangle(chart1, ca);
float px = (float)( (e.X - rf.X) * S.Points.Count / rf.Width );

int p0 = (int)px; // previous point
int p1 = p0 + 1; // next point

if (p0 >= 0 && p0 < S.Points.Count)
Console.WriteLine( "DataPoint # " + p0 + " has a y-value of " +
S.Points[p0].YValues[0].ToString("0.00"));
//..
}

它会起作用,但您真的应该更正添加数据点的方式!

关于c# - 根据光标位置访问折线图的 Y 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40467094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com