Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force pyplot.imshow() to produce image with higher resolution

I have an NxN array that I am plotting in Python using matplotlib.pyplot.imshow(). N will be very large and I want my final image to have resolution to match. However, in the code that follows, the image resolution doesn't seem to change with increasing N at all. I think that imshow() (at least how I'm using it) has a fixed minimum pixel size that is larger than that needed to show my NxN array with full resolution.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

array = np.loadtxt("output.dat",unpack=True)
plt.figsize=(30.0, 30.0)
im = plt.imshow(array,cmap='hot')
plt.colorbar(im)
plt.savefig("mandelbrot.pdf")

As you can see in the code above, I've tried messing with plt.figsize to try and increase resolution but to no avail. I've also tried various output formats (.pdf, .ps, .eps, .png) but these all produced images with lower resolution than I wanted. The .ps, .eps, and .pdf images all looked the exact same.

First, does my problem exist with imshow() or is there some other aspect of my code that needs to be changed to produce higher resolution images?

Second, how do I produce higher resolution images?

like image 890
NeutronStar Avatar asked Jan 09 '23 20:01

NeutronStar


1 Answers

plt.figsize() will only change the size of the figure in inches while keeping the default dpi. You can set the resolution of the figure by passing the dpi keyword argument when you save the figure:

    fig.savefig('filename.extension', dpi=XXX)

So if you have a figure size of 4x6 and save it with dpi=300 you'll end up with an image with 1200x1800 resolution.

You can also set the default figure size and dpi with matplotlibrc.

like image 123
jonchar Avatar answered Jan 22 '23 16:01

jonchar