2

画像とカラーマップの両方をプロットする次の例を参照してください。

ここに画像の説明を入力

コード:

imgplot = plt.imshow(lum_img)
plt.colorbar()

ここから: http://matplotlib.org/users/image_tutorial.html

しかし、コンソールからこれを行うと、次のようになります。

ここに画像の説明を入力

つまり、画像がすぐに表示され、2 番目のコマンドを待機せず、2 番目のコマンドの後に次のエラーが発生します。

RuntimeError: カラーバーの作成に使用するマップ可能なものが見つかりませんでした。最初に、イメージ (imshow を使用) や輪郭セット (contourf を使用) などのマッピング可能オブジェクトを定義します。

4

1 に答える 1

4

これは、両方のコマンドを別々に実行したために発生します。

最初のコマンドでは、画像が作成され、インラインで表示されます。その後、Figure オブジェクトは破棄され、変更できなくなります。

2 番目のコマンドは、イメージを含まない新しい Figure に適用されます。

考えられる解決策はいくつかあります。

例 1: 通常モード

これにより、図が別のウィンドウに表示されます。すべての操作は同じ Figure に適用され、 で表示されるまで非表示のままplt.show()です。この関数は、Figure が閉じられるまでスクリプトをブロックします。

In [1]: import matplotlib.pyplot as plt

In [2]: import matplotlib.image as mpimg

In [3]: img = mpimg.imread('/tmp/stinkbug.png')

In [4]: lum_img = img[:, :, 0]

In [5]: plt.imshow(lum_img)
Out[5]: <matplotlib.image.AxesImage at 0x7f1a24057748>

In [6]: plt.colorbar()
Out[6]: <matplotlib.colorbar.Colorbar at 0x7f1a24030a58>

In [7]: plt.show()

例 2: 対話モード

これは例 1 と同じですが、Figure ウィンドウがすぐに表示され、連続するプロット呼び出しで更新されます。(私にとってこれは IPython で機能しますが、Jupyter QtConsole では黒いウィンドウしか表示されません。)

In [1]: import matplotlib.pyplot as plt

In [2]: import matplotlib.image as mpimg

In [3]: plt.ion()

In [4]: img = mpimg.imread('/tmp/stinkbug.png')

In [5]: lum_img = img[:, :, 0]

In [6]: plt.imshow(lum_img)
Out[6]: <matplotlib.image.AxesImage at 0x7f7f2061e9b0>

In [7]: plt.colorbar()
Out[7]: <matplotlib.colorbar.Colorbar at 0x7f7f20605128>

例 3: インライン プロット

インライン モードが必要な場合は、次のように、1 つの入力行で複数のコマンドを実行するだけです。

ここに画像の説明を入力

例 4: 高度なインライン プロット

Figure オブジェクトを手動で作成します。このオブジェクトに対して操作 (サブプロットの作成、イメージの描画、カラーバーの追加) を実行し、コマンド ラインにその名前を入力するだけでいつでもインライン Figure を表示できます。

ここに画像の説明を入力

于 2016-02-09T12:22:37.373 に答える