2014-05-04 9 views
9

posso disegnare un grafico a scatole dai dati:Ottenere valori utilizzati in grafico a scatole, utilizzando Python e matplotlib

import numpy as np 
import matplotlib.pyplot as plt 

data = np.random.rand(100) 
plt.boxplot(data) 

Poi, la casella spazierà dal 25 percentile al 75 ° percentile, e il baffo varieranno da il valore più piccolo al valore più grande tra (25 ° percentile - 1,5 * IQR, 75 ° percentile + 1,5 * IQR), dove l'IQR indica l'intervallo interquartile. (Ovviamente, il valore 1.5 è personalizzabile).

Ora voglio conoscere i valori utilizzati nel boxplot, vale a dire il mediano, il quartile superiore e inferiore, il punto finale del baffo superiore e il punto finale del baffo inferiore. Mentre il primo tre è facile da ottenere utilizzando np.median() e np.percentile(), il punto finale delle basette richiederà una codifica dettagliata:

median = np.median(data) 
upper_quartile = np.percentile(data, 75) 
lower_quartile = np.percentile(data, 25) 

iqr = upper_quartile - lower_quartile 
upper_whisker = data[data<=upper_quartile+1.5*iqr].max() 
lower_whisker = data[data>=lower_quartile-1.5*iqr].min() 

mi chiedevo, mentre questo è accettabile, ci sarebbe un modo più ordinato per fare questo? Sembra che i valori dovrebbero essere pronti per essere estratti dal boxplot, come già disegnato.

Grazie!

risposta

10

Perché vuoi farlo? quello che stai facendo è già piuttosto diretto.

Sì, se si desidera recuperarli per la trama, quando la trama è già stata creata, utilizzare semplicemente il metodo get_ydata().

B=plt.boxplot(data) 
[item.get_ydata() for item in B['whiskers']] 

Si restituisce un array di forma (2,) per ogni baffi, il secondo elemento è il valore che vogliamo:

[item.get_ydata()[0] for item in B['whiskers']] 
+0

grazie mille! Mi sono effettivamente reso conto che sto facendo una domanda "avida" una volta che ho scritto il frammento di codice di esempio - non così verboso come pensavo. Tuttavia, è bello sapere che il get_ydata() può fare la stessa cosa! –

Problemi correlati