timesp的matplotlib智能轴标签

时间:2013-03-06 05:56:21

标签: matplotlib

我有一个简单的X和Y值数据集,我在matplotlib中绘图。我的数据中的自变量是持续时间/时间δ(例如60秒,2小时,24小时,10天),在我的输入数据中始终表示为整数秒。我的问题是,matplotlib能否以人类可读的形式智能地设置持续时间轴标签?

例如,在比例的小端,希望将30秒简单地表示为“30秒”。在规模较大的一端,显示“10天”而不是864000秒会更好。介于两者之间,最好在“分钟”和“小时”内读取标签。 matplotlib是否有任何自动推断方法可以推断出人类可读的东西,持续时间跨越几个数量级?

理想情况下,我使用的任何方法都应该推广到跨越不同持续时间尺度的数据集,而不是针对一个输入数据集单独定制的绘图。

1 个答案:

答案 0 :(得分:13)

你能提供一个例子吗?这是你想要的:

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

它使用pythons timedelta。使用864000秒,上述将导致“10天,10:00:00”。您当然可以在上面的timeTicks()函数中添加更高级的格式。