2017-12-29 32 views
0

seabornやその他のライブラリを使用せずに、matplotlibでボックスプロットをグループ化する方法はありますか?グループ化ボックスプロットmatplotlib

次の例では、x軸に沿ってブロックを配置し、条件によってグループ化された値をプロットします(16個のボックスがあります)。海軍の色相論が成し遂げたように

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

blocks = 4 
conditions = 4 
ndatapoints = blocks * conditions 

blockcol = np.repeat(list(range(1, conditions+1)), blocks) 
concol = np.repeat(np.arange(1, conditions+1, 1), blocks) 
trialcol = np.arange(1, ndatapoints+1, 1) 
valcol = np.random.normal(0, 1, ndatapoints) 

raw_data = {'blocks': np.repeat(list(range(1, conditions+1)), blocks), 
      'condition': list(range(1, conditions+1))*blocks, 
      'trial': np.arange(1, ndatapoints+1, 1), 
      'value': np.random.normal(0, 1, ndatapoints)} 

df = pd.DataFrame(raw_data) 
df 

    blocks condition trial  value 
0  1   1  1 1.306146 
1  1   2  2 -0.024201 
2  1   3  3 -0.374561 
3  1   4  4 -0.093366 
4  2   1  5 -0.548427 
5  2   2  6 -1.205077 
6  2   3  7 0.617165 
7  2   4  8 -0.239830 
8  3   1  9 -0.876789 
9  3   2  10 0.656436 
10  3   3  11 -0.471325 
11  3   4  12 -1.465787 
12  4   1  13 -0.495308 
13  4   2  14 -0.266914 
14  4   3  15 -0.305884 
15  4   4  16 0.546730 

例は見つかりませんでした。

+0

を、それはあなたが望む内容を正確に把握するのは難しいのですが、 'seaborn.factorplot'は、あなたが望むように聞こえる何を実現。 –

+0

それは本当です - それはまさに私が思いついたものです。しかし、私は海底なしでこれを作る方法を望んでいた。 – fffrost

+1

matplotlibのbox plot関数は、 'pos' argをとります。これは、x軸を横切る各ボックスプロットの位置のシーケンスです。それを自分で計算する必要があります。 –

答えて

0

私はあなただけの要因プロットしたいと思う:画像なし

import numpy 
import pandas 
import seaborn 

blocks = 3 
conditions = 4 
trials = 12 
ndatapoints = blocks * conditions * trials 

blockcol = list(range(1, blocks + 1)) * (conditions * trials) 
concol = list(range(1, conditions + 1)) * (blocks * trials) 
trialcol = list(range(1, trials + 1)) * (blocks * conditions) 
valcol = numpy.random.normal(0, 1, ndatapoints) 

fg = pandas.DataFrame({ 
    'blocks': blockcol, 
    'condition': concol, 
    'trial': trialcol, 
    'value': valcol 
}).pipe(
    (seaborn.factorplot, 'data'), 
    x='blocks', y='value', hue='condition', 
    kind='box' 
) 

enter image description here

関連する問題