2012-11-21 14 views
7

I grafici R impostano automaticamente i limiti x e y per mettere un po 'di spazio tra i dati e gli assi. Mi stavo chiedendo se esiste un modo per matplotlib per fare lo stesso automaticamente. In caso contrario, c'è una buona formula o 'regola pratica' per come R stabilisce i suoi limiti di asse?Buffer dell'asse dati in stile R in matplotlib

risposta

6

Guardando ?par per il parametro xaxs:

Lo stile dell'asse calcolo dell'intervallo da utilizzare per l'asse x. I valori possibili sono "r", "i", "e", "s", "d". Gli stili sono generalmente controllati dalla gamma di dati o xlim, se dati.
Lo stile "r" (normale) estende prima l'intervallo di dati del 4% a ciascuna estremità e quindi trova un asse con belle etichette che rientrano nell'intervallo esteso.

Quindi, se proviamo questo fuori:

par(xaxs="r")  #The default 
plot(1:10, 1:10) 

enter image description here

Noi in realtà in grado di dimostrare che si tratta di +/- 4% del campo su ogni lato:

abline(v=1-(diff(range(1:10)))*0.04, col="red") 
abline(v=10+(diff(range(1:10)))*0.04, col="red") 

enter image description here

7

In matplotlib è possibile raggiungere questo impostando il margins

import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 
ax.margins(0.04) 
data = range(1, 11) 
ax.plot(data, 'wo') 
plt.savefig('margins.png') 

margins

Tuttavia, non sembra che ci sia un parametro rc per ottenere questo automaticamente.

Aggiorna 4/2013

La possibilità di aggiungere un param rc per i margini è ora in matplotlib master (Grazie @tcaswell). Quindi dovrebbe funzionare con la prossima versione di matplotlib (la versione corrente è 1.2.1).

+0

Questa è la risposta giusta. Non sono sicuro del motivo per cui è stata scelta l'altra risposta dal momento che la domanda si poneva sul matplotlib di Python e non sulla trama di R() (R era appena usato come confronto). –