I have a numpy array of dimension (10980x10980).
When I save it using matplotlib.image.imsave('file.tiff',data)
, viridis
pseudo colorscheme is automatically applied to the plot. I did this, and obtained a tiff file of 480 MB.
If I save the same figure using matplotlib.pyplot
,
plt.imshow(data)
plt.colorbar()
plt.savefig('file.tiff')
I obtain a file of around 1.5 MB.
The tiff info of both the files are:
matplotlib.image.imsave
:TIFF Directory at offset 0x8 (8)
Image Width: 10980 Image Length: 10980
Resolution: 100, 100 pixels/inch
Bits/Sample: 8
Compression Scheme: None
Photometric Interpretation: RGB color
Extra Samples: 1<unassoc-alpha>
Samples/Pixel: 4
Rows/Strip: 10980
Planar Configuration: single image plane
pyplot.savefig
:TIFF Directory at offset 0x8 (8)
Image Width: 640 Image Length: 480
Resolution: 100, 100 pixels/inch
Bits/Sample: 8
Compression Scheme: None
Photometric Interpretation: RGB color
Extra Samples: 1<unassoc-alpha>
Samples/Pixel: 4
Rows/Strip: 480
Planar Configuration: single image plane
We can see that plt.savefig has reduced the dimensions to 640x480. Why was it? And how to change this?
You are doing two different operations.
matplotlib.image.imsave('file.tiff',data)
saves the data contained in 'data' into a tiff (essentially an array that can be viewed as an image.
plt.imshow(data); plt.colorbar(); plt.savefig('file.tiff')
is creating a matplotlib figure, showing the data stored in data and then using the default parameters (dpi etc.) to save the figure as a tiff. Both syntaxes are correct, it depends on what your use case is.