Attualmente ho un codice che chiama più volte matplotlib.pylab.plot
per visualizzare più serie di dati sullo stesso schermo, e Matplotlib ridimensiona ciascuno al minimo e al massimo globali, considerando tutti i grafici. C'è un modo per chiedergli di ridimensionare ogni trama in modo indipendente, al minimo e al massimo di quella particolare trama?Più grafici sovrapposti con ridimensionamento indipendente in Matplotlib
risposta
Non c'è alcun supporto diretto per questo, ma ecco qualche codice da un mailing list posting che illlustrates due assi verticali indipendenti:
x=arange(10)
y1=sin(x)
y2=10*cos(x)
rect=[0.1,0.1,0.8,0.8]
a1=axes(rect)
a1.yaxis.tick_left()
plot(x,y1)
ylabel('axis 1')
xlabel('x')
a2=axes(rect,frameon=False)
a2.yaxis.tick_right()
plot(x,y2)
a2.yaxis.set_label_position('right')
ylabel('axis 2')
a2.set_xticks([])
In questo modo si crea un unico appezzamento (add_subplot (1,1,1)) e limitare la scala sugli assi y.
myFig = figure()
myPlot = self.figure.add_subplot(1,1,1)
myPlot.plot([1,2,3,4,5], [5,4,3,2,1], '+r')
myPlot.set_ylim(1,5) # Limit y-axes min 1, max 5
Ho bisogno di qualcosa di simile ma volevo creare un esempio che è possibile copiare e incollare nella shell interattiva e dare un'occhiata a questo. Qui è per quelli di voi che richiedono una soluzione di lavoro:
from numpy import arange
from math import sin, cos
import matplotlib.pyplot as plt
x = arange(10)
y1 = [sin(i) for i in x]
y2 = [10*cos(i) for i in x]
rect = [0.1, 0.1, 0.8, 0.8]
a1 = plt.axes(rect) # Create subplot, rect = [left, bottom, width, height] in normalized (0, 1) units
a1.yaxis.tick_left() # Use ticks only on left side of plot
plt.plot(x, y1)
plt.ylabel('axis 1')
plt.xlabel('x')
a2 = plt.axes(rect, frameon=False) # frameon, if False, suppress drawing the figure frame
a2.yaxis.tick_right()
plt.plot(x, y2)
a2.yaxis.set_label_position('right')
plt.ylabel('axis 2')
a2.set_xticks([])
plt.show()
testato e funziona in Python 2.7.6, 1.8.1 NumPy, matpotlib 1.3.1. Continuerò a giocarci, cercando un modo pulito per lavorare con la sovrapposizione di grafici di date. Pubblicherò le mie scoperte.
Ecco una soluzione che utilizza i grafici della data e penso che sia la soluzione più ottimizzata utilizzando twinx() una mano corta per aggiungere un secondo asse y.
import matplotlib.pyplot as plt
import matplotlib.dates as md
import datetime
import numpy
numpy.random.seed(0)
t = md.drange(datetime.datetime(2012, 11, 1),
datetime.datetime(2014, 4, 01),
datetime.timedelta(hours=1)) # takes start, end, delta
x1 = numpy.cumsum(numpy.random.random(len(t)) - 0.5) * 40000
x2 = numpy.cumsum(numpy.random.random(len(t)) - 0.5) * 0.002
fig = plt.figure()
ax1 = fig.add_subplot(111)
fig.suptitle('a title', fontsize=14)
fig.autofmt_xdate()
plt.ylabel('axis 1')
plt.xlabel('dates')
ax2 = ax1.twinx()
ax1.plot_date(t, x1, 'b-', alpha=.65)
ax2.plot_date(t, x2, 'r-', alpha=.65)
plt.ylabel('axis 2')
plt.show()
Dalla documentazione, matplotlib.pyplot.twinx (ax = None) fare un secondo asse che condivide l'asse x. I nuovi assi si sovrappongono all'asse (o agli assi correnti se ax è None). I tick per ax2 verranno posizionati a destra e l'istanza ax2 verrà restituita. Più here.
- 1. Visualizzazione di grafici a dispersione con punti sovrapposti in matplotlib
- 2. Due grafici a barre in matplotlib sovrapposti nel modo sbagliato
- 3. Grafici candlestick intraday con Matplotlib
- 4. i grafici in stile "circos" con matplotlib?
- 5. Sovrapposizione 10 grafici di densità in R con colore proporzionale al numero di grafici sovrapposti
- 6. matplotlib: sovrapposizione di grafici con scale diverse?
- 7. Interrompere i grafici sovrapposti di pylab?
- 8. matplotlib: allineamento delle etichette dell'asse y nei grafici a dispersione sovrapposti
- 9. Dare ai grafici un sottotitolo in matplotlib
- 10. Accelerazione di grafici scatter matplotlib
- 11. Come mostrare i grafici matplotlib in python
- 12. etichette del plotter di contorno matplotlib assi sovrapposti
- 13. Come riutilizzare i grafici in matplotlib?
- 14. Grafici di scalabilità con valori zero in matplotlib
- 15. Matlab più lotti sovrapposti
- 16. Grafici a barre ordinati con panda/matplotlib o seaborn
- 17. Annotazioni/testo sovrapposti matlockli
- 18. Più grafici ggplot2 con trama
- 19. Ridimensionamento di grafici brillanti all'altezza della finestra
- 20. Come rendere trasparenti i grafici a dispersione Matplotlib come gruppo?
- 21. matplotlib etichette mostrando x-tick sovrapposti nonostante gli sforzi
- 22. PyCharm non aprirà correttamente i grafici matplotlib
- 23. matplotlib grande set di colori per grafici
- 24. Python Matplotlib sovrappone i grafici a dispersione
- 25. Traccia grafici sullo schermo utilizzando l'API matplotlib
- 26. Nascondere il testo dell'asse nei grafici matplotlib
- 27. tracciare una curva uniforme nei grafici matplotlib
- 28. Come esportare i grafici da matplotlib con sfondo trasparente?
- 29. Titolo figura con più colori in matplotlib
- 30. Come impostare tight_layout per i grafici matplotlib dopo lo show()
L'ambito della domanda originale sembra essere stato per N piuttosto che per i diagrammi in scala 2 - quando provo questo con 3 o più, muore (usando a2, a3 e così via per istanze di assi aggiuntivi). Qualche idea su come ottenere un sacco di set di dati che vengono visualizzati correttamente in scala in una sola volta? – tehwalrus