2015-10-25 161 views
6

我需要創建一個帶有一些運行結果的箱形圖 - 對於這些運行中的每一個,我都有最小輸出,最大輸出,平均輸出和標準偏差。這意味着我需要16個帶有標籤的箱子。使用最小值,最大值,平均值和標準差的箱形圖

examples我跑到目前爲止繪製一個數字分佈,但在我的情況下,這是不可行的。

有什麼辦法可以在Python(Matplotlib)/ R中做到這一點?

+2

的箱線圖描繪位數。你不能從你擁有的東西中獲得這些。我建議不要用平均值,最小值,最大值和最大值來創建箱形圖的派生值,因爲它只會讓熟悉箱形圖的人感到困惑。我會將點的平均值,最小值,最大值(可能帶有不同的符號或大小)以及sd描述爲誤差線。 – Roland

回答

12

以上@Roland給出的答案很重要:一個盒子圖表顯示根本不同的數量,如果使用您擁有的數量進行類似的繪圖,則可能會使用戶感到困惑。我可能會使用堆疊的錯誤欄圖來表示這些信息。例如:

import matplotlib.pyplot as plt 
import numpy as np 

# construct some data like what you have: 
x = np.random.randn(100, 8) 
mins = x.min(0) 
maxes = x.max(0) 
means = x.mean(0) 
std = x.std(0) 

# create stacked errorbars: 
plt.errorbar(np.arange(8), means, std, fmt='ok', lw=3) 
plt.errorbar(np.arange(8), means, [means - mins, maxes - means], 
      fmt='.k', ecolor='gray', lw=1) 
plt.xlim(-1, 8) 

enter image description here

+0

爲什麼在'errorbar()'('np.arange(8)')的第一個參數中使用numpy是否有目的?我認爲matplotlib內部使用列表(列表的列表)。如果我錯了,請糾正我。 – Ralf

+0

matplotlib在內部使用numpy數組,並將任何輸入轉換爲numpy數組:例如''type(plt.plot(range(10),range(10))[0] .get_xdata())''returns''' numpy.ndarray'' – jakevdp

相關問題