Python 使用多标签分类应用和绘制数据
我想从pandas数据框中创建(例如)ViolinProtts,它可以属于多个类别,理想情况下是在一个图形中。不知道如何实现这一点——有什么建议吗?非常感谢 一个简单的例子显示了单独的绘图。这里,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
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)