C# 在给定y轴截距和斜率的图表中绘制直线

C# 在给定y轴截距和斜率的图表中绘制直线,c#,plot,charts,line,intercept,C#,Plot,Charts,Line,Intercept,我编写了一个程序,根据用户提供的几个输入值计算最佳拟合线(截距/斜率)。我已经绘制了每个单独的值,但是不确定根据斜率和y截距绘制线的代码 这是坡度: double m = ( aXY.Sum() - ((levels.Sum() * scores.Sum()) / 5)) / (newaX.Sum() - ((powLevels) / 5)); 拦截 double b = meanY - (m * meanX); 点的标绘 for (int i = 0; i <

我编写了一个程序,根据用户提供的几个输入值计算最佳拟合线(截距/斜率)。我已经绘制了每个单独的值,但是不确定根据斜率和y截距绘制线的代码

这是坡度:

double m = ( aXY.Sum() - 
           ((levels.Sum() * scores.Sum()) / 5)) / (newaX.Sum() - ((powLevels) / 5));
拦截

double b = meanY - (m * meanX);
点的标绘

for (int i = 0; i < levels.GetLength(0); i++)
{
    chart1.Series["Series1"].Points
                            .AddXY(levels.GetValue(i), scores.ToArray().GetValue(i));
}
for(int i=0;i

有什么想法吗?我决不是一个专家,要做到这一点需要相当多的实验。

假设您的数据是使用
ChartType.Points
绘制为散点图,添加线条最简单的方法是使用
ChartType.line
添加一个额外的
系列
,并在那里设置两个点

图表上创建一条线的方法还有其他方法,如绘制它或创建一条
线性注释
,但它们要复杂得多

以下是一个实施方案:

请注意,在为最适合的系列创建系列之后,您要查找的只是最后两行:

private void button1_Click(object sender, EventArgs e)
{
    // create TWO series!
    chart1.Series.Clear();
    chart1.Series.Add("Data");
    chart1.Series.Add("Line of best fit");
    chart1.Series[0].ChartType = SeriesChartType.Point;
    chart1.Series[1].ChartType = SeriesChartType.Line;

    List<int> levels = new List<int>() { 8, 2, 11, 6, 5, 4, 12, 9, 6, 1};
    List<int> scores = new List<int>() { 3, 10, 3, 6, 8, 12, 1, 4, 9, 14};

    double minX = levels.ToList().Min();
    double maxX = levels.ToList().Max();
    double meanX = 1f * levels.Sum() / levels.Count;
    double meanY = 1f * scores.Sum() / scores.Count;

    double st = 0;
    double sb = 0;
    for (int i = 0; i < levels.Count; i++ )
    {
        st += (levels[i] - meanX) * (scores[i] - meanY);
        sb += (levels[i] - meanX) * (levels[i] - meanX);
    }
    double slope = st / sb;
    double y0 = meanY - slope * meanX;  // y-intercept or y-crossing

    for (int i = 0; i < levels.Count; i++)
    {
            chart1.Series[0].Points.AddXY(levels[i], scores[i]);
    }
    // this is the part that creates the line of best fit:
    chart1.Series[1].Points.AddXY(minX, y0 + minX * slope);
    chart1.Series[1].Points.AddXY(maxX, y0 + maxX * slope);
}
在这种情况下,您可能需要设置图表中显示的最小x值,以防止其包括
-1
,可能如下所示:

 chart1.ChartAreas[0].AxisX.Minimum = minX - 1;

你能发布问题中提到的代码吗?假设你对斜率
m
和截距
b
的计算是正确的,直线方程是
y=mx+b
,那么就用直线方程为你想要的每个
x
计算
y
,并将结果添加到图表中,就像您在发布代码的循环中所做的那样:
Points.AddXY(x,y)
 chart1.ChartAreas[0].AxisX.Minimum = minX - 1;