2013-01-18 13 views
60

In base a this question about heatmaps in matplotlib, volevo spostare i titoli dell'asse x nella parte superiore del grafico.Spostamento dell'asse x nella parte superiore di un grafico in matplotlib

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, chiamando matplotlib's set_label_position (come notata sopra) non sembra avere l'effetto desiderato. Ecco la mia uscita:

enter image description here

Che cosa sto facendo di sbagliato?

risposta

75

Usa

ax.xaxis.tick_top() 

per posizionare i segni di graduazione in cima l'immagine . Il comando

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

influenza l'etichetta, non i 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() 

enter image description here

+0

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

19

Volete set_ticks_position piuttosto che set_label_position:

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

Questo mi dà:

enter image description here

+0

puoi dirmi come si può posizionare l'asse X tra B e C? Ho provato tutto il giorno ma non ho avuto successo – DaniPaniz

1

Hai avuto modo di fare qualche massaggio extra se si desidera che le zecche (non etichette) di presentarsi in alto e in basso (non solo la parte superiore). L'unico modo ho potuto fare questo è con una piccola modifica al codice del 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() 

uscita:

enter image description here

+0

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

8

tick_params è molto utile per l'impostazione delle proprietà di zecche. Le etichette possono essere spostate in alto con:

ax.tick_params(labelbottom='off',labeltop='on') 
Problemi correlati