在boxplot或violinp中绘制所有类别

2024-06-02 06:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个matplotlib图形,上面有一些violinplots(尽管这个问题适用于任何类似的plot或其他数据帧情况,而不仅仅是violinplots)。我现在运行我的代码,它显示出一个数字,每个类别有一个violinplot。代码如下所示:

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

df = pd.DataFrame(data=np.random.random_integers(low=0,high=1000,size=(100,1)),
                  columns=['row0']
                  )

df['r0_range']='temp' #create a new column 'r0_range', give it a preliminary value
#make assignments depending on value of row0
df['r0_range'][df['row0']<=250]='[0,250]'
df['r0_range'][df['row0']>250]='(250,500]'
df['r0_range'][df['row0']>500]='(500,750]'
df['r0_range'][df['row0']>750]='(750,1000]'

fig1, ax1 = plt.subplots(1,1)

ax1 = sns.violinplot(data=df, x='r0_range', y='row0', inner=None, ax=ax1)

会弹出以下内容:

violin plots with four violins

我想在我的图中包含第五个violinplot,它表示所有类别中所有数据的所有。有没有一种优雅的方法可以做到这一点,而不必将row0数据复制到dataframe的新行中?在


Tags: 数据代码importdfmatplotlibasnprange
1条回答
网友
1楼 · 发布于 2024-06-02 06:19:21

也许这样的东西可以满足您的需求:

df = pd.DataFrame(data=np.random.randint(0, 1001, 100), columns=['row0'])
g = df.groupby(pd.cut(df['row0'], [0, 250, 500, 750, 1000]))
for name, data in g.groups.items():
    df[name] = df.loc[data]['row0']
sns.violinplot(data=df, inner=None, ax=ax1)

enter image description here

相关问题 更多 >