Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a plot in matplotlib without using pyplot

I've been using matplotlib for five months now on a daily basis, and I still find creation of new figures confusing.

Usually I create a figure with 2x2 subplots using, for example, somthing like:

import matplotlib.pyplot as plt
import itertools as it
fig,axes = plt.subplots(2,2)
axit = (ax for ax in it.chain(*axes))
for each of four data series I want to plot:
    ax = next(axit)
    ax.plot(...)

The question I have now is: how can operate completely independently of pyplot, ie, how can I create a figure, populate it with plots, make style changes, and only tell that figure to appear at the exact moment I want it to appear. Here is what I am having trouble with:

import matplotlib as mpl
gs = gridspec.GridSpec(2,2)
fig = mpl.figure.Figure()
ax1 = fig.add_subplot(gs[0])
ax1.plot([1,2,3])
ax2 = fig.add_subplot(gs[1])
ax2.plot([3,2,1])

After running the above, the only thing that comes to mind would be to use:

plt.draw()

But this does not work. What is missing to make the figure with the plots appear? Also, is

fig = mpl.figure.Figure()

all I have to do to create the figure without pyplot?

like image 409
evianpring Avatar asked Jun 12 '15 17:06

evianpring


People also ask

How do I create a separate plot in matplotlib?

To create multiple plots use matplotlib. pyplot. subplots method which returns the figure along with Axes object or array of Axes object. nrows, ncols attributes of subplots() method determine the number of rows and columns of the subplot grid.

Is matplotlib and Pyplot the same?

pyplot is a collection of functions that make matplotlib work like MATLAB. Each pyplot function makes some change to a figure: e.g., creates a figure, creates a plotting area in a figure, plots some lines in a plotting area, decorates the plot with labels, etc.

Can Numpy be used to make plots in Python?

For plotting graphs in Python, we will use the Matplotlib library. Matplotlib is used along with NumPy data to plot any type of graph. From matplotlib we use the specific function i.e. pyplot(), which is used to plot two-dimensional data.


1 Answers

You could attach a suitable backend to your figure manually and then show it:

from matplotlib.backends import backend_qt4agg  # e.g.
backend_qt4agg.new_figure_manager_given_figure(1, fig)
fig.show()

... but why not use pyplot?

like image 106
xnx Avatar answered Oct 28 '22 13:10

xnx