timedelta的matplotlib智能轴标签

timedelta的matplotlib智能轴标签,matplotlib,Matplotlib,我在matplotlib中绘制了一个简单的X和Y值数据集。我的数据中的自变量是持续时间/时间增量(例如60秒、2小时、24小时、10天),在我的输入数据中,它始终表示为整数秒数。我的问题是,matplotlib是否有任何方法可以以人类可读的形式智能地设置持续时间轴标签 例如,在小范围内,最好将30秒简单地表示为“30秒”。在大范围内,最好显示“10天”,而不是864000秒。在这两者之间,最好是以“分钟”和“小时”来阅读标签。matplotlib是否有任何自动方法可以推断出跨越几个数量级的持续时

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

例如,在小范围内,最好将30秒简单地表示为“30秒”。在大范围内,最好显示“10天”,而不是864000秒。在这两者之间,最好是以“分钟”和“小时”来阅读标签。matplotlib是否有任何自动方法可以推断出跨越几个数量级的持续时间内人类可读的东西


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

您能提供一个示例吗?这就是你想要的吗:

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()


它使用pythons-timedelta。864000秒后,上述结果将为“10天,10:00:00”。当然,您可以在上面的
timeTicks()
函数中填充更高级的格式。

此外,如果您想修改xticks以每分钟显示一次:
ax.xaxis.set\u major\u locator(plt.MultipleLocator(1*60))