2013-08-31 21 views
6

Vorrei mostrare solo le parti pertinenti sull'asse x in un grafico generato da matplotlib usando la libreria di wrapper pyplot.Come impostare un intervallo di intervalli dell'asse usando Matplotlib o altre librerie in python

Domanda: In che modo la trama può essere forzata a tagliare determinate posizioni dell'asse, passando tuple di intervalli di intervalli, che definiscono gli intervalli per l'asse x da tracciare. Idealmente, il taglio dovrebbe essere indicato con un segno verticale a doppia onda sovrapposto all'asse x.

Utilizzando xlim and axis era inutile, in quanto consente solo all'inizio e alla fine del l'asse x da impostare ma senza intervalli nel mezzo:

enter image description here Specificamente, per la trama sopra, la x- la regione dell'asse tra 60 to 90 non deve essere mostrata e devono essere aggiunti i segni di taglio/trama discontinua.

import matplotlib.pyplot as pyplot 
x1, x2 = 0, 50 
y1, y2 = 0, 100 
pyplot.xlim([x1, x2]) 
#alternatively 
pyplot.axis([x1, x2, y1, y2]) 

L'utilizzo di matplotlib non è un requisito.

Aggiornamento/Riepilogo:

  • Viktor punti a this source, utilizzando subplots -splitting e due lotti di emulare una trama a linea spezzata in matplotlib/pyplot.

enter image description here

+1

@SaulloCastro Grazie per il puntatore. Quindi questo problema sembra irrisolto in matplotlib allora? Tuttavia questa domanda comprende i puntatori ad altre librerie di plotting. Ho dimenticato di aggiornare il titolo dell'oggetto ... –

+0

Qui trovo frammenti di altre librerie di plottaggio qui ... [Qual è la migliore libreria di plottaggio per Python?] (Http://stackoverflow.com/questions/1120542/what -is-the-best-plotting-library-for-python) –

risposta

-1

Se si utilizza il matplotlib.pyplot.xticks è possibile controllare la posizione e il valore di tutti i marchi.

This answer dovrebbe mostrarvi come farlo.

+0

Grazie, ma nello specifico, non voglio che l'area dell'asse x tra 60-90 sia mostrata. Le zecche non sono di primaria importanza ... –

+0

@LoSauer se imposti i tick in modo che 60-90 non siano presenti e ometti i corrispondenti dati sull'asse y (0 nel tuo caso) questo sarà il risultato. Consulta il link che ti ha inviato Saullo. Sembra che a questa domanda sia già stata data risposta. –

+0

I collegamenti puntano a soluzioni alternative usando una tabella di 'sottotrameta' con due grafici. Forse esiste una libreria di wrapper astratta più alta in matplotlib disponibile in Python rispetto a pyplot? –

4

si ha un esempio di l'asse spezzato negli esempi matplotlib: Broken Axis

Nel tuo esempio, sottotrame sarebbe solo condividere l'asse y al posto degli assi x, e limiti sarebbe impostata sull'asse x.

Esempio con un grafico a barre:

fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True) 
x = [1, 2, 3, 4, 5, 51, 52, 53, 54, 55] 
y = [4, 3, 4, 5, 4, 3, 4, 5, 6, 4] 
ax1.bar(x, y) 
ax2.bar(x, y) 

# Fix the axis 
ax1.spines['right'].set_visible(False) 
ax1.yaxis.tick_left() 
ax2.spines['left'].set_visible(False) 
ax2.yaxis.tick_right() 
ax2.tick_params(labelleft='off') 
ax1.set_xlim(1, 6) 
ax2.set_xlim(51, 56) 
+0

[Le risposte di solo collegamento non sono buone] (http://meta.stackexchange.com/a/8259/223330), poiché i collegamenti potrebbero marcire. – hooy

+0

@nordev Aggiunto un esempio. –