使用seaborn保存图形

18

当我尝试使用seaborn保存绘图时,像这样:

import seaborn as sn
import pandas as pd
import matplotlib.pyplot as plt
from pylab import savefig

array = [[100,0], 
        [33,67]]

df_cm = pd.DataFrame(array)

svm = sn.heatmap(df_cm, annot=True,cmap='coolwarm', linecolor='white', linewidths=1)

svm.savefig('svm_conf.png', dpi=400)

我收到了这个错误。

AttributeError                            Traceback (most recent call last)
<ipython-input-71-5c0ae9cda020> in <module>()
----> 1 svm.savefig('svm_conf.png', dpi=400)

AttributeError: 'AxesSubplot' object has no attribute 'savefig'

我以前使用同样的代码保存过一些箱线图,但这一次却无法正常运行。


你想要使用 plt.savefig('svm_conf.png', dpi=400) - asongtoruin
我尝试了那个选项,但是我得到了相同的错误。:( - rnv86
1
你正在使用类似 ipython 交互式会话的东西吗?- 可以尝试启动一个新会话并复制代码。使用 plt.savefig 应该绝对不会出现相同的错误。 - LSchueler
3个回答

39

实际上,您需要执行以下操作:

  • sn.heatmap返回的对象中检索图形
  • 然后才能保存该图形

请参见下面的最后两行:

import seaborn as sn
import pandas as pd
import matplotlib.pyplot as plt
from pylab import savefig

array = [[100,0], 
        [33,67]]

df_cm = pd.DataFrame(array)

svm = sn.heatmap(df_cm, annot=True,cmap='coolwarm', linecolor='white', linewidths=1)

figure = svm.get_figure()    
figure.savefig('svm_conf.png', dpi=400)

@MosteM 感谢您的确认,我已经在我的帖子中删除了错误的信息。 - Adonis
2
plt.savefig在Windows和IPython中运行良好。查看图片。我不知道你做了什么导致它出错,但至少没有理由声称它不能工作。 - ImportanceOfBeingErnest
@ImportanceOfBeingErnest 确实,那是我的错,我猜这可能只适用于我的当前环境。 - Adonis
小提示:如果您正在保存一个 seaborn 的 ClusterGrid,那么它将没有 get_figure() 方法。在这种情况下,您可以直接使用 svm.savefig() 进行保存。 - Prageeth Jayathissa
对我不起作用。它显示svm没有属性 get_figure() - J Agustin Barrachina

11

保存当前图形的命令是

plt.savefig()

因为这可能会引起一些混淆,所以这里提供完整的工作示例:

import seaborn as sn
import pandas as pd
import matplotlib.pyplot as plt

array = [[100,0], 
        [33,67]]

df_cm = pd.DataFrame(array)

svm = sn.heatmap(df_cm, annot=True,cmap='coolwarm', linecolor='white', linewidths=1)

plt.savefig('svm_conf.png', dpi=400)

4
最简单的方法是使用:

plt.savefig('svm_conf.png', dpi=400)

替代

svm.savefig('svm_conf.png', dpi=400)

2
有趣的是,使用 IPython 和 Windows 会产生空白图像。 直接使用 Python 确实会生成图表。也许你可以把这个加到你的帖子里。 - Adonis
很奇怪,我在Linux系统上使用IPython测试了脚本并保存了图像。 - LSchueler
2
方法 svm.get_figure().savefig() 在两种情况下都有效。 - Adonis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接