Multiple figures in a single window

冷暖自知 提交于 2019-11-28 00:25:46
gcalmettes

You can define a function based on the subplots command (note the s at the end, different from the subplot command pointed by urinieto) of matplotlib.pyplot.

Below is an example of such a function, based on yours, allowing to plot multiples axes in a figure. You can define the number of rows and columns you want in the figure layout.

def plot_figures(figures, nrows = 1, ncols=1):
    """Plot a dictionary of figures.

    Parameters
    ----------
    figures : <title, figure> dictionary
    ncols : number of columns of subplots wanted in the display
    nrows : number of rows of subplots wanted in the figure
    """

    fig, axeslist = plt.subplots(ncols=ncols, nrows=nrows)
    for ind,title in enumerate(figures):
        axeslist.ravel()[ind].imshow(figures[title], cmap=plt.gray())
        axeslist.ravel()[ind].set_title(title)
        axeslist.ravel()[ind].set_axis_off()
    plt.tight_layout() # optional

Basically, the function creates a number of axes in the figures, according to the number of rows (nrows) and columns (ncols) you want, and then iterates over the list of axis to plot your images and adds the title for each of them.

Note that if you only have one image in your dictionary, your previous syntax plot_figures(figures) will work since nrows and ncols are set to 1 by default.

An example of what you can obtain:

import matplotlib.pyplot as plt
import numpy as np

# generation of a dictionary of (title, images)
number_of_im = 6
figures = {'im'+str(i): np.random.randn(100, 100) for i in range(number_of_im)}

# plot of the images in a figure, with 2 rows and 3 columns
plot_figures(figures, 2, 3)

You should use subplot.

In your case, it would be something like this (if you want them one on top of the other):

fig = pl.figure(1)
k = 1
for title in figures:
    ax = fig.add_subplot(len(figures),1,k)
    ax.imshow(figures[title])
    ax.gray()
    ax.title(title)
    ax.axis('off')
    k += 1

Check out the documentation for other options.

Building on the answer from: How to display multiple images in one figure correctly?, here is another method:

import math
import numpy as np
import matplotlib.pyplot as plt

def plot_images(np_images, titles = [], columns = 5, figure_size = (24, 18)):
    count = np_images.shape[0]
    rows = math.ceil(count / columns)

    fig = plt.figure(figsize=figure_size)
    subplots = []
    for index in range(count):
        subplots.append(fig.add_subplot(rows, columns, index + 1))
        if len(titles):
            subplots[-1].set_title(str(titles[index]))
        plt.imshow(np_images[index])

    plt.show()

You can also do this:

import matplotlib.pyplot as plt

f, axarr = plt.subplots(1, len(imgs))
for i, img in enumerate(imgs):
    axarr[i].imshow(img)

plt.suptitle("Your title!")
plt.show()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!