Verschieben der x-Achse an den Anfang eines Diagramms in matplotlib


111

Basierend auf dieser Frage zu Heatmaps in matplotlib wollte ich die Titel der x-Achse an den oberen Rand des Diagramms verschieben.

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

Das Aufrufen von set_label_position von matplotlib (wie oben angegeben) scheint jedoch nicht den gewünschten Effekt zu haben. Hier ist meine Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Was mache ich falsch?

Antworten:


150

Verwenden

ax.xaxis.tick_top()

um die Häkchen oben im Bild zu platzieren. Der Befehl

ax.set_xlabel('X LABEL')    
ax.xaxis.set_label_position('top') 

wirkt sich auf das Etikett aus, nicht auf die Häkchen.

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

Geben Sie hier die Bildbeschreibung ein


Kannst du mir bitte sagen, wie ich die X-Achse zwischen B und C setzen soll? Ich habe den ganzen Tag versucht, aber keinen Erfolg
DaniPaniz

33

Sie wollen set_ticks_positioneher als set_label_position:

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

Das gibt mir:

Geben Sie hier die Bildbeschreibung ein


Kannst du mir bitte sagen, wie ich die X-Achse zwischen B und C setzen soll? Ich habe den ganzen Tag versucht, aber keinen Erfolg
DaniPaniz

16

tick_params ist sehr nützlich zum Festlegen von Tick-Eigenschaften. Beschriftungen können mit folgenden Elementen nach oben verschoben werden:

    ax.tick_params(labelbottom=False,labeltop=True)

Kwargs sind Boolesche Werte, sollten es also sein Falseund Truefunktionieren ansonsten perfekt!
Milo Wielondek

1

Sie müssen extra massieren, wenn die Zecken (keine Beschriftungen) oben und unten (nicht nur oben) angezeigt werden sollen. Ich kann dies nur mit einer geringfügigen Änderung des Codes von unutbu tun:

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

Ausgabe:

Geben Sie hier die Bildbeschreibung ein


Kannst du mir bitte sagen, wie ich die X-Achse zwischen B und C setzen soll? Ich habe den ganzen Tag versucht, aber keinen Erfolg
DaniPaniz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.