我正在 matplotlib 中的 x 轴上绘制日期和时间。因为我想绘制尽可能多的标签,所以我在 x 标签中使用换行符,如下所示:
不幸的是,当我将鼠标悬停在图表上时,这会产生调整 matplotlib 窗口大小的副作用,因为它尝试在底部打印包含换行符的 x 值。
请参阅此处的视频作为演示:
YouTube 视频链接 https://youtu.be/TlzE1rB1J70,以全分辨率观看。
有时它甚至会导致整个图表闪烁,这并不会让交互变得有趣。我不想删除工具栏,但我只需要它不打印右下角的 x 点(这就是导致窗口调整大小的原因)。
知道如何保留工具栏但避免这种跳跃/闪烁问题吗?我的代码如下:
import os
import pandas
import matplotlib.pyplot as mp
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
for entry in os.scandir('estimated_finish_times'):
if entry.name.endswith('.csv'):
print(entry.name)
df = pandas.read_csv(entry.path)
df['lookahead_finish'] = df['polltime'] + df['lookahead_time']
df['combined_rate_finish'] = df['polltime'] + df['combined_rate_time']
xd = [dt.datetime.fromtimestamp(ts) for ts in df['polltime']]
x1 = md.date2num(xd)
yd = [dt.datetime.fromtimestamp(ts) for ts in df['lookahead_finish']]
y1 = md.date2num(yd) # df['lookahead_finish']
yd = [dt.datetime.fromtimestamp(ts) for ts in df['combined_rate_finish']]
y2 = md.date2num(yd) # df['lookahead_finish']
fig, ax = mp.subplots(figsize=(22, 11))
yfmt = md.DateFormatter('%b. %d, %Y at %I:%M %p')
xfmt = md.DateFormatter('%b. %d\n%I:%M\n%p\n%Y')
ax.xaxis.set_major_formatter(xfmt)
ax.xaxis.set_major_locator(mp.MaxNLocator(20))
ax.yaxis.set_major_formatter(yfmt)
ax.yaxis.set_major_locator(mp.MaxNLocator(20))
mp.plot(x1, y1, linewidth=2, label='lookahead_finish', marker='.', alpha=0.5)
mp.plot(x1, y2, linewidth=2, label='combined_rate_finish', marker='.', alpha=0.3)
mp.legend(bbox_to_anchor=(1.11, 1.0), loc="upper right")
mp.title(f'{entry.name} Estimated Finish Time')
mp.grid()
# fig.canvas.toolbar.pack_forget()
mp.show()
请注意,数据帧中的每一列只是 unix 时间戳(诸如1665123089
,即dtype: int64
)。另外,我使用的是 Windows 10、Python 3.8.2,并且matplotlib==3.2.1
.
我仍然希望控件可以访问,而不是隐藏工具栏(这是建议的解决方案):