Di chuyển trục x lên đầu ô trong matplotlib


111

Dựa trên câu hỏi này về bản đồ nhiệt trong matplotlib , tôi muốn di chuyển tiêu đề trục x lên đầu cốt truyện.

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

Tuy nhiên, việc gọi set_label_position của matplotlib (như đã ghi ở trên) dường như không có tác dụng mong muốn. Đây là đầu ra của tôi:

nhập mô tả hình ảnh ở đây

Tôi đang làm gì sai?

Câu trả lời:


150

Sử dụng

ax.xaxis.tick_top()

để đặt dấu tích ở đầu hình ảnh. Lệnh

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

ảnh hưởng đến nhãn, không phải dấu tích.

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

nhập mô tả hình ảnh ở đây


bạn có thể vui lòng cho tôi biết làm thế nào để đặt trục X giữa B và C? Tôi đã cố gắng cả ngày nhưng không thành công
DaniPaniz

33

Bạn muốn set_ticks_positionhơn là set_label_position:

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

Điều này cho tôi:

nhập mô tả hình ảnh ở đây


bạn có thể vui lòng cho tôi biết làm thế nào để đặt trục X giữa B và C? Tôi đã cố gắng cả ngày nhưng không thành công
DaniPaniz

16

tick_params rất hữu ích để thiết lập thuộc tính đánh dấu. Các nhãn có thể được chuyển lên trên cùng bằng:

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

Kwargs là boolean nên FalseTruetương ứng, nếu không thì hoạt động hoàn hảo!
Milo Wielondek

1

Bạn phải xoa bóp thêm nếu muốn bọ ve (không phải nhãn) hiển thị ở trên cùng và dưới cùng (không chỉ ở trên cùng). Cách duy nhất tôi có thể làm điều này là với một thay đổi nhỏ đối với mã của 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()

Đầu ra:

nhập mô tả hình ảnh ở đây


bạn có thể vui lòng cho tôi biết làm thế nào để đặt trục X giữa B và C? Tôi đã cố gắng cả ngày nhưng không thành công
DaniPaniz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.