Python 使用多标签分类应用和绘制数据

Python 使用多标签分类应用和绘制数据,python,pandas,seaborn,Python,Pandas,Seaborn,我想从pandas数据框中创建(例如)ViolinProtts,它可以属于多个类别,理想情况下是在一个图形中。不知道如何实现这一点——有什么建议吗?非常感谢 一个简单的例子显示了单独的绘图。这里,x是主要的分组变量,y是要分组的数据,z定义成员资格/类别。为简单起见,我刚刚将z随机设置为一个整数[0,1,2] import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # dummy data np.ran

我想从pandas数据框中创建(例如)ViolinProtts,它可以属于多个类别,理想情况下是在一个图形中。不知道如何实现这一点——有什么建议吗?非常感谢

一个简单的例子显示了单独的绘图。这里,
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'])
所有数据(用于验证?):

个别地块:

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();

您可以创建一个新的数据框,其中包含要按色调显示的
z
选项:

将numpy作为np导入#v 1.19.2
作为pd#v 1.1.3进口大熊猫
进口seaborn作为sns#v 0.11.0
#创建示例数据集
np.random.seed(12345)
x=np.random.randint(1,61000)
y=np.random.randn(1000)
z=np.random.randint(0,31000)
df=pd.DataFrame(data=np.array([x,y,z]).T,columns=['x','y','z']))
#创建包含“z”变量选择的新数据框

df0=df.loc[df['z']你能澄清一下“除了‘z’使用上述绘图的分组之外”是什么意思吗?你想让你的小提琴看起来类似吗?不管怎样,用适当的数量缩放所有东西都是一个棘手的问题。一个想法可能是创建一个充满
sns.kdeplot(…,multiple='layer')
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();
plt.figure()
sns.violinplot(x='x',y='y',data=df,hue='z');
dfnew.head()

#     z selection    x          y    z
#  0       z <= 0  3.0  -0.670121  0.0
#  1       z <= 0  3.0  -2.016201  0.0
#  2       z <= 0  2.0  -0.266742  0.0
#  3       z <= 0  2.0  -0.406730  0.0
#  4       z <= 0  2.0  -0.243281  0.0
ax = sns.violinplot(x='x', y='y', data=dfnew, hue='z selection')
ax.figure.set_size_inches(9, 6)