给定 y 截距和斜率在图表中绘制一条线 [英] Plotting a line in a chart given the y intercept and slope

查看:20
本文介绍了给定 y 截距和斜率在图表中绘制一条线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

这是斜率:

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

拦截

double b = meanY - (m * meanX);

绘制点

for (int i = 0; i 

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

解决方案

假设您的数据使用 ChartType.Points 绘制为散点图,添加线的最简单方法是添加一个 extra SeriesChartType.Line 并在那里设置两个点.

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

按照

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

private void button1_Click(object sender, EventArgs e){//创建两个系列!chart1.Series.Clear();chart1.Series.Add("数据");chart1.Series.Add("最佳拟合线");chart1.Series[0].ChartType = SeriesChartType.Point;chart1.Series[1].ChartType = SeriesChartType.Line;列表级别 = new List() { 8, 2, 11, 6, 5, 4, 12, 9, 6, 1};列表分数 = new List() { 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 * score.Sum()/score.Count;双 st = 0;双 sb = 0;for (int i = 0; i 

如果你愿意,你可以在 y 轴上添加第一条线点:

 chart1.Series[1].Points.AddXY(0, y0);

在这种情况下,您可能希望设置图表中显示的最小 x 值以防止其包含 -1,可能如下所示:

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

I've written a program that calculates the line of best fit (intercept/slope) given several input values from the user. I've plotted each of the individual values, however unsure of the code to plot the line given the slope and y-intercept.

This is the slope:

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

The Intercept

double b = meanY - (m * meanX);

Plotting of points

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

Any ideas? I am by no means an expert and getting this far took a fair bit of experimenting..

解决方案

Assuming your data are plotted as a scattergraph using the ChartType.Points the simplest way to add a line is to add one extra Series with ChartType.Line and set two points there.

There are other ways to create a line on a Chart, like drawing it or creating a LineAnnotation, but they are much more complicated!

Following this example to the letter here is an implementation:

Note that after creating the series for the line of best fit the thing you were looking for are just the last two lines..:

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

If you want to you can add the first line point right at the y-axis:

 chart1.Series[1].Points.AddXY(0, y0 );

In this case you may want to set the minimum x-values shown in the chart to prevent it from including -1, maybe like this:

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

这篇关于给定 y 截距和斜率在图表中绘制一条线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆