Déplacement de l'axe des abscisses vers le haut d'une placette en matplotlib
basé sur cette question à propos des heatmaps dans matplotlib , je voulais déplacer les titres de l'axe des x vers le haut de l'intrigue.
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 la position de matplotlib (telle que notée ci-dessus) ne semble pas avoir l'effet désiré. Voici ma sortie:
Qu'est-ce que je fais de mal?
4 réponses
Utiliser
ax.xaxis.tick_top()
pour placer les marques de graduation en haut de l'image. La commande
ax.set_xlabel('X LABEL')
ax.xaxis.set_label_position('top')
affecte l'étiquette, pas les marques de graduation.
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()
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:
tick_params est très utile pour définir les propriétés tick. Les étiquettes peuvent être déplacées vers le haut avec:
ax.tick_params(labelbottom='off',labeltop='on')
vous devez faire un peu de massage supplémentaire si vous voulez que les tiques (pas les étiquettes) apparaissent sur le haut et en bas (pas seulement le haut). La seule façon de le faire est d'apporter un changement mineur au 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: