Does anyone know how to save a Matplotlib figure as *.tiff? It seems that this format is not supported in Python, while the journals are quite often ask for that format.
I am adding some minimal code:
# -*- coding: utf-8 -*- from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np # fig setup fig = plt.figure(figsize=(5,5), dpi=300) ax = fig.gca(projection='3d') ax.set_xlim([-1,1]) ax.set_ylim([-1,1]) ax.set_zlim([-1,1]) ax.axes.xaxis.set_ticklabels([]) ax.axes.yaxis.set_ticklabels([]) ax.axes.zaxis.set_ticklabels([]) # draw a surface xx, yy = np.meshgrid(range(-1,2), range(-1,2)) zz = np.zeros(shape=(3,3)) ax.plot_surface(xx, yy, zz, color='#c8c8c8', alpha=0.3) ax.plot_surface(xx, zz, yy, color='#b6b6ff', alpha=0.2) # draw a point ax.scatter([0],[0],[0], color='b', s=200)
This works:
fig.savefig('3dPlot.pdf')
But this does not:
fig.savefig('3dPlot.tif')
Advertisement
Answer
This is great! Thanks ot Martin Evans.
However, for those who would like to make it happen in Python3.x
, small fixes (since cStringIO
module is not available; and I would rather use BytesIO
)
# -*- coding: utf-8 -*- from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np from PIL import Image from io import BytesIO # fig setup fig = plt.figure(figsize=(5,5), dpi=300) ax = fig.gca(projection='3d') ax.set_xlim([-1,1]) ax.set_ylim([-1,1]) ax.set_zlim([-1,1]) ax.axes.xaxis.set_ticklabels([]) ax.axes.yaxis.set_ticklabels([]) ax.axes.zaxis.set_ticklabels([]) # draw a point ax.scatter([0],[0],[0], color='b', s=200) # save figure # (1) save the image in memory in PNG format png1 = BytesIO() fig.savefig(png1, format='png') # (2) load this image into PIL png2 = Image.open(png1) # (3) save as TIFF png2.save('3dPlot.tiff') png1.close()