0

我正在尝试plotly.express在 Flask 中显示条形图。但它是给予'Figure' object has no attribute savefig error。使用时图像会正确显示fig.show()

import matplotlib.pyplot as plt
import plotly.express as px

figs = px.bar(
    comp_df.head(10),
    x = "Company",
    y = "Staff",
    title= "Top 10 departments",
    color_discrete_sequence=["blue"],
    height=500,
    width=800
)
figs.savefig('static/images/staff_plot.png')
#    fig.show()
return render_template('plot.html', name='new_plot', url='static/images/staff_plot.png')

plot.html中,图像显示如下:

<img src={{ url}} >
4

2 回答 2

3

您已经定义figs了该px.bar()方法。

每个文档 px.bar()返回一个plotly.graph_objects.Figure对象。

查看此类plotly.graph_objects.Figure的文档,我们可以看到此类上可用的所有方法plotly.graph_objects.Figureshow()似乎是此类对象的有效方法。但是这个类没有savefig()方法。这就是为什么fig.show()有效和fig.savefig()无效的原因。

看起来类上有一个savefig()方法,如此所述,但是您的对象是not的实例。matplotlib.pyplotfigsplotly.graph_objects.Figurematplotlib.pyplot

如果您的目标是将figs对象写入文件,那么文档似乎指定了 3 种提供此功能的方法:

plotly.graph_objects.Figure

尝试更换:

figs.savefig('static/images/staff_plot.png')

figs.write_image(file='static/images/staff_plot.png', format='.png')

于 2020-04-11T19:22:02.330 回答
-1

而不是使用figs.savefig,尝试使用plt.savefig

import matplotlib.pyplot as plt
plt.savefig('static/images/staff_plot.png')
于 2021-08-31T19:43:06.400 回答