Increase DPI of Matplotlib .show() in Jupyter Notebook

Question:

I’m using Matplotlib in a Jupyter Notebook to display an image of a map. The code looks like this:

%matplotlib inline

imgpath = './map.png'

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

from PIL import Image

img = Image.open(imgpath)
print(img.size)

width, height = img.size
# img.thumbnail((width * 2,height * 2), Image.ANTIALIAS)  # resizes image in-place
imgplot = plt.imshow(img)
plt.savefig('test.png', dpi = 300)

The problem is, although the plt.savefig('test.png', dpi = 300) looks fine (because I changed the dpi to 300), the image displayed in the notebook is so low resolution I can’t make anything out on it, and plt.imshow(img, dpi = 300) doesn’t work:

Image displayed in notebook

So what I’m wondering is if there is a way to change the resolution of the image shown in the Jupyter Notebook?

Asked By: Alex S

||

Answers:

If your screen has Retina display, add the following line after %matplotlib inline (or somewhere else before plotting) in your notebook

%config InlineBackend.figure_format = 'retina'

This will increase the display resolution of your plots within the Jupyter Notebook.

Answered By: Sheldore

Add this at the beginning of the notebook:

import matplotlib as mpl
mpl.rcParams['figure.dpi'] = 300

That’s it !

Answered By: politinsa

Using the solution proposed in this answer has the drawbacks to apply the DPI to all the other figures that will be created within the notebook.

This is fine in most cases, but if you need to set the DPI value ONLY for one figure, you can do it as follows:

plt.imshow(img)
plt.gcf().set_dpi(300)
plt.show()
Answered By: Vito Gentile