2013-06-03 16 views
7

Attualmente sto utilizzando logscale per avere maggiori possibilità di tracciare i miei dati. Tuttavia, i miei dati comprendono anche valori zero. So che questi valori zero non funzioneranno su logscale poiché log (0) non è definito.Grafici di scalabilità con valori zero in matplotlib

Così ad esempio,

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot([0,1,2],[10,10,100],marker='o',linestyle='-') 
ax.set_yscale('log') 
ax.set_xscale('log') 

omette completamente il valore zero. Questo comportamento è accettabile? Almeno dovrebbe esserci qualche tipo di avvertimento. L'ho riconosciuto solo per caso. C'è forse anche un modo per tracciare dati a valore zero in logscale?

Grazie!

P.S .: Spero che questo si adatti allo stackoverflow. Non ho trovato una mailing list di matplotlib.

+1

MPL mailing list -> http://sourceforge.net/mail/?group_id=80706 – tacaswell

+2

possibile duplicato del [scala logaritmica Matplotlib con valore zero] (http://stackoverflow.com/questions/16382917/matplotlib-logarithmic-scale-with-zero-value) –

+0

La domanda precedente ha due possibili soluzioni per questo. –

risposta

17

È più semplice utilizzare un grafico "symlog" per questo scopo. L'intervallo vicino a 0 sarà su una scala lineare, quindi 0 può essere visualizzato.

import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 
ax.plot([0,1,2],[10,10,100],marker='o',linestyle='-') 
ax.set_yscale('symlog') 
ax.set_xscale('symlog') 
plt.show() 

enter image description here

Symlog fissa un piccolo intervallo vicino a zero (sia sopra che sotto) per utilizzare una scala lineare. Ciò consente alle cose di superare 0 senza far esplodere log(x) (o andare a -inf, piuttosto).

C'è un bel confronto visivo come un SO risposta qui: https://stackoverflow.com/a/3513150/325565

+0

Grande risposta. Grazie per quello. Potresti elaborare ciò che symlog sta esattamente facendo? – fsociety

+1

Sicuro! Vedi gli aggiornamenti. Ci sono anche alcuni esempi nella galleria matplotlib (ad es. Http://matplotlib.org/examples/pylab_examples/symlog_demo.html), ma non sono chiari come la risposta SO a cui mi sono collegato. –

+0

Super utile. Grazie. – Newb

Problemi correlati