在python中为多个图包含唯一的最佳拟合线和r2值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中为多个图包含唯一的最佳拟合线和r2值相关的知识,希望对你有一定的参考价值。
我有一个带有多个散点图的图形,当我尝试包含一条最佳拟合线时,它为每个图形提供了相同的线条。这就是现在的样子:
但我希望该线对每个图中的数据点都是唯一的。
这是我到目前为止的代码。我不会包含输入数据的代码,因为它很多,我很确定问题是在for循环中。
import pandas as pd
import matplotlib.pyplot as plt
for i in range(len(uniq)):
plt.subplot(6,6,i+1)
indx = dat['year'] == uniq[i]
plt.scatter(x[indx], y[indx], s=15, color=scalarMap.to_rgba(i), label=uniq[i])
m, b = np.polyfit(x, y, 1)
plt.plot(x, m*x + b, '-')
编辑问题:
如何打印最适合的线条的r2值?到目前为止,我有:
from scipy import stats
def rsquared(x, y):
""" Return R^2 where x and y are array-like."""
slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(x, y)
return r_value**2
for i in range(len(uniq)):
plt.subplot(6,6,i+1)
indx = dat['year'] == uniq[i]
plt.scatter(x[indx], y[indx], s=15, color=scalarMap.to_rgba(i), label=uniq[i])
plt.legend(prop={'size':5})
plt.xticks(size = 10)
plt.yticks(size = 10)
m, b = np.polyfit(x[indx], y[indx], 1)
plt.plot(x, m*x + b, '-')
slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(x[indx], y[indx])
print("r-squared:", r_value**2)
如果我可以在最佳拟合线旁边打印r2值,那也很棒。
答案
对于新编辑,要注释绘图,只需使用matplotlib
的annotate
:
plt.annotate('Corr. coef = %.3f' % r_value**2, (0.8, 0.2), xycoords='axes fraction', ha='center', va='center', size=10)
另一答案
问题由@gereleth解决
for i in range(len(uniq)):
plt.subplot(6,6,i+1)
indx = dat['year'] == uniq[i]
plt.scatter(x[indx], y[indx], s=15, color=scalarMap.to_rgba(i), label=uniq[i])
plt.legend(prop={'size':5})
plt.xticks(size = 10)
plt.yticks(size = 10)
m, b = np.polyfit(x[indx], y[indx], 1)
plt.plot(x, m*x + b, '-')
以上是关于在python中为多个图包含唯一的最佳拟合线和r2值的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用平滑的拟合线和置信椭圆,上三角形中使用散点图对角线最小值和最大值