2013-03-06 32 views
13

Tôi có một tập dữ liệu đơn giản về các giá trị X và Y mà tôi đang vẽ trong matplotlib. Biến độc lập trong dữ liệu của tôi là thời lượng/thời gian (ví dụ: 60 giây, 2 giờ, 24 giờ, 10 ngày), dữ liệu đầu vào của tôi luôn được biểu thị dưới dạng số nguyên giây. Câu hỏi của tôi là, liệu matplotlib có bất kỳ cách nào để thiết lập nhãn trục thời gian một cách thông minh, trong một dạng có thể đọc được của con người không?nhãn trục thông minh matplotlib cho timedelta

Ví dụ: ở cuối nhỏ của quy mô, sẽ là mong muốn hiển thị 30 giây nói đơn giản là "30 giây". Ở cuối quy mô lớn, sẽ đẹp hơn khi hiển thị "10 ngày" thay vì 864000 giây. Một nơi nào đó ở giữa, nó sẽ là tốt hơn để có các nhãn đọc trong "phút" và "giờ". Liệu matplotlib có bất kỳ cách tự động nào phỏng đoán một cái gì đó gần như có thể đọc được đối với các khoảng thời gian trải rộng một số đơn đặt hàng lớn không?

Lý tưởng nhất là bất kỳ phương pháp tiếp cận nào tôi sử dụng đều nên khái quát hóa các tập dữ liệu trải dài các khoảng thời gian khác nhau, thay vì âm mưu được điều chỉnh riêng cho một tập dữ liệu đầu vào.

Trả lời

12

Bạn có thể cung cấp ví dụ không? Đây có phải là những gì bạn muốn:

import datetime                                                                 

import numpy as np                                                                
import pylab as plt                                                                
import matplotlib                                                                

fig = plt.figure()                                                                
ax = fig.add_subplot(111)                                                              

x = np.linspace(0, 300) # 5 minutes                                                              
y = np.random.random(len(x))                                                             

ax.plot(x, y)                                                                 

def timeTicks(x, pos):                                                               
    d = datetime.timedelta(seconds=x)                                                           
    return str(d)                                                                
formatter = matplotlib.ticker.FuncFormatter(timeTicks)                                                       
ax.xaxis.set_major_formatter(formatter)                                                           

plt.show() 

Example output

Nó sử dụng trăn timedelta. Với 864000 giây ở trên sẽ dẫn đến "10 ngày, 10:00:00". Tất nhiên bạn có thể định dạng nhiều định dạng nâng cao hơn vào hàm timeTicks() ở trên.

+0

Ngoài ra, nếu bạn muốn sửa đổi xticks để hiển thị mỗi phút: 'ax.xaxis.set_major_locator (plt.MultipleLocator (1 * 60))' –

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