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


111

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, l'appel de set_label_position de matplotlib (comme indiqué ci-dessus) ne semble pas avoir l'effet souhaité. Voici ma sortie:

entrez la description de l'image ici

Qu'est-ce que je fais mal?

Réponses:


152

Utilisation

ax.xaxis.tick_top()

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

entrez la description de l'image ici


pouvez-vous s'il vous plaît me dire comment mettre l'axe X entre B et C? J'ai essayé toute la journée mais sans succès
DaniPaniz

33

Vous voulez set_ticks_positionplutôt que set_label_position:

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

Cela me donne:

entrez la description de l'image ici


pouvez-vous s'il vous plaît me dire comment mettre l'axe X entre B et C? J'ai essayé toute la journée mais sans succès
DaniPaniz

16

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=False,labeltop=True)

Les kwargs sont des booléens donc devraient être Falseet Truerespectivement, sinon fonctionne parfaitement!
Milo Wielondek

1

Vous devez faire un massage supplémentaire si vous voulez que les tiques (pas les étiquettes) apparaissent en haut et en bas (pas seulement en haut). La seule façon dont je pourrais faire cela est avec une modification mineure du 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()

Production:

entrez la description de l'image ici


pouvez-vous s'il vous plaît me dire comment mettre l'axe X entre B et C? J'ai essayé toute la journée mais sans succès
DaniPaniz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.