如果我知道图表上某点的Y值,我该如何得到X值?

时间:2015-12-15 09:16:32

标签: c# charts

如果我知道x& y图表上2个点的值,我知道这2个点之间的位置的Y值,我如何得到Y值对应的X值?

基本上我想在两个原始点之间获得该值首先出现的X位置。

Y轴是双精度数,X轴使用DateTimes。

很可能正好是Y值的数据点可能不是图表上的精确点(它是折线图)但是,我需要找到确切的X值,不是最近的实际点,我害怕。

1 个答案:

答案 0 :(得分:0)

对于LineChart,计算实际上只是插值数学。

但它仍然需要了解Chart的工作原理。

您有Y值的正常数字,但DateTimesX-Values

这对数学运算不太好,所以我们期望将日期转换为数字。

但是Chart在内部使用FromOADateToOADate()进行调用。

好处是,这意味着您在内部添加为DateTime值的内容将存储为数字,实际上是double

所以你确实可以做数直接。下面是一个代码示例,演示如何在同一行上找到具有给定y值的两个给定点的点。

enter image description here

为了让它看起来不错,我将计算出的点作为新的DataPoint添加到第二个类型Point的系列中。

首先,我准备好我的图表:

chart1.ChartAreas.Clear();
chart1.Series.Clear();
ChartArea CA = chart1.ChartAreas.Add("CA");
Series S1 = chart1.Series.Add("S1");
Series S2 = chart1.Series.Add("S2");
S1.ChartType = SeriesChartType.Line;
S2.ChartType = SeriesChartType.Point;
S1.Points.AddXY(new DateTime(2015, 12, 10), 10);
S1.Points.AddXY(new DateTime(2015, 12, 31), 31);

DataPoint dp1 = S1.Points[0];
DataPoint dp2 = S1.Points[1];

现在我设置Y-Value,我搜索X-Value

double y3 = 24;   // X-Mas ;-)

现在我计算增量和坡度。当然,这可以一个一个地完成,但为了清楚起见我拼出来了:

double deltaY = dp2.YValues[0] - dp1.YValues[0];
double deltaX = dp2.XValue - dp1.XValue;
double slope = deltaY / deltaX;

最后,我计算你正在寻找的X值:

double x3 = dp1.XValue + (y3 - dp1.YValues[0]) * slope;

现在我可以证明新点确实位于前两点之间的界限上:

S2.Points.AddXY(x3, y3);
S2.Points[0].Color = Color.Red;