2017-11-02 3 views
0

私は、この質問はバイオリンプロットだけでなく、同様のプロットやその他のデータフレームの状況にも適用されますが、いくつかのバイオリンプロットを含むmatplotlibの図を持っています。私は現在、自分のコードを実行し、それはカテゴリーごとに1つのバイオリンプロットと、数字を吐き出す。コードは、次のようになります。boxplotまたは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を含めますカテゴリの行0のデータをデータフレームの新しい行にコピーすることなく、これを行うエレガントな方法はありますか?

+1

ない答えが、あなたは[ 'ROW0'] DF 'pd.cut(ことに注意する必要があり、 [0、250、500、1000])は、ビニングを大幅に簡素化します。 – fuglede

+0

...そこにはもちろん「750」もあります。 – fuglede

答えて

0

おそらく、このようなものは、あなたが探しているものを行います。

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

関連する問題