使用Kaleido导出Plotly图像为PNG失败,求解决方法
Plotly导出图片报错解决方案
问题描述
我用以下代码生成饼图并导出为PNG:
fig = px.pie(df.groupby('TypeObject').count(), values='ID', names=df.groupby('TypeObject').count().index, color_discrete_sequence=px.colors.sequential.YlGnBu) fig.show() fig.write_image("images/fig1.png")
更新Python版本后运行报错,使用fig.show('png')也会触发相同错误。
报错信息
ResourceWarning:
unclosed file <_io.BufferedWriter name=3>ValueError: --plotlyjs argument is not a valid URL or file path:
已尝试方法
- 执行命令:
pip install --upgrade "kaleido==0.1.*" - 添加代码:
import plotly.io as pio pio.kaleido.scope.chromium_args += ("--single-process",) - 指定plotly==5.3.1版本
- 在导入plotly前先导入kaleido
- 尝试使用orca,但同样出现问题
解决方案
1. 手动指定plotly.js路径
直接给kaleido指定有效的plotly.js地址,解决参数无效问题:
import plotly.io as pio # 方式一:使用官方CDN地址 pio.kaleido.scope.plotlyjs = "https://cdn.plot.ly/plotly-2.27.0.min.js" # 方式二:使用本地下载的plotly.js文件 # pio.kaleido.scope.plotlyjs = "/本地路径/plotly.min.js" # 执行绘图和导出 fig = px.pie(df.groupby('TypeObject').count(), values='ID', names=df.groupby('TypeObject').count().index, color_discrete_sequence=px.colors.sequential.YlGnBu) fig.write_image("images/fig1.png")
2. 升级到兼容的kaleido版本
放弃固定旧版本,安装与当前Python、Plotly兼容的最新版:
pip uninstall kaleido -y pip install kaleido --upgrade
3. 匹配版本兼容性
确保Python版本(如3.10+)与Plotly、kaleido版本兼容,建议使用Plotly 5.10.0+搭配kaleido 0.2.1+,这两组版本对高Python版本适配更好。
4. 分离show()与write_image()调用
先注释fig.show(),单独测试导出功能,避免两者同时调用导致文件句柄未关闭的警告:
fig = px.pie(df.groupby('TypeObject').count(), values='ID', names=df.groupby('TypeObject').count().index, color_discrete_sequence=px.colors.sequential.YlGnBu) # fig.show() # 先注释,优先测试导出是否正常 fig.write_image("images/fig1.png")
内容的提问来源于stack exchange,提问作者Maria Luchkova
相关产品推荐
相关产品推荐

