ticker.FuncFormatter不应用刻度标签,为什么?

时间:2019-02-05 21:42:26

标签: python-3.x matplotlib

我正在使用ticker.FuncFormatter将以秒为单位的时间转换为X轴刻度的H:M:S格式。但是,滴答声继续显示原始秒数,这使我相信没有使用ax.xaxis.set_major_formatter。然后,我尝试将major_formatter设置为NullFormatter(),结果图表确实在X轴刻度上没有显示任何值。您可以在我的代码中看到我推荐用于测试的NullFormatter。

因此,我必须错误地或在错误的位置调用了ticker.FuncFormatter,但是几个小时的故障排除却没有结果。我希望这里的人对matplotlib有更多的经验,并且可以看到我的错误。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt, mpld3
import csv
import datetime

probe1 = [123, 128, 192, 178, 210, 223, 252, 268]
probe2 = [121, 135, 164, 212, 245, 298, 301, 303]
secs = [1, 1800, 3600, 5400, 7200, 10800, 14403, 21645]

def hms(x, pos=None):
    td = datetime.timedelta(seconds = x)
    hours = int((td.days * 24))
    hoursPlus = int(td.seconds / 3600)
    hours = hours + hoursPlus
    minutes = int(((td.seconds - (hoursPlus * 3600)) / 60))
    seconds = int(td.seconds - (minutes * 60) - (hoursPlus * 3600))
    tickString = str(hours) + ":" + str(minutes) + ":" + str(seconds)
    print(tickString)
    return tickString

formatter = plt.FuncFormatter(hms)

fig, ax = plt.subplots(figsize=(12, 7))
plt.plot(secs, probe1, label='Probe 1')
plt.plot(secs, probe2, label='Probe 2')
ax.xaxis.set_major_formatter(formatter)

plt.text(secs[-1]+1, probe1[-1]+1, probe1[-1], fontsize=15)
plt.text(secs[-1]+1, probe2[-1]+1, probe2[-1], fontsize=15)


plt.xlabel('Time (sec)')
plt.ylabel('Temp (F)')
plt.title('Temp History')
plt.legend(loc=2)

mpld3.save_html(fig, "test_example2.html")

0 个答案:

没有答案