Barplot savefig()返回一个AttributeError

eco*_*omy 12 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")
Run Code Online (Sandbox Code Playgroud)

不要担心变量,它们按预期填充,我在iPyNB中获得了一个漂亮的图表.然而,在脚本中运行代码会产生RuntimeError: Invalid DISPLAY variable.

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

import matplotlib
matplotlib.use('Agg')
Run Code Online (Sandbox Code Playgroud)

并再次尝试.这一次,似乎该savefig()方法根本不适用于该情节:

AttributeError: 'AxesSubplot' object has no attribute 'savefig'
Run Code Online (Sandbox Code Playgroud)

搜索此错误的所有结果都与pandas和已经显示的绘图有关.我只是想让Seaborn将无花果输出到文件中,理想情况下根本不显示它.

任何帮助表示赞赏.

eco*_*omy 35

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

ax.savefig('file.png')
Run Code Online (Sandbox Code Playgroud)

ax.figure.savefig('file.png')
Run Code Online (Sandbox Code Playgroud)

我想直接访问这个数字是获得savefig()barplot方法的一种方法.

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

两种解决方案都需要设置matplotlib.use('Agg')以绕过DISPLAY变量错误.正如引用的帖子所指出的那样,必须在导入其他matplotlib库之前设置它.


Woo*_*per 9

我想你应该导入pyplot.

import matplotlib.pyplot as plt
plt.savefig()
Run Code Online (Sandbox Code Playgroud)

  • 您可以阅读面向对象的界面,例如[本教程](http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut2.html)非常清楚.它应该可以帮助您了解这些东西是如何组合在一起的. (2认同)
  • 对我不起作用,我必须使用“.figure”。 (2认同)