Matplotlib设置X轴为datetime类型时触发OverflowError的问题求助
我在Matplotlib里把X轴数据设置为datetime类型时遇到了麻烦,想请教大家怎么解决。
我的数据是这样的(Pandas DataFrame格式):
timestamp_group_start date_time avg_11006 avg_53119 avg_11995 avg_37595 avg_42740 avg_56826 0 1670104020 2022-12-03 22:47:00 18.246300 17.873331 19.998333 20.123986 18.661029 20.186845 1 1670104080 2022-12-03 22:48:00 18.246300 17.873331 19.994792 20.123986 18.686012 20.211735 2 1670104140 2022-12-03 22:49:00 18.246300 17.873331 20.024194 20.123986 18.686012 20.248527 3 1670104200 2022-12-03 22:50:00 18.246300 17.873331 20.013761 20.123986 18.686012 20.248527 4 1670104260 2022-12-03 22:51:00 18.246300 17.873331 20.062500 20.123986 18.686012 20.248527 .. ... ... ... ... ... ... ... ... 256 1670119380 2022-12-04 03:03:00 19.311873 19.024235 21.000000 21.061362 20.000000 21.123863 257 1670119440 2022-12-04 03:04:00 19.311873 19.017045 21.000000 21.061362 20.062500 21.123863 258 1670119500 2022-12-04 03:05:00 19.311873 19.051306 21.000000 21.061362 20.062500 21.123863 259 1670119560 2022-12-04 03:06:00 19.311873 19.062042 21.003440 21.061362 20.062500 21.123863 260 1670119620 2022-12-04 03:07:00 19.375000 20.250000 21.125000 21.687500 20.875000 21.687500
我的需求是把所有以avg开头的列做成散点图,并且把X轴设置为datetime类型。
当我用整数类型的时间戳列timestamp_group_start作为X轴数据时,代码运行完全正常:
axs.scatter( temps["timestamp_group_start"], temps[col_name], )
但当我改成用date_time列作为X轴数据时:
axs.scatter( temps["date_time"], temps[col_name], )
就触发了如下错误:
File "D:\Documents\Projects\project_name.venv\Lib\site-packages\matplotlib\dates.py", line 359, in _from_ordinalf
np.timedelta64(int(np.round(x * MUSECONDS_PER_DAY)), 'us'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OverflowError: int too big to convert
补充一下,data["date_time"]里的每个元素类型是<class 'pandas._libs.tslibs.timestamps.Timestamp'>。
我之前看过相关的问题讨论,但里面的解决方案好像对我的情况不适用。
编辑补充:
我找到问题根源了!原来是plt.xlim(timestamp_start, timestamp_end)这行代码在搞鬼!删掉这行之后,用date_time作为X轴数据完全正常运行了。我还得琢磨一下为什么设置X轴范围会引发这个错误,但至少现在能正常绘图了。
感谢各位的建议!
备注:内容来源于stack exchange,提问作者zorka5

