我没有找到这个方向的任何东西,但是如果我错了,请告诉我。
这个问题是针对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)
导致
现在,我想用文本注释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")
但是如何在联合图中获得分布图上的注释?
答案 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")