|
画像を表示する前に画像を補間することもできます。これはデータの表示方法を操作する可能性があるので注意してください。しかし、あな>たが望む外観を達成するのに役立ちます。以下では、3 つの異なる補間方法で補間された同じ(小さい)配列を表示します。
A [i、j] におけるピクセルの中心は、i + 0.5、i + 0.5 でプロットされる。 interpolation = 'nearest' を使用している場合、(i、j)と(i + 1、j + 1)で囲まれた領域は同じ色になります。補間を使用している場合、ピクセル中心は最も近いものと同じ色になりますが、他のピクセルは隣接するピクセル間で補間されます。
それ以前のバージョンのmatplotlib(< 0.63)では、表示制限が表示されないように設定することで、エッジ効果を非表示にしようとしました 。最近のantigrain のバグ修正と、この修正を利用した matplotlib._image モジュールの新しい実装は、もはやこれを必要としません。エッジ効果を防ぐために、補間を行うときに、matplotlib._imageモジュールは入力配列をエッジのまわりの同じピクセルで塗りつぶします。たとえば、次のような色a-yを持つ5×5の配列があるとします。
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
_imageモジュールは、パディングされた配列を作成します。
a a b c d e e
a a b c d e e
f f g h i j j
k k l m n o o
p p q r s t t
o u v w x y y
o u v w x y y
interpolation / resizing を行い、中央領域を抽出する。 これは、あなたのアレイのエッジエフェクトの全範囲をプロットしたり、異なる補間方法で異なるサイズの複数の画像を重ね合わせることができます。 この新しい一時的なパッド付き配列を作成する必要があるため、パフォーマンスヒットも意味します。 洗練された補間はパフォーマンスヒットを意味するため、最大限のパフォーマンスが必要な場合や非常に大きな画像を使用する場合は、interpolation = 'nearest' が推奨されます。
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib.path import Path
from matplotlib.patches import PathPatch
A = np.random.rand(5, 5)
fig, axs = plt.subplots(1, 3, figsize=(10, 3))
for ax, interp in zip(axs, ['nearest', 'bilinear', 'bicubic']):
ax.imshow(A, interpolation=interp)
ax.set_title(interp.capitalize())
ax.grid(True)
plt.show()

origin パラメータを使用して、配列の原点 x[0,0] を左上または右下にプロットするかどうかを指定できます。 また、matplotlibrc ファイルのデフォルト設定 image.origin を制御することもできます。 このトピックの詳細については、原点と範囲に関する完全なガイドを参照してください。
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib.path import Path
from matplotlib.patches import PathPatch
x = np.arange(120).reshape((10, 12))
interp = 'bilinear'
fig, axs = plt.subplots(nrows=2, sharex=True, figsize=(3, 5))
axs[0].set_title('blue should be up')
axs[0].imshow(x, origin='upper', interpolation=interp)
axs[1].set_title('blue should be down')
axs[1].imshow(x, origin='lower', interpolation=interp)
plt.show()

最後に、clip path を使って image を表示します。
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib.path import Path
from matplotlib.patches import PathPatch
delta = 0.025
x = y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2
path = Path([[0, 1], [1, 0], [0, -1], [-1, 0], [0, 1]])
patch = PathPatch(path, facecolor='none')
fig, ax = plt.subplots()
ax.add_patch(patch)
im = ax.imshow(Z, interpolation='bilinear', cmap=cm.gray,
origin='lower', extent=[-3, 3, -3, 3],
clip_path=patch, clip_on=True)
im.set_clip_path(patch)
plt.show()

|