【发布时间】:2021-02-16 13:03:07
【问题描述】:
我想从可以属于多个类别的 pandas 数据帧创建(例如)小提琴图,最好是在一个图中。但是不知道该怎么做——有什么建议吗?非常感谢!
显示单独图的简单示例。这里,x 是主要分组变量,y 是要分组的数据,z 定义成员资格/类别。为简单起见,我只是将z 随机设置为[0,1,2] 的整数。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# dummy data
np.random.seed(12345)
x = np.random.randint(1,6,1000)
y = np.random.randn(1000)
z = np.random.randint(0,3,1000)
df = pd.DataFrame(data=np.array([x,y,z]).T,columns=['x','y','z'])
所有数据(用于验证?):
sns.violinplot(x='x',y='y',data=df)
plt.title('all data')
Violin plot of all data regardless of Z
个别地块:
fig,ax = plt.subplots(nrows=3,ncols=1,sharex=True)
sns.violinplot(x='x',y='y',data=df.loc[df['z']<=0],ax=ax[0])
ax[0].set_title('z <= 0')
sns.violinplot(x='x',y='y',data=df.loc[df['z']<=1],ax=ax[1])
ax[1].set_title('z <= 1')
sns.violinplot(x='x',y='y',data=df.loc[df['z']<=2],ax=ax[2])
ax[2].set_title('z <= 2')
plt.tight_layout();
3 violin plots of data with z<=[0,1,2] respectively
我想要的是一个如下所示的图,除了“z”使用上述图的分组:
plt.figure()
sns.violinplot(x='x',y='y',data=df,hue='z');
Violin plot using 'hue' where only data with z==[0,1,2] is grouped for each color
【问题讨论】:
-
你能澄清一下“除了'z'使用上述情节的分组”是什么意思吗?你想让你的小提琴看起来像
sns.kdeplot(..., multiple='layer')吗?无论如何,以适当的数量缩放所有内容是一个棘手的问题。一个想法可能是创建一个充满sns.kdeplot(..., multiple='layer')的ridge plot。