IDLE中用Plotly+Cufflinks绘图遇AttributeError,求报错原因及解决办法
解决AttributeError: module 'plotly.offline' has no attribute '__PLOTLY_OFFLINE_INITIALIZED'
咱们先搞清楚为啥会触发这个错误:
- 你在IDLE编辑器里调用了
init_notebook_mode(),这个函数是专门给Jupyter Notebook设计的,用来初始化笔记本里的plotly渲染环境,在IDLE这种桌面编辑器里调用它,会直接打乱plotly离线模式的内部初始化逻辑,导致找不到__PLOTLY_OFFLINE_INITIALIZED这个属性。 - 另外你写的
cf.go_offline少了括号,这只是引用了函数对象,根本没执行cufflinks的离线初始化操作,这也会加重初始化异常。 - 还有可能是plotly和cufflinks的版本不兼容,新版本plotly调整了离线模式的内部属性,旧版cufflinks还在依赖老的属性名。
具体解决办法
1. 删掉Notebook专属代码
直接移除init_notebook_mode(connected = True)这一行,IDLE完全不需要这个配置。
2. 修复cufflinks初始化
把cf.go_offline改成cf.go_offline(),必须加括号才能执行初始化操作,让cufflinks切换到离线模式。
3. 适配IDLE的图表显示方式
IDLE本身不支持直接渲染plotly的交互式图表,你可以用plot()函数把图表生成本地HTML文件,自动在浏览器打开查看:
plot(df.iplot(asFigure=True))
4. 版本兼容(可选,若前几步无效)
如果还是报错,大概率是版本不兼容,建议安装经过验证的稳定版本组合:
pip install plotly==5.15.0 cufflinks==0.17.3
修改后的完整代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt from plotly.offline import plot import cufflinks as cf # 正确初始化cufflinks离线模式 cf.go_offline() df = pd.read_csv('imdb.csv') df.rename(columns={'Runtime (Minutes)':'Runtime', 'Revenue (Millions)':'Revenue'}, inplace=True) # 在IDLE中生成交互式图表并在浏览器打开 plot(df.iplot(asFigure=True))
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

