Pandas 图,vars() 参数必须具有 __dict__ 属性?

Sid*_*Sid 10 python matplotlib pandas

它之前工作得很好,但由于某种原因,现在我遇到了奇怪的错误。

熊猫版本:1.2.3

matplotlib 版本:3.7.0

示例数据框:

df
    cap       Date
0    1     2022-01-04
1    2     2022-01-06
2    3     2022-01-07
3    4     2022-01-08
Run Code Online (Sandbox Code Playgroud)
df.plot(x='cap', y='Date')
plt.show()
Run Code Online (Sandbox Code Playgroud)
df.dtypes
cap              int64
Date    datetime64[ns]
dtype: object
Run Code Online (Sandbox Code Playgroud)

我得到一个回溯:

df
    cap       Date
0    1     2022-01-04
1    2     2022-01-06
2    3     2022-01-07
3    4     2022-01-08
Run Code Online (Sandbox Code Playgroud)

小智 15

事实上,这个问题可能是由于像默认脚本(或在 PyCharm 交互式控制台中)那样运行代码而引起的,而不是在 Jupyter 中引起的。

如果是这样,您可以通过使用以下函数直接在文件中设置后端来修复此错误use

import matplotlib as mpl
import matplotlib.pyplot as plt

mpl.use('TkAgg')  # !IMPORTANT

fig, ax = plt.subplots()
res = ax.plot([1, 2, 3, 4], [1, 4, 2, 3])  # Plt some data on the axes.o
# plt.show() # optionally show the result.
Run Code Online (Sandbox Code Playgroud)

在某些情况下TkAgg可能不可用。首先检查您使用哪个后端。为此,运行这个简单的代码:

import matplotlib as mpl
print(mpl.get_backend())
Run Code Online (Sandbox Code Playgroud)

但!这必须由您在 PyCharm 外部的默认终端中手动运行。(例如创建简单test.py文件,粘贴代码,然后运行python test.py

为什么? 因为 PyCharm(至少在科学项目中)使用使用后端的交互式控制台运行所有文件module://backend_interagg。这个后端会导致与您相同的错误。

所以。添加mpl.use('TkAgg')到文件的头部,或者检查您可以使用哪个后端并将这些名称粘贴到此函数中。