C# 如果我知道图表上某个点的Y值,如何获得X值?
如果我知道图表上两个点的x&y值,并且我知道这两个点之间某个位置的y值,那么我如何得到该y值对应的x值 基本上我想得到这个值第一次出现的X位置,在两个原始点之间 Y轴是双精度轴,X轴使用日期时间C# 如果我知道图表上某个点的Y值,如何获得X值?,c#,charts,C#,Charts,如果我知道图表上两个点的x&y值,并且我知道这两个点之间某个位置的y值,那么我如何得到该y值对应的x值 基本上我想得到这个值第一次出现的X位置,在两个原始点之间 Y轴是双精度轴,X轴使用日期时间 很可能正是Y值的数据点在图表上可能不作为精确点存在(它是一个折线图),但是我需要找到精确的X值,恐怕不是离它最近的实际点 对于折线图而言,计算实际上只是简单的插值数学运算 但它仍然需要一些关于图表如何工作的知识 Y值为正常数字,而X值为datetime 这对数学来说不太合适,所以我们希望需要将日期转换为
很可能正是Y值的数据点在图表上可能不作为精确点存在(它是一个折线图),但是我需要找到精确的X值,恐怕不是离它最近的实际点 对于
折线图
而言,计算实际上只是简单的插值数学运算
但它仍然需要一些关于图表如何工作的知识
Y值为正常数字,而X值为datetime
这对数学来说不太合适,所以我们希望需要将日期转换为数字
但是,Chart
在内部通过调用和来实现这一点
好的是,这意味着您在内部添加的DateTime
值存储为一个数字,实际上是一个double
因此,您确实可以直接进行数学运算。下面是一个代码示例,演示如何在同一条线上找到一个点,该点与具有给定y值的两个给定点相同
为了使它看起来更美观,我将计算出的点作为新的数据点
添加到第二个类型系列点
首先,我准备我的图表:
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];
现在,我设置搜索X值的Y值
:
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;
你的问题与数学(插值)有关,而不是与C#和编程有关。只需取给定Y 90%值周围的两组X-Y值,并根据您想要的方法计算X(我认为是线性回归)。是的,但我不知道如何获得Y值的X值(或最接近Y值的实际X值)…如前所述,这是一个数学问题。如果您有以下x-y值:8-80和10-100,并且您想知道x代表90,那么您必须通过回归来计算它(这里的结果显然是9,但在其他情况下可能更难知道;此外,可能没有明确定义的解决方案,您可能必须依赖近似值)。如果你不知道怎么做,做一些研究;正如所说:线性回归应该适合你。但这个问题不在这里。好吧,忽略我的特殊问题,我如何找到一个点的X位置,在两个现有点之间,我知道它的Y值?我告诉过你:通过线性回归(),但这不是编程问题。