我试图用下面的图绘制联合图,从样本中我看到它应该在图表上显示相关系数和p值。但是,它没有显示我的那些值。有什么建议吗?谢谢。
.AsEnumerable()
答案 0 :(得分:9)
我最终使用下面的图来绘制
import seaborn as sns
import scipy.stats as stats
sns.set(style="darkgrid", color_codes=True)
j = sns.jointplot('Num of A', ' Ratio B', data = data_df, kind='reg', height=8)
j.annotate(stats.pearsonr)
plt.show()
答案 1 :(得分:7)
在 seaborn >=0.11 版本中,jointgrid 注释被删除,因此您将看不到 pearsonr 值。
如果需要显示,一种方法是计算pearsonr并将其作为图例放入jointplot中。
例如:
import scipy.stats as stats
graph = sns.jointplot(data=df,x='x', y='y')
r, p = stats.pearsonr(x, y)
# if you choose to write your own legend, then you should adjust the properties then
phantom, = graph.ax_joint.plot([], [], linestyle="", alpha=0)
# here graph is not a ax but a joint grid, so we access the axis through ax_joint method
graph.ax_joint.legend([phantom],['r={:f}, p={:f}'.format(r,p)])
答案 2 :(得分:2)
Seaborn v0.9.0(2018年7月)已弃用此功能:
不推荐使用JointGrid的统计注释组件。该方法仍然可用,但将在以后的版本中删除。 (source)
答案 3 :(得分:2)
Seaborn提供了一个有助于解决此问题的参数
import seaborn as sns
import scipy.stats as stat
from warnings import filterwarnings
#this will help ignore warnings
filterwarnings ('ignore')
#jointplot
sns.jointplot('x', 'y', data=data,
stat_func=stat.pearsonr)
答案 4 :(得分:1)
您现在可以忽略警告。 另外,我们可以直接在图上调用annotate方法,而无需先创建对象。
import seaborn as sns
import scipy.stats as stats
from warnings import filterwarnings
filterwarnings('ignore')
sns.set(style="darkgrid", color_codes=True)
sns.jointplot('Num of A', ' Ratio B', data = data_df, kind='reg', height=8).annotate(stats.pearsonr)
plt.show()
答案 5 :(得分:0)
在我的情况下,看起来'stat_func'和'annotate(stats.pearonr)'都不适用于seaborn 0.11.0。
答案 6 :(得分:0)
如果您想在 seaborn 中使用注释,一种方法是执行以下操作:
import seaborn as sns
from matplotlib import pyplot as plt
from scipy import stats
sns.set(style="darkgrid", color_codes=True)
j = sns.jointplot('Num of A', ' Ratio B', data = data_df, kind='reg', height=8)
r, p = stats.pearsonr(data_df['Num of A'], data_used['Ratio B'])
# j.ax_joint allows me to access the matplotlib ax object, along with its
# associated methods and attributes
j.ax_joint.annotate('r = {:.2f} '.format(r), xy=(.1, .1), xycoords=ax.transAxes)
j.ax_joint.annotate('p = {:.2e}'.format(p), xy=(.4, .1), xycoords=ax.transAxes)