如何注释海底联合网格/联合图中的边际图/分布图

时间:2019-04-30 09:59:59

标签: python matplotlib plot annotations seaborn

我没有找到这个方向的任何东西,但是如果我错了,请告诉我。

这个问题是针对seaborn的jointgrid方法和jointplot方法提出的,因为到目前为止,两者都为我提供了相同的基本结果。但是,如果有一种方法可以解决以下问题,那就没问题了。这是到目前为止我的关节图的一个示例:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df=pd.DataFrame(np.random.rand(100,2),columns=['x','y'])

fig=sns.jointplot(x=df['x'],y=df['y'])
fig=fig.plot_joint(plt.scatter)
fig=fig.plot_marginals(sns.distplot,kde=False)

导致

enter image description here

现在,我想用文本注释x和y轴上的分布图形。最后,在每个条形末端的上方,应有一个占该容器总分布的百分比。但是我不知道如何连接。

使用普通distplot,我的代码如下所示。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df=pd.DataFrame(np.random.rand(100,2),columns=['x','y'])

total = float(len(df['x']))
ax=sns.distplot(df['x'],kde=False)
for p in ax.patches:
    height = p.get_height()
    print(p)
    ax.text(p.get_x()+p.get_width()/2.,
            height,
            '{:1.0f}'.format((height/total)*100),
            ha="center")

enter image description here

但是如何在联合图中获得分布图上的注释?

1 个答案:

答案 0 :(得分:0)

我不知道你为什么要两次绘图。您只需要绘制一次,然后提取补丁并使用文本以正确的坐标进行注释

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df=pd.DataFrame(np.random.rand(100,2),columns=['x','y'])
total = float(len(df['x']))

fig=sns.jointplot(x=df['x'],y=df['y'])

for p in fig.ax_marg_x.patches:
    height = p.get_height()
    fig.ax_marg_x.text(p.get_x()+p.get_width()/2.,height,
            '{:1.0f}'.format((height/total)*100), ha="center")

for p in fig.ax_marg_y.patches:
    width = p.get_width()
    fig.ax_marg_y.text(p.get_x()+p.get_width(),p.get_y()+p.get_height()/2., 
            '{:1.0f}'.format((width/total)*100), va="center")    

enter image description here