Có thể gọi plt.plot(dates,values)
với dates
là danh sách các đối tượng datetime.datetime
. Cốt truyện sẽ bao gồm xticks ở định dạng như '%Y-%m-%d'
và khi bạn phóng to, tự động thay đổi thành ô hiển thị giờ, phút, giây.
Tuy nhiên, có vẻ như bạn muốn kiểm soát nhiều hơn điều này. Có lẽ nó không hiển thị giờ, phút, giây theo tỷ lệ bạn muốn.
Trong trường hợp đó, bạn có thể thiết lập định dạng ngày của riêng mình:
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
Thật không may, nếu bạn vượt qua datetime.datetime
đối tượng để plt.plot
, các xticks tự động lựa chọn bởi matplotlib dường như luôn luôn có giây bằng số không. Ví dụ, nếu bạn chạy
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(dates,values)
plt.show()
ngày sau đó bạn được định dạng đẹp, nhưng tất cả những giây xtick là zero.
Vậy giải pháp là gì?
Nếu bạn chuyển đổi dấu thời gian của mình -> datetime.datetime objects -> datplums matplotlib mình và chuyển datenums thành plt.plot
, thì các giây được giữ nguyên.
PS. Bởi "matplotlib datenum" Tôi có nghĩa là loại số được trả về bởi matplotlib.dates.date2num
.
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
datenums=md.date2num(dates)
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(datenums,values)
plt.show()
Matplotlib chắc chắn _doesn't_ loại bỏ các thông tin thời gian khi âm mưu datetimes ... Bạn đang làm gì chính xác? Bạn chỉ muốn thay đổi ghi nhãn của trục? Bạn chỉ muốn một đánh dấu/nhãn cho mỗi điểm dữ liệu được vẽ? –