// create a new scatter plot with blue circles as symbols LineItem scatterPlot = myPane.AddCurve("", list1, Color.Blue, SymbolType.Circle); scatterPlot.Line.IsVisible = false;想对散点图进行曲线拟合,请写出C#代码
时间: 2024-02-14 12:09:36 浏览: 119
可以使用ZedGraph库来进行曲线拟合,以下是一个简单的示例代码:
```csharp
// 创建散点图
LineItem scatterPlot = myPane.AddCurve("", list1, Color.Blue, SymbolType.Circle);
scatterPlot.Line.IsVisible = false;
// 进行曲线拟合
double[] x = list1.Select(p => p.X).ToArray();
double[] y = list1.Select(p => p.Y).ToArray();
int n = x.Length;
double sx = x.Sum();
double sy = y.Sum();
double sxx = x.Select(xi => xi * xi).Sum();
double sxy = x.Select((xi, i) => xi * y[i]).Sum();
double a = (n * sxy - sx * sy) / (n * sxx - sx * sx);
double b = (sy - a * sx) / n;
// 创建拟合曲线
PointPairList curvePoints = new PointPairList();
for (int i = 0; i < n; i++)
{
double xi = x[i];
double yi = a * xi + b;
curvePoints.Add(xi, yi);
}
LineItem curve = myPane.AddCurve("", curvePoints, Color.Red, SymbolType.None);
```
其中,`list1`是一个`PointPairList`类型的变量,表示散点图的数据;`myPane`是一个`GraphPane`类型的变量,表示图表的绘图区域。拟合的直线方程为`y = a * x + b`,其中`a`和`b`为拟合的系数,通过最小二乘法求得。拟合曲线使用红色实线表示。
阅读全文