在图表中绘制一条直线,已知y截距和斜率。

3
我已经编写了一个程序,可以根据用户提供的几个输入值计算出最佳拟合直线(截距/斜率)。我已经绘制了每个单独值,但是不确定如何编写代码来绘制给定斜率和y-截距的直线。
这是斜率:
double m = ( aXY.Sum() - 
           ((levels.Sum() * scores.Sum()) / 5)) / (newaX.Sum() - ((powLevels) / 5));

The Intercept

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));
}

有什么想法吗?我绝不是专家,达到这一步需要进行大量的实验。


请您能否发布问题中提到的代码? - greenmarker
1
假设您计算斜率 m 和截距 b 的公式正确,那么直线方程为 y = mx + b。因此,只需使用直线方程为每个所需的 x 计算 y,并像在您发布的代码循环中一样将结果添加到图表中:Points.AddXY(x, y) - jsanalytics
1个回答

0
假设您的数据已经通过使用ChartType.Points绘制成散点图,最简单的添加线的方法是添加一个ChartType.Line额外Series并在那里设置两个点。

还有其他创建Chart上线条的方法,例如绘制或创建LineAnnotation,但它们要复杂得多

按照此示例的步骤进行实现:

enter image description here

请注意,在创建“最佳拟合线”系列之后,您要寻找的只是最后两行
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);
}

如果你想要,你可以在 y 轴上添加第一行点:
 chart1.Series[1].Points.AddXY(0, y0 );

在这种情况下,您可能希望设置图表中显示的最小 x 值,以防止其包括 -1,可以像这样进行设置:
 chart1.ChartAreas[0].AxisX.Minimum = minX - 1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接