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
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)
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")
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')
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).
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). –