2017-04-25 6 views
1

2つのデータセットを使用してボックスプロットを作成したいと思います。各セットはフロートのリストです。 A及びBは、2つのデータの一例であるA及びBは、互いに、互いに隣接しない表示するために、私は箱ひげ図を希望Python Matplotlib Box 2つのデータセットを並べて表示する

A = [] 
B = [] 

for i in xrange(10): 
    l = [random.random() for i in xrange(100)] 
    m = [random.random() for i in xrange(100)] 
    A.append(l) 
    B.append(m) 

を設定します。また、私は、異なるx値とより薄いボックスとの間のギャップをより大きくしたいと思います。私のコードは下にあり、プロットも生成しています(現在のコードはAをBの上に置きます)。助けてくれてありがとう。我々はそれが箱ひげ図の位置を設定するために使用することができますpositions引数を持っていることがわかり箱ひげ図のドキュメントを見てみると

def draw_plot(data, edge_color, fill_color): 
    bp = ax.boxplot(data, patch_artist=True) 
    for element in ['boxes', 'whiskers', 'fliers', 'medians', 'caps']: 
     plt.setp(bp[element], color=edge_color) 
    plt.xticks(xrange(11)) 
    for patch in bp['boxes']: 
     patch.set(facecolor=fill_color) 

fig, ax = plt.subplots() 
draw_plot(A, "tomato", "white") 
draw_plot(B, "skyblue", "white") 
plt.savefig('sample_box.png', bbox_inches='tight') 
plt.close() 

enter image description here

答えて

3

。ボックス・プロットを描画するのと同じ数の要素をリストまたは配列に指定する必要があります。

import numpy as np; np.random.seed(1) 
import matplotlib.pyplot as plt 

A = np.random.rand(100,10) 
B = np.random.rand(100,10) 

def draw_plot(data, offset,edge_color, fill_color): 
    pos = np.arange(data.shape[1])+offset 
    bp = ax.boxplot(data, positions= pos, widths=0.3, patch_artist=True, manage_xticks=False) 
    for element in ['boxes', 'whiskers', 'fliers', 'medians', 'caps']: 
     plt.setp(bp[element], color=edge_color) 
    for patch in bp['boxes']: 
     patch.set(facecolor=fill_color) 

fig, ax = plt.subplots() 
draw_plot(A, -0.2, "tomato", "white") 
draw_plot(B, +0.2,"skyblue", "white") 
plt.xticks(xrange(10)) 
plt.savefig(__file__+'.png', bbox_inches='tight') 
plt.show() 
plt.close() 

enter image description here

関連する問題