Matplotlibでimshow()の画像を3D空間にプロットする方法
Matplotlibでimshow()の画像を3D空間にプロットする方法
Matplotlibでは、imshow()で表示するような2Dデータを3D空間上にプロットすることができます。本記事では、2D画像表示と3D等高線プロットを並べて表示する具体的な手順とサンプルコードを分かりやすく解説します。
実装の手順
- NumPyを使用してxxとyyのメッシュグリッドデータポイントを作成します。
- X、Y、Zをもとに2Dデータ(data)を生成します。
- figure()メソッドで新しい図を作成、または既存の図をアクティブ化します。
- サブプロット配置の一部としてax1を図に追加します。
- imshow()を使ってデータを2Dの正規ラスタ画像として表示します。
- 同様に、3D投影を指定したax2を図に追加します。
- contourf()で塗りつぶし等高線のセットを作成・保存します。
- show()メソッドで図を表示します。
サンプルコード
import matplotlib.pyplot as plt import numpy as np from matplotlib import cm plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True xx, yy = np.meshgrid(np.linspace(0, 1, 10), np.linspace(0, 1, 10)) X = xx Y = yy Z = 10 * np.ones(X.shape) data = np.cos(xx) * np.cos(xx) + np.sin(yy) * np.sin(yy) fig = plt.figure() ax1 = fig.add_subplot(121) ax1.imshow(data, cmap="plasma", interpolation='nearest', origin='lower', extent=[0, 1, 0, 1]) ax2 = fig.add_subplot(122, projection='3d') ax2.contourf(X, Y, data, 100, zdir='z', offset=0.5, cmap="plasma") plt.show()
コードの解説
まずnp.meshgrid()とnp.linspace()により、0〜1の範囲を持つ10×10のグリッド座標を生成します。続いて、dataとして cos²x + sin²y の計算結果を格納しています。
左側のサブプロット(ax1)ではimshow()を使用し、カラーマップ「plasma」で2D画像として描画します。origin='lower'を指定することで原点が左下に設定され、extent=[0, 1, 0, 1]によってデータの座標範囲を明示的に指定しています。
右側のサブプロット(ax2)ではprojection='3d'を指定して3D軸を作成し、contourf()で100段階の塗りつぶし等高線を描画します。ここで重要なのがzdir='z'とoffset=0.5の指定です。これにより、2Dの等高線がZ=0.5の平面上に配置され、3D空間内に「浮かんで」表示されます。
出力結果

スクリプトを実行すると、左側に2Dの画像表示、右側に同じデータをZ=0.5平面に配置した3D等高線プロットが並んで表示されます。この手法は、2Dデータを立体的な文脈で可視化したい場合や、複数のデータ層を3D空間に重ねて表現したい場合に非常に便利です。
-
NumPyとMatplotlibで画像セグメンテーションをオーバーレイ表示する方法
NumPyとMatplotlibを組み合わせると、画像セグメンテーションの結果を元画像の上に重ねて(オーバーレイ)表示できます。マスク配列を活用すれば、検出した領域だけを色付きで半透明に強調することが可能です。 実装の手順 10×10のサイズを持つマスク配列を作成します。 一部の領域(中央部分)の値を1に更新します。 NumPyを使って画像データを生成します。 条件を満たす要素をマスクし、マスク済みデータを作成します。 figure()メソッドで新しい図を作成、または既存の図をアクティブ化します。 imshow()メソッドでデータを2次元ラスタ画像として表示します。 show()メソッドで図
-
Matplotlibのグラフをフルスクリーンで表示する方法
Matplotlibで作成したグラフをフルスクリーン(全画面)で表示したい場合、full_screen_toggle()メソッドを使用すると簡単に実現できます。このメソッドは、現在開いているフィギュアウィンドウを全画面モードに切り替える機能を持ちます。 手順 figure()メソッドを使って、新しいフィギュアを作成するか、既存のフィギュアをアクティブにします。 2つのリストを渡してplot()メソッドを呼び出し、折れ線グラフを描画します。 get_current_fig_manager()メソッドで、現在のフィギュアのマネージャー(figure manager)を取得します。 取得したマネー