2013-01-18 7 views
60

Basierend auf this question about heatmaps in matplotlib, wollte ich die X-Achsen-Titel an den Anfang der Handlung verschieben.Verschieben der X-Achse an die Spitze eines Plots in Matplotlib

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

jedoch Aufruf matplotlib's set_label_position (wie oben notiert) scheint nicht die gewünschte Wirkung zu haben. Hier ist meine Ausgabe:

enter image description here

Was mache ich falsch?

Antwort

75

Verwenden

ax.xaxis.tick_top() 

am oberen Rand des Bildes die Strichmarkierungen zu platzieren . Der Befehl

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

betrifft das Etikett, nicht die Teilstriche.

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

+0

können Sie mir bitte sagen, wie man die X-Achse zwischen B und C setzen? Ich habe den ganzen Tag versucht, aber kein Erfolg – DaniPaniz

19

Sie wollen set_ticks_position statt set_label_position:

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

Das gibt mir:

enter image description here

+0

Können Sie mir bitte sagen, wie Sie die X-Achse zwischen B und C setzen? Ich habe den ganzen Tag versucht, aber kein Erfolg – DaniPaniz

1

Sie haben einige zusätzliche Massieren zu tun, wenn Sie die Zecken (keine Etiketten) auf der Oberseite zeigen wollen und am Boden (nicht nur die oben). Die einzige Art, wie ich dies tun könnte, ist mit einer geringfügigen Änderung unutbu Code:

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

Ausgang:

enter image description here

+0

können Sie mir bitte sagen, wie man die X-Achse zwischen B und C setzen? Ich habe den ganzen Tag versucht, aber keinen Erfolg – DaniPaniz

8

tick_params ist sehr nützlich für die Einstellung tick Eigenschaften. Etiketten können nach oben verschoben werden mit:

ax.tick_params(labelbottom='off',labeltop='on') 
Verwandte Themen