Spostamento dell'asse x all'inizio di un grafico in matplotlib


111

Sulla base di questa domanda sulle mappe di calore in matplotlib , volevo spostare i titoli dell'asse x all'inizio del grafico .

import matplotlib.pyplot as plt
import numpy as np
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = np.random.rand(4,4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=plt.cm.Blues)

# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)

# want a more natural, table-like display
ax.invert_yaxis()
ax.xaxis.set_label_position('top') # <-- This doesn't work!

ax.set_xticklabels(row_labels, minor=False)
ax.set_yticklabels(column_labels, minor=False)
plt.show()

Tuttavia, chiamare set_label_position di matplotlib (come indicato sopra) non sembra avere l'effetto desiderato. Ecco il mio output:

inserisci qui la descrizione dell'immagine

Che cosa sto facendo di sbagliato?

Risposte:


152

Uso

ax.xaxis.tick_top()

per posizionare i segni di graduazione nella parte superiore dell'immagine. Il comando

ax.set_xlabel('X LABEL')    
ax.xaxis.set_label_position('top') 

influisce sull'etichetta, non sui segni di graduazione.

import matplotlib.pyplot as plt
import numpy as np
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = np.random.rand(4, 4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=plt.cm.Blues)

# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False)

# want a more natural, table-like display
ax.invert_yaxis()
ax.xaxis.tick_top()

ax.set_xticklabels(column_labels, minor=False)
ax.set_yticklabels(row_labels, minor=False)
plt.show()

inserisci qui la descrizione dell'immagine


puoi dirmi come mettere l'asse X tra B e C? Ho provato tutto il giorno ma senza successo
DaniPaniz

33

Vuoi set_ticks_positionpiuttosto che set_label_position:

ax.xaxis.set_ticks_position('top') # the rest is the same

Questo mi dà:

inserisci qui la descrizione dell'immagine


puoi dirmi come mettere l'asse X tra B e C? Ho provato tutto il giorno ma senza successo
DaniPaniz

16

tick_params è molto utile per impostare le proprietà del tick. Le etichette possono essere spostate in alto con:

    ax.tick_params(labelbottom=False,labeltop=True)

I kwarg sono booleani quindi dovrebbero essere Falsee Truerispettivamente, altrimenti funziona perfettamente!
Milo Wielondek

1

Devi fare qualche massaggio extra se vuoi che i segni di spunta (non le etichette) vengano visualizzati in alto e in basso (non solo in alto). L'unico modo in cui potrei farlo è con una piccola modifica al codice di unutbu:

import matplotlib.pyplot as plt
import numpy as np
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = np.random.rand(4, 4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=plt.cm.Blues)

# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False)

# want a more natural, table-like display
ax.invert_yaxis()
ax.xaxis.tick_top()
ax.xaxis.set_ticks_position('both') # THIS IS THE ONLY CHANGE

ax.set_xticklabels(column_labels, minor=False)
ax.set_yticklabels(row_labels, minor=False)
plt.show()

Produzione:

inserisci qui la descrizione dell'immagine


puoi dirmi come mettere l'asse X tra B e C? Ho provato tutto il giorno ma senza successo
DaniPaniz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.