2014-08-27 13 views
6

My python dữ liệu lô chỉ hiển thị 2 điểm trên trục x.Thay đổi tần số đánh dấu trên tần số X (thời gian, không số) trong matplotlib

Tôi muốn có nhiều hơn, nhưng không biết làm cách nào.

x = [ datetime.datetime(1900,1,1,0,1,2), 
     datetime.datetime(1900,1,1,0,1,3), 
     ... 
     ]           # (more than 1000 elements) 
y = [ 34, 33, 23, ............ ] 

plt.plot(x, y) 

Trục X chỉ hiển thị 2 điểm của khoảng thời gian. Tôi đã cố gắng sử dụng .xticks nhưng không hoạt động đối với trục X. Nó đã cho các lỗi dưới đây:

TypeError: object of type 'datetime.datetime' has no len() 
+0

bạn đang sử dụng phiên bản mpl nào? – tacaswell

+0

và tôi thực sự không hiểu câu hỏi của bạn. – tacaswell

+0

Bạn có chắc chắn rằng chỉ có 2 điểm được hiển thị? Bạn có thể làm điều này để xem cốt truyện nghĩ gì về dữ liệu: plt.gca(). Lines [0] .get_data() Có thể các điểm này quá gần nhau không? – Lukeclh

Trả lời

-1
plt.plot(matplotlib.dates.date2num(x), y) # matplotlib needs float-s, not <datetime.datetime> instances 
+0

mpl sẽ âm mưu chống lại 'datetime' đối tượng tốt. – tacaswell

11

Dù lý do nó là bạn đang nhận được 2 ve chỉ theo mặc định, bạn có thể sửa chữa nó (tùy chỉnh nó) bằng cách thay đổi định vị ticker sử dụng một bộ định vị ngày.

import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

x = [ datetime.datetime(1900,1,1,0,1,2), 
     datetime.datetime(1900,1,1,0,1,3), 
     ... 
     ]           # (more than 1000 elements) 
y = [ 34, 33, 23, ............ ] 

fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
plt.plot(x, y) 

ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=15)) #to get a tick every 15 minutes 
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))  #optional formatting 

Bạn có một vài định vị (ví dụ: DayLocator, WeekdayLocator, MonthLocator, vv) đọc về nó trong tài liệu:

http://matplotlib.org/api/dates_api.html

Nhưng có lẽ ví dụ này sẽ giúp nhiều:

http://matplotlib.org/examples/api/date_demo.html

Các vấn đề liên quan