I'm converting an iPython notebook to a python script, just trying to output the results of a couple Seaborn plots as png files. Code:
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")
Don't worry about the variables, they're populated as expected, and I get a great-looking chart in iPyNB. Running the code within a script, however, yields RuntimeError: Invalid DISPLAY variable
.
Following another thread, I modified the code, putting this at the top of the script:
import matplotlib
matplotlib.use('Agg')
And tried again. This time, it doesn't seem like the savefig()
method is available for the plot at all:
AttributeError: 'AxesSubplot' object has no attribute 'savefig'
All the results searching out this error are related to pandas and a plot that is already being displayed. I'm just trying to get Seaborn to output the fig to a file, ideally without displaying it at all.
Any help is appreciated.
I solved the issue by changing
ax.savefig('file.png')
to
ax.figure.savefig('file.png')
I guess accessing the figure directly is one way to get to the savefig()
method for the barplot.
@WoodChopper also has a working solution, but it requires another import statement, and utilizing pyplot's savefig()
directly.
Either solution does require setting matplotlib.use('Agg')
to get around the DISPLAY variable error. As the referenced post noted, this has to be set before importing other matplotlib libraries.
I guess you should import pyplot.
import matplotlib.pyplot as plt
plt.savefig()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With