2013-08-28 11 views
9

Quando si tracciano grafici erratici, Matplotlib non sta seguendo i parametri rc di nessuna linea. Invece, sta tracciando tutti i punti collegati con una linea. Ecco un esempio di lavoro minima:Come si crea una trama erratica in matplotlib usando linestyle = None in rcParams?

import matplotlib.pyplot as plt 

lines = {'linestyle': 'None'} 
plt.rc('lines', **lines) 

plt.errorbar((0, 1), (1, 0), yerr=(0.1, 0.1), marker='o') 

plt.savefig('test.pdf') 
plt.delaxes() 

enter image description here

è l'unica soluzione per impostare in modo esplicito quando si chiama linestyle='None'pyplot.errorbar()?

risposta

24

Questo è un "bug" nelle versioni precedenti di matplotlib (ed è stato fixed per la serie 1.4). Il problema è che in Axes.errorbar c'è un valore predefinito di '-' per fmt, che viene quindi passato alla chiamata a plot che viene utilizzato per disegnare i marcatori e la linea. Poiché una stringa di formato viene passata a plot non viene mai visualizzato il valore predefinito in rcparams.

Si può anche passare in fmt = ''

eb = plt.errorbar(x, y, yerr=.1, fmt='', color='b') 

che farà sì che il valore rcParam['lines.linestlye'] da rispettare. Ho inviato un PR per implementarlo.

Un altro lavoro in giro per questo è quello di rendere l'errorbar in due fasi:

l0, = plt.plot(x,y, marker='o', color='b') 
eb = plt.errorbar(x, y, yerr=.1, fmt=None, color='b') 

Questa è una decisione di progettazione fastidioso, ma cambiare sarebbe una grande rottura api. Si prega di aprire un problema su github a riguardo.

errorbar doc.

Come nota a margine, sembra che la firma della chiamata sia stata modificata per l'ultima volta nel 2007 e che avrebbe dovuto rendere i valori di default errati al blu.

+0

Grazie, ho aperto un problema: https://github.com/matplotlib/matplotlib/issues/2366 – drs

Problemi correlati