vẽ với văn bản tùy chỉnh cho các điểm trục x


106

Tôi đang vẽ một âm mưu bằng cách sử dụng matplotlib và python như mã mẫu bên dưới.

x = array([0,1,2,3])
y = array([20,21,22,23])
plot(x,y)
show()

Vì nó là mã ở trên trên trục x, tôi sẽ thấy các giá trị được vẽ 0.0, 0.5, 1.0, 1.5tức là các giá trị tương tự của các giá trị x tham chiếu của tôi.

Có cách nào để ánh xạ mỗi điểm của x thành một chuỗi khác không? Vì vậy, ví dụ, tôi muốn trục x hiển thị tên tháng (chuỗi Jun, July,...) hoặc các chuỗi khác như tên người ( "John", "Arnold", ...) hoặc thời gian đồng hồ ( "12:20", "12:21", "12:22", ..).

Bạn có biết tôi có thể làm gì hoặc chức năng gì để xem qua không?
Đối với mục đích của tôi nó có thể matplotlib.tickergiúp được gì không?

Câu trả lời:


195

Bạn có thể tự đặt xticks (và yticks) bằng cách sử dụng pyplot.xticks :

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0,1,2,3])
y = np.array([20,21,22,23])
my_xticks = ['John','Arnold','Mavis','Matt']
plt.xticks(x, my_xticks)
plt.plot(x, y)
plt.show()


44
rotationcũng là đôi khi hữu ích:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe

4
Và làm thế nào để phân tán các mục đều dọc theo trục x? Giả sử trục x của tôi có 1 Triệu điểm bên trong và tôi muốn hiển thị chỉ John, Arnold, Mavis và Matt dọc theo trục được phân bố đều?
Steve K

@SirBenBenji: Sử dụng lập chỉ mục (ví dụ x[idx]) để chỉ chọn dữ liệu bạn muốn hiển thị.
unutbu

Tôi không hiểu tại sao bạn viết pylab, câu trả lời đó đã lỗi thời và sai theo quan điểm của tôi.
Mario Krenn

1

Điều này đã làm việc cho tôi. Mỗi tháng trên trục X

str_month_list = ['January','February','March','April','May','June','July','August','September','October','November','December']
ax.set_xticks(range(0,12))
ax.set_xticklabels(str_month_list)
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.