Sur la base de cette question sur les cartes thermiques dans matplotlib , je souhaitais déplacer les titres de l'axe des x en 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 souhaité. Voici ma sortie:
Qu'est-ce que je fais mal?
Utilisation
ax.xaxis.tick_top()
placer les graduations en haut de l’image. La commande
ax.set_xlabel('X LABEL')
ax.xaxis.set_label_position('top')
affecte l'étiquette, pas les graduations.
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()
Tu veux set_ticks_position
plutôt que set_label_position
:
ax.xaxis.set_ticks_position('top') # the rest is the same
Cela me donne:
tick_params est très utile pour définir les propriétés des ticks. Les étiquettes peuvent être déplacées vers le haut avec:
ax.tick_params(labelbottom='off',labeltop='on')
Vous devez faire un peu plus de massage si vous voulez que les ticks (pas les étiquettes) apparaissent en haut et en bas (pas seulement le haut). La seule façon de le faire est de modifier légèrement le code de 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: