2013-01-18 15 views
60

Na podstawie this question about heatmaps in matplotlib, chciałem przenieść tytuły osi X na początek wykresu.Przesunięcie osi x do początku wykresu w 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() 

Jednak wywołanie matplotlib's set_label_position (jak zanotowana powyżej) nie wydają się mieć pożądany efekt. Oto moje wyjście:

enter image description here

Co robię źle?

Odpowiedz

75

Korzystając

ax.xaxis.tick_top() 

umieszczenie znaków podziałki w górnej części obrazu . Komenda ma wpływ na etykietę, a nie na znaki podziałki.

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

czy możesz mi powiedzieć, jak ustawić oś X między B i C? Próbowałem przez cały dzień, ale bez powodzenia – DaniPaniz

19

Chcesz set_ticks_position zamiast set_label_position:

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

To daje mi:

enter image description here

+0

czy możesz mi powiedzieć, jak ustawić oś X między B i C? Próbowałem przez cały dzień, ale bez powodzenia – DaniPaniz

1

Musisz zrobić kilka dodatkowych wystartować jeśli chcesz kleszcze (nie etykiety), aby pokazać się na górze i na dole (nie tylko u góry). Jedyny sposób mogę to zrobić za pomocą drobnej zmiany kodu unutbu za:

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

wyjściowa:

enter image description here

+0

czy możesz mi powiedzieć, jak ustawić oś X między B i C? Próbowałem przez cały dzień, ale bez powodzenia – DaniPaniz

8

tick_params jest bardzo przydatny do ustawiania właściwości kleszcza. Etykiety można przenieść na górę za pomocą:

ax.tick_params(labelbottom='off',labeltop='on') 
Powiązane problemy