Displaying image with matplotlib in ipython - python

How can I display an image imported with numpy package using matplotlib in ipython?
It should be fairly easy with the command
import numpy as np
import matplotlib.pyplot as plt
im = np.array(Image.open('image.jpg'))
plt.imshow(im)
But the image does not show and I just get the output
<matplotlib.image.AxesImage at 0x7fb38e10ff10>

You must call plt.show() to actually bring up the windows.
You can get around this by using interactive mode. But for scripts it is better to simply call show() after completing all your plotting commands.

In IPython or Jupyter notebooks, if you want to show images as inline in the notebook and not in a separate window, implement the code shown below.
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
im = np.array(Image.open('image.jpg'))
plt.imshow(im)
plt.show()

Related

Matplotlib shows nothing in Jupyter notebook

I am working with Matplotlib and came across with Object Oriented Method to create plots with Matplotlib. So I wrote the following code in Jupyter Notebook
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x=np.linspace(0,5,11)
y=x**2
fig=plt.figure()
axes=fig.add_axes([0.1,0.1,0.8,0.8])
axes.plot(x,y)
But I don't get any plot after running it. I tried looking other answers but couldn't solve my problem. So, my question is how do Object Oriented Interface in Matplotlib actually works and how and why it is better than functional method of Matplotlib?
Thanks.

Why am I getting UserWarning: Matplotlib is currently using ps, which is a non-GUI backend, so cannot show the figure

This is not in a jupyter notebook so this is not a duplicate of this question, but my code is:
from gluoncv import model_zoo, data, utils
from matplotlib import pyplot as plt
...
plt.show()
The error I'm getting is:
/figure.py:445: UserWarning: Matplotlib is currently using ps, which is a non-GUI backend, so cannot show the figure.
% get_backend())
I created a repl at https://repl.it/#shamoons/WelloffHarmfulMineral
If it matters, I'm using OS X. What do I need to do to get the image to show?
You can use
matplotlib.use("TkAgg")
instead of
matplotlib.use("PS")
when developing on MacOS.
Please note that the import should be before importing plt, like this:
import matplotlib
matplotlib.use('TkAgg')
from matplotlib import pyplot as plt
matplotlib.use('PS') and plt.show() are mutually exclusive. You need to decide:
Do you want to show the figure on screen? Solution: Remove the line matplotlib.use('PS').
Do you want to use the PS backend? This seems unlikely, because there is rarely a reason to set the backend to something non-interactive unless working on a server. Anyways, solution: Replace plt.show() by plt.savefig("filname.ps").

jupyter notebook matplotlib figureframe changes size unexpectedly

I'm trying to have a jupyter notebook shows a progression of plots in a for loop. The code works, but for some reason the size of the figure changes after the for loop is done. Here's a set of minimal code to illustrate this (in jupyter notebook)
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib notebook
for i in range(10):
plt.gca().scatter(np.random.rand(10),
np.random.rand(10))
plt.gcf().canvas.draw()
plt.gcf().canvas.flush_events()
plt.pause(0.5)
A gif illustrating the issue is attached. This problem has been driving me crazy and changing margins or using tight_layouts() do not help. It seems to be related to how FigureFrame object is rendered. Thanks for the help!
Here comes the advantage of matplotlib.animation into play. It'll make sure the figure is completely drawn before starting the animation.
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
def animate(i):
plt.gca().scatter(np.random.rand(10),
np.random.rand(10))
ani = FuncAnimation(plt.gcf(), animate, frames=10, interval=500)
plt.show()

How to get interactive plot of pyplot when using pycharm

I am using PyCharm as the IDE for python, and when you make a plot (with the same code like pyplot.plot(...), pyplot.show()) pycharm displays it within its IDE. However, this looks like a static image. When you zoom in, the plot starts to blur.
In other IDE, pyplot creates an interactive plot. When you zoom in, it basically re-plots the curve. And you can also drag the plot. Is there anyway in PyCharm I can have the interactive plot from pyplot?
Just need to change your plotting backend.
If you're on macOS:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.use('macosx')
plt.plot(range(10))
should produce a new window that looks like this:
Or if you prefer a different backend or are on Windows (as #MichaelA said)
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.use('Qt5Agg') # or can use 'TkAgg', whatever you have/prefer
plt.plot(range(10))

Matplotlib in python on a mac opens a new window

I am new to the world of mac. In python we I want to visualize a data, I use matplotlib's pyplot to generate a plot but when I do pyplot.show() it creates a new window. This behavior also happens inside my ipython notebook too - see image below. I wanted it to embed the image inside the notebook.
How can I correct this ?
Try ipython notebook --pylab inline when you launch ipython.
Input in a cell, the cell magic %pylab inline or %matplotlib inline will make the plots appear inline/interactive (instead of a new window).
Not that if you use %matplotlib cell magic, you still need import matplotlib.pyplot as plt and import numpy as np etc. With %pylab cell magic you don't.

Categories

Resources