Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我知道图表上某个点的Y值,如何获得X值?_C#_Charts - Fatal编程技术网

C# 如果我知道图表上某个点的Y值,如何获得X值?

C# 如果我知道图表上某个点的Y值,如何获得X值?,c#,charts,C#,Charts,如果我知道图表上两个点的x&y值,并且我知道这两个点之间某个位置的y值,那么我如何得到该y值对应的x值 基本上我想得到这个值第一次出现的X位置,在两个原始点之间 Y轴是双精度轴,X轴使用日期时间 很可能正是Y值的数据点在图表上可能不作为精确点存在(它是一个折线图),但是我需要找到精确的X值,恐怕不是离它最近的实际点 对于折线图而言,计算实际上只是简单的插值数学运算 但它仍然需要一些关于图表如何工作的知识 Y值为正常数字,而X值为datetime 这对数学来说不太合适,所以我们希望需要将日期转换为

如果我知道图表上两个点的x&y值,并且我知道这两个点之间某个位置的y值,那么我如何得到该y值对应的x值

基本上我想得到这个值第一次出现的X位置,在两个原始点之间

Y轴是双精度轴,X轴使用日期时间


很可能正是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值?我告诉过你:通过线性回归(),但这不是编程问题。