2011-09-29 12 views
31

Come può essere modificata la larghezza della linea dei tappini della barra degli errori in Matplotlib?Come impostare la larghezza della linea dei cappucci della barra di errore, in matplotlib?

ho provato il seguente codice:

(_, caplines, _) = matplotlib.pyplot.errorbar(
    data['distance'], data['energy'], yerr=data['energy sigma'], 
    capsize=10, elinewidth=3) 

for capline in caplines: 
    capline.set_linewidth(10) 
    capline.set_color('red') 

pp.draw() 

Purtroppo, questo aggiorna il colore dei tappi, ma fa non aggiornamento larghezza della linea dei tappi!

L'effetto risultante è simile a quello dei "tappi di grasso errore Lines Bar/sottili" nella seguente immagine: enter image description here

Sarebbe bello avere "grasso" tappi a barre, nel caso; come si può fare, in Matplotlib? Disegnare i tappi della barra "manualmente", uno a uno con plot(), funzionerebbe, ma un'alternativa più semplice sarebbe la migliore.

risposta

9

Questo si basa sulla risposta @ di Joaquin, ma un po 'più conciso (se si desidera solo tappi normali di errore senza styling speciale):

distance = [1,3,7,9] 
energy = [10,20,30,40] 
sigma = [1,3,2,5] 

plt.errorbar(distance, 
    energy, 
    sigma, 
    capsize=5, 
    elinewidth=2, 
    markeredgewidth=2) 

enter image description here

29

EOL, sei stato molto vicino ..,

distance = [1,3,7,9] 
energy = [10,20,30,40] 
sigma = [1,3,2,5] 

(_, caps, _) = plt.errorbar(distance, energy, sigma, capsize=20, elinewidth=3) 

for cap in caps: 
    cap.set_color('red') 
    cap.set_markeredgewidth(10) 

plt.show 

enter image description here

set_markeredgewidth imposta la larghezza delle linee cap.

Gli oggetti Matstotlib hanno così tanti attributi che spesso è difficile ricordare quelli giusti per un dato oggetto. IPython è uno strumento molto utile per l'introspezione di matplotlib. L'ho usato per analizzare le proprietà delle linee 2D corrispondenti alle linee di cap error e ho trovato quella e altre proprietà del marker.

Acclamazioni

+0

grazie mille ! Abbiamo usato lo stesso metodo, ma in qualche modo ho perso 'set_markeredgewidth'. :) Quindi, i tappi sono in realtà marcatori, per Matplotlib, al contrario di linee 2D. Mi sembra che l'argomento 'capsize' di' errorbar() 'sia equivalente a' cap.set_markersize() ', quindi il secondo potrebbe essere rimosso, no? – EOL

+0

Mentre stavi commentando, me ne stavo anche rendendo conto. Ho cambiato anche l'immagine. – joaquin

+0

@joaquin, come usi iPython per "introspecting matplotlib". Sembra un'abilità molto utile. – Blink

Problemi correlati