我正在使用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")