2014-05-14 21 views
7

Ho bisogno di fare un boxplot (in Python e matplotlib) ma non ho i dati "raw" originali. Quello che ho sono valori precalcolati per max, min, media, mediana e IQR (distribuzione normale), ma comunque mi piacerebbe fare un boxplot. Naturalmente tracciare valori anomali non è possibile, ma accanto a questo immagino che tutte le informazioni siano lì.Boxplot Matplotlib utilizzando le statistiche precalcolate (sommario)

Ho cercato dappertutto per trovare una risposta senza successo. Il più vicino che ho ricevuto è la stessa domanda ma per R (che non conosco). Vedi Is it possible to plot a boxplot from previously-calculated statistics easily (in R?)

Qualcuno può mostrarmi come si esegue il boxplot?

Grazie mille!

+1

Questa funzionalità esiste sul branch master e sarà in 1.4 (che deve essere marcato 'presto'). https://github.com/matplotlib/matplotlib/pull/2643 – tacaswell

risposta

6

Nelle versioni precedenti, è necessario farlo manualmente facendo chancing elementi grafico a scatole singolarmente:

Mean=[3.4] #mean 
IQR=[3.0,3.9] #inter quantile range 
CL=[2.0,5.0] #confidence limit 
A=np.random.random(50) 
D=plt.boxplot(A) # a simple case with just one variable to boxplot 
D['medians'][0].set_ydata(Mean) 
D['boxes'][0]._xy[[0,1,4], 1]=IQR[0] 
D['boxes'][0]._xy[[2,3],1]=IQR[1] 
D['whiskers'][0].set_ydata(np.array([IQR[0], CL[0]])) 
D['whiskers'][1].set_ydata(np.array([IQR[1], CL[1]])) 
D['caps'][0].set_ydata(np.array([CL[0], CL[0]])) 
D['caps'][1].set_ydata(np.array([CL[1], CL[1]])) 
_=plt.ylim(np.array(CL)+[-0.1*np.ptp(CL), 0.1*np.ptp(CL)]) #reset the limit 

enter image description here

+0

Molte grazie! Funziona davvero bene. –

7

Grazie al commento di @tacaswell sono stato in grado di trovare la documentazione richiesta e venire con un esempio usando Matplotlib 1.4.3. Tuttavia, questo esempio non scala automaticamente la figura alla dimensione corretta.

import matplotlib.pyplot as plt 

item = {} 

item["label"] = 'box' # not required 
item["mean"] = 5 # not required 
item["med"] = 5.5 
item["q1"] = 3.5 
item["q3"] = 7.5 
#item["cilo"] = 5.3 # not required 
#item["cihi"] = 5.7 # not required 
item["whislo"] = 2.0 # required 
item["whishi"] = 8.0 # required 
item["fliers"] = [] # required if showfliers=True 

stats = [item] 

fig, axes = plt.subplots(1, 1) 
axes.bxp(stats) 
axes.set_title('Default') 
y_axis = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
y_values = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] 
plt.yticks(y_axis, y_values) 

collegamenti relativi alla documentazione:

Problemi correlati