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:

enter image description here

Qu'est-ce que je fais de mal?

72
demandé sur Community 2013-01-18 23:28:44

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

enter image description here

87
répondu unutbu 2013-03-12 22:05:28

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

23
répondu Lev Levitsky 2013-01-18 19:42:31

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')
11
répondu wSmit 2013-10-03 08:40:18

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:

enter image description here

1
répondu user1420304 2013-05-08 01:45:54