140 votes

Déplacement de l'axe des x vers le haut d'un graphique en matplotlib

Sur la base de cette question sur les cartes thermiques dans matplotlib Je voulais déplacer les titres de l'axe des x vers le haut du graphique.

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()

Cependant, appeler set_label_position de matplotlib (comme indiqué ci-dessus) ne semble pas avoir l'effet désiré. Voici mon résultat :

enter image description here

Qu'est-ce que je fais de mal ?

205voto

unutbu Points 222216

Utilisez

ax.xaxis.tick_top()

pour placer les repères en haut de l'image. La commande

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

affecte l'étiquette, pas les coches.

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

45voto

Lev Levitsky Points 25303

Vous voulez set_ticks_position plutôt que set_label_position :

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

Cela me donne :

enter image description here

21voto

wSmit Points 21

tick_params est très utile pour définir les propriétés des tics. Les étiquettes peuvent être déplacées vers le haut avec :

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

1voto

user1420304 Points 11

Vous devez faire un peu plus d'efforts si vous voulez que les points (et non les étiquettes) apparaissent en haut et en bas (et pas seulement en haut). La seule façon de le faire est de modifier légèrement le code d'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()

Sortie :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X