我正在编写一个从 Google Sheets 导出数据并包含图形表示的代码。我已经使用 Python 中的 Plotly 成功生成了可视化效果,并且它们在我的 Web 浏览器中正确显示以供手动下载。但是,我正在尝试使用文档中提到的静态图像导出功能来自动化此过程。
我遇到了一个问题,即我的代码在图像保存过程中挂起。尽管没有错误或调试消息,但代码在生成第一个图后就会卡住。我的脚本涉及在循环中创建多个图形。
任何有关为什么会发生这种情况的见解都将不胜感激
for area, group_df in df.groupby('area'):
fig = go.Figure()
for cl_name in group_df["cluster_name"].unique():
color_group = group_df[group_df["cluster_name"] == cl_name]
trace = go.Scatter(
y=color_group["keyword"],
x=color_group["count"],
mode="markers",
marker=dict(
size=color_group["count"] / 15,
color=color_group["color"],
line=dict(
width=2,
color="grey"
)
),
name=f"{cl_name}"
)
fig.add_trace(trace)
text_scatter = go.Scatter(
y = group_df["keyword"],
x = group_df["count"],
mode = "text",
text = group_df["keyword"].apply(lambda x: x if len(x) < 15 else x[:5] + "\\" + x[-5:]),
textposition='top center',
showlegend = False
)
fig.add_trace(text_scatter)
fig.update_layout(
title = "Area - " + area,
xaxis = dict(showgrid=False, showticklabels=False),
yaxis = dict(showgrid=False, showticklabels=False),
plot_bgcolor = "white",
annotations = [ # Footer
dict(
x=0.95,
y=0.005,
text= "Footer",
showarrow=False,
xref="paper",
yref="paper",
font=dict(size=24, color="gray")
)
]
)
# Shows the graph
fig.show()
# Creates dir if it's doesn't exist
if not os.path.exists("images"):
os.mkdir("images")
# Saves image
*# Hangs HERE*
fig.write_image(f"images/{area}.jpeg", width=800, height=600)
我最初尝试调试代码,但在显示任何调试信息之前该过程就停止了。无论我使用 VS Code 还是 PyCharm 作为 IDE,这个问题仍然存在。
为了找出原因,我从生成的图形中删除了所有其他痕迹,认为它们可能会导致挂起。不幸的是,这对问题没有任何影响。我什至重新启动电脑并重新安装 Python,但问题仍然存在。
我在调试时注意到MainThread正在运行,但是Thread-6(_collect_standard_error),所以就是这样。
我找到了答案。我几天没看到它,但它确实存在。
无法使用 to_image 或 write_image 保存绘图[重复]我认为这个比原来的更好。
基本上,你应该安装这个版本的kaleido:
pip install kaleido==0.1.0post1
并且您需要在 write_image() 中添加一个参数“format=”,如下所示:
fig.write_image(f"images\{area}.png", format='png', width=1500, height=1500)