21

単一のウィンドウで一連の図を画面にプロットする関数を作成したいと考えています。今では、このコードを書きます:

import pylab as pl

def plot_figures(figures):
    """Plot a dictionary of figures.

    Parameters
    ----------
    figures : <title, figure> dictionary

    """
    for title in figures:
        pl.figure()
        pl.imshow(figures[title])
        pl.gray()
        pl.title(title)
        pl.axis('off')

それは完全に機能しますが、すべての図を単一のウィンドウにプロットするオプションが必要です。そして、このコードはそうではありません。サブプロットについて何か読んだことがありますが、かなりトリッキーに見えます。

4

7 に答える 7

19

のsubplotsコマンド( urinietoが指すコマンドとは異なり、末尾のsに注意)に基づいて関数を定義できます。subplotmatplotlib.pyplot

以下は、あなたの関数に基づいたそのような関数の例であり、図に複数の軸をプロットすることができます。図のレイアウトで必要な行と列の数を定義できます。

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

nrows基本的に、この関数は、必要な行( )と列( )の数に応じて、図にいくつかの軸を作成し、ncols軸のリストを繰り返して画像をプロットし、それぞれにタイトルを追加します。

辞書に画像が1つしかない場合は、以前の構文plot_figures(figures)が機能し、デフォルトでに設定されnrowsncolsいることに注意してください。1

入手できるものの例:

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)

元

于 2012-06-23T18:41:10.450 に答える
2

を使用する必要がありますsubplot

あなたの場合、それは次のようになります(それらを重ねて表示したい場合):

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

他のオプションについては、ドキュメントを確認してください。

于 2012-06-22T16:06:00.650 に答える
0

これを行うこともできます:

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()
于 2019-05-23T14:57:33.597 に答える