2017-12-29 61 views
0

seaborn 또는 다른 라이브러리를 사용하지 않고 matplotlib에 상자 그림을 그룹화하는 방법이 있습니까?그룹화 boxplots matplotlib

다음에서는 x 축을 따라 블록을 만들고 상태별로 그룹화 한 값을 표시하려고합니다 (따라서 16 개의 상자가 있습니다). seaborn의 색조 주장이 달성하는 것과 마찬가지입니다.

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