Zhisi
Zhisi

Reputation: 131

about .show() of matplotlib

I am working with matplotlib to generate some graphs but I do not know the difference between these two ways of showing an image. I already read some documentation about it but I do not understand yet.

First way:

import matplotlib.pyplot as plt

plt.figure()
plt.plot(x, y)
plt.show()

Second way:

import matplotlib.pyplot as plt

graph = plt.figure()
plt.plot(x, y)
graph.show()

I think this two ways do not do the same thing but it is not clear to me.

Could someone explain it step by step for the two ways?

Upvotes: 3

Views: 87

Answers (3)

ImportanceOfBeingErnest
ImportanceOfBeingErnest

Reputation: 339052

Simplified, plt.show() will start an event loop and create a graphical representation for each figure that is active inside the pyplot state.

In contrast, fig.show(), where fig is a figure instance, would show only this figure. Since it would also not block, it is (only) useful in interactive sessions; else the figure would be closed directly after showing it due to the script exiting.

In the usual case you would hence prefer plt.show(). This does not prevent you from using the object-oriented interface. A recommended way of creating and showing a figure is hence,

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

For two windows you can just repeat the plotting,

import matplotlib.pyplot as plt

fig1, ax1 = plt.subplots()
ax1.plot(x1, y1)

fig2, ax2 = plt.subplots()
ax2.plot(x2, y2)
plt.show()

Upvotes: 1

ralf htp
ralf htp

Reputation: 9412

plt.figure returns an object that is assigned with graph = plt.figure() to graph . this is used when specific characteristics of this object ( the plot ) are intended to be changed, now the object can be refered to by its instance graph ( object-based plotting )

you use this i.e. if you want to access the axes of the graph or labels, subplots, ...

see https://python4mpia.github.io/plotting/advanced.html for object-based plotting

to manipulate the plot object you have to get a reference to it ( handle ) and this is done by graph = plt.figure() ( cf Object-Oriented Programming )

Upvotes: 0

Brad Campbell
Brad Campbell

Reputation: 3071

Matplotlib has two styles of API implemented. One is object based (graph.show()) and the other is procedural (plt.show()) and looks a lot like the Matlab plotting API.

The procedural API works on the current figure and/or set of axes. You can always getting the current figure with plt.gcf() and the current axes with plt.gca().

There are occasionally some slight differences in syntax here and there. For example, if you want to set the x axis limits:

plt.xlim([0, 10])

or

ax = plt.gca()
ax.set_xlim([0, 10])

Upvotes: 0

Related Questions