web-dev-qa-db-fra.com

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

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:

enter image description here

Qu'est-ce que je fais mal?

94
Jason Sundram

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

enter image description here

121
unutbu

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:

enter image description here

29
Lev Levitsky

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')
14
wSmit

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:

enter image description here

1
user1420304