2017-04-25 34 views
1

我想使用兩個數據集製作boxplot。每組都是一個浮動列表。 A和B是兩個數據的例子設置Python Matplotlib Box繪製兩個並排的數據集

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) 

我想爲A和B的盒狀圖顯示彼此相鄰,而不是在彼此之上。另外,我希望不同的x值和更薄的盒子之間有更多的差距。我的代碼在下面,它產生的情節也是如此(現在的代碼將A置於B之上)。感謝您的幫助。

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

望着箱線圖的文檔,我們發現它有一個positions參數,它可以被用來設置箱線圖的位置。您需要提供一個列表或數組,其中包含要繪製箱形圖的儘可能多的元素。

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