Python Seaborn jointplot在图表上未显示相关系数和p值

时间:2018-08-31 15:05:25

标签: python matplotlib seaborn

我试图用下面的图绘制联合图,从样本中我看到它应该在图表上显示相关系数和p值。但是,它没有显示我的那些值。有什么建议吗?谢谢。

.AsEnumerable()

7 个答案:

答案 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)])

enter image description here

答案 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)