Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python Matplotlibでsubplotとimshow使用時の白い境界線(余白)を削除する方法

PythonのMatplotlibでsubplotimshow()を使って画像を表示すると、図の周囲に白い境界線(余白)が現れることがあります。これは、Axesがデフォルトでマージンやパディングを持つためです。この白い余白を完全に取り除き、画像だけで画面を埋める表示を実現するには、以下の手順に従います。

白い境界線を削除する手順

  • 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
  • NumPyを使ってランダムなデータポイントを作成します。
  • データの形状(サイズ)を取得します。
  • データのアスペクト比に合わせて、図のサイズをインチ単位で設定します。
  • 図の要素全体を覆うAxesインスタンスを作成します。
  • set_axis_off()で軸を非表示にします。
  • 作成したAxesをfigureに追加します。
  • imshow()でデータを2次元の正規ラスタ画像として表示します。
  • plt.show()メソッドで図を描画します。

サンプルコード

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

# 0〜49の範囲で50x50のランダムな整数データを生成
data = np.random.randint(0, 50, (50, 50))
sizes = np.shape(data)

fig = plt.figure()
# データのアスペクト比に合わせて図のサイズを設定
fig.set_size_inches(1. * sizes[0] / sizes[1], 1, forward=False)

# 図全体(左0・下0・幅100%・高さ100%)を占めるAxesを作成
ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()

fig.add_axes(ax)
ax.imshow(data)

plt.show()

ポイント解説

このコードの鍵となるのは plt.Axes(fig, [0., 0., 1., 1.]) の部分です。リスト [left, bottom, width, height] をすべて0〜1の範囲で指定することで、Axesがfigure領域を端から端まで完全にカバーします。さらに ax.set_axis_off() で目盛りや軸ラベルを非表示にすることで、余白なしの画像表示が可能になります。

また、fig.set_size_inches() でデータの縦横比に合わせた図のサイズを指定しているため、画像が引き伸ばされずに正しい比率で表示されます。

出力結果

上記のコードを実行すると、軸・目盛り・余白が一切ない、画像のみが表示された図が出力されます。

Python Matplotlibでsubplotとimshow使用時の白い境界線(余白)を削除する方法Python Matplotlibでsubplotとimshow使用時の白い境界線(余白)を削除する方法

補足:保存時にも余白をなくすには

表示だけでなく、savefig() で画像ファイルとして保存する際にも余白を消したい場合は、以下のように bbox_inches='tight'pad_inches=0 を指定すると便利です。

plt.savefig("output.png", bbox_inches='tight', pad_inches=0)
  1. Matplotlibで任意のデータを使って4Dプロットを作成する方法

    Matplotlibでは、x・y・z の3つの座標データに加え、c(色) を第4の次元として割り当てることで、いわゆる「4Dプロット」を実現できます。これは実際には3D散布図にカラーマップを組み合わせたものであり、点の位置が3次元情報を、色がもう1つの変数を表現します。以下の手順に従うことで、標準正規分布に従うランダムなデータポイントを使った4Dプロットを簡単に作成できます。手順figure() メソッドを使用して、新しい図を作成するか、既存の図をアクティブ化します。サブプロット構成の一部として、3D投影(projection=3d)を指定した Axes を追加します。NumPy を使って x

  2. PythonとMatplotlibで複数のプロットを1つの図に描画する方法

    Matplotlibは、データ可視化のために広く利用されている人気のPythonパッケージです。データの可視化は非常に重要なステップです。生の数値を目で追ったり複雑な計算を実行したりしなくても、データの中で何が起きているのかを直感的に把握できるようになるからです。また、定量的な洞察を聴衆に対して効果的に伝える手段としても役立ちます。Matplotlibは、データをもとに2次元のプロットを作成するために使われます。オブジェクト指向のAPIを備えており、Pythonアプリケーションへプロットを簡単に組み込むことができます。IPythonシェル、Jupyter Notebook、Spyderなどの開