Python 返回AttributeError的Barplot savefig()

Python 返回AttributeError的Barplot savefig(),python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我正在将iPython笔记本转换为python脚本,只是尝试将几个Seaborn绘图的结果输出为png文件。代码: import seaborn as sns ... sns.set_style("whitegrid") ax = sns.barplot(x=range(1,11), y=[ (x/nrows)*100 for x in addr_pop ], palette="Blues_d") ax.savefig("html/addr_depth.png") 不用担心这些变量,它们是

我正在将iPython笔记本转换为python脚本,只是尝试将几个Seaborn绘图的结果输出为png文件。代码:

import seaborn as sns

...

sns.set_style("whitegrid")
ax = sns.barplot(x=range(1,11), y=[ (x/nrows)*100 for x in addr_pop ], palette="Blues_d")
ax.savefig("html/addr_depth.png")
不用担心这些变量,它们是按预期填充的,我在iPyNB中得到了一个非常好看的图表。但是,在脚本中运行代码会产生
RuntimeError:Invalid DISPLAY variable

在另一个线程之后,我修改了代码,将其放在脚本的顶部:

import matplotlib
matplotlib.use('Agg')
然后再试一次。这一次,绘图似乎根本无法使用
savefig()
方法:

AttributeError: 'AxesSubplot' object has no attribute 'savefig'
搜索此错误的所有结果都与熊猫和已显示的绘图有关。我只是想让Seaborn将fig输出到一个文件中,理想情况下根本不显示它


非常感谢您的帮助。

我想您应该导入pyplot

import matplotlib.pyplot as plt
plt.savefig()

我通过改变现状解决了这个问题

ax.savefig('file.png')

我想直接访问图形是获得条形图的
savefig()
方法的一种方法

@WoodChopper也有一个可行的解决方案,但它需要另一个导入语句,并直接利用pyplot的
savefig()


这两种解决方案都需要设置
matplotlib。请使用('Agg')
避开显示变量错误。如上所述,必须在导入其他matplotlib库之前设置此选项

好的,那就行了。我有点困惑为什么,但这确实解决了问题。我还找到了一种不需要单独导入pyplot的方法。将
ax.savefig()
更改为
ax.figure.savefig()
具有相同的效果,并且看起来更干净一些。也许有人可以对这些差异进行评论和解释。例如,你可以阅读面向对象的界面,它非常清晰。它将帮助您了解这些东西是如何组合在一起的。相关:
ax.figure.savefig('file.png')