如何在使用matplotlib.scatter绘制的点阵图中添加趋势线?
matplotlib.scatter
6ojccjat1#
如here所述在numpy的帮助下,我们可以计算例如线性拟合。
# plot the data itself pylab.plot(x,y,'o') # calc the trendline z = numpy.polyfit(x, y, 1) p = numpy.poly1d(z) pylab.plot(x,p(x),"r--") # the line equation: print "y=%.6fx+(%.6f)"%(z[0],z[1])
hxzsmxv22#
散点图的趋势线是简单的回归线。seaborn库有一个函数(regplot),它可以在一次函数调用中完成。您甚至可以绘制置信区间(使用ci=;我在下面的图中关闭了它)。
seaborn
regplot
ci=
import seaborn as sns sns.regplot(x=x_data, y=y_data, ci=False, line_kws={'color':'red'});
上述调用为以下数据集生成以下图:
import numpy as np x_data, y_data = np.repeat(np.linspace(0, 9, 100)[None,:], 2, axis=0) + np.random.rand(2, 100)*2
如果使用子区,也可以传递ax=。
ax=
import matplotlib.pyplot as plt fig, axs = plt.subplots(1,2, figsize=(12,3)) axs[0].scatter(x_data, y_data) sns.regplot(x=x_data, y=y_data, ci=False, line_kws={'color':'red'}, ax=axs[1]);
简单回归系数具有闭合形式解,因此您也可以显式求解它们,并绘制回归线沿着散点图。如果x_data和y_data是列表:
x_data
y_data
x_mean = sum(x_data) / len(x_data) y_mean = sum(y_data) / len(y_data) covar = sum((xi - x_mean) * (yi - y_mean) for xi, yi in zip(x_data, y_data)) x_var = sum((xi - x_mean)**2 for xi in x_data) beta = covar / x_var alpha = y_mean - beta * x_mean y_hat = [alpha + beta * xi for xi in x_data]
如果x_data和y_data是numpy数组:
x_mean, y_mean = np.mean(x_data), np.mean(y_data) beta = np.sum((x_data - x_mean) * (y_data - y_mean)) / np.sum((x_data - x_mean)**2) alpha = y_mean - beta * x_mean y_hat = alpha + beta * x_data
然后只画两个图:
import matplotlib.pyplot as plt plt.plot(x_data, y_data, 'bo', x_data, y_hat, "r-");
2条答案
按热度按时间6ojccjat1#
如here所述
在numpy的帮助下,我们可以计算例如线性拟合。
hxzsmxv22#
散点图的趋势线是简单的回归线。
seaborn
库有一个函数(regplot
),它可以在一次函数调用中完成。您甚至可以绘制置信区间(使用ci=
;我在下面的图中关闭了它)。上述调用为以下数据集生成以下图:
如果使用子区,也可以传递
ax=
。简单回归系数具有闭合形式解,因此您也可以显式求解它们,并绘制回归线沿着散点图。
如果
x_data
和y_data
是列表:如果
x_data
和y_data
是numpy数组:然后只画两个图: