我有一个简单的X和Y值数据集,我在matplotlib中绘图。我的数据中的自变量是持续时间/时间δ(例如60秒,2小时,24小时,10天),在我的输入数据中始终表示为整数秒。我的问题是,matplotlib能否以人类可读的形式智能地设置持续时间轴标签?
例如,在比例的小端,希望将30秒简单地表示为“30秒”。在规模较大的一端,显示“10天”而不是864000秒会更好。介于两者之间,最好在“分钟”和“小时”内读取标签。 matplotlib是否有任何自动推断方法可以推断出人类可读的东西,持续时间跨越几个数量级?
理想情况下,我使用的任何方法都应该推广到跨越不同持续时间尺度的数据集,而不是针对一个输入数据集单独定制的绘图。
答案 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()
它使用pythons timedelta。使用864000秒,上述将导致“10天,10:00:00”。您当然可以在上面的timeTicks()
函数中添加更高级的格式。