在 Python 中使用 Plotly 导出图像时代码挂起

问题描述 投票:0回答:1

我正在编写一个从 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),所以就是这样。

python python-3.x plotly plotly-python
1个回答
0
投票

我找到了答案。我几天没看到它,但它确实存在。

无法使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.