似たようなmatplotlibで配布されている透かしの例があります。そのコードから始めて、次のように変更できます。
ax.imshow
最初にイメージをプロットするために使用します。これを行うのは、extent
パラメータが の最終範囲に影響するためですax
。最終範囲を によって管理したいので、plt.plot(...)
最後に置きましょう。
myaximage = ax.imshow(im, aspect='auto', extent=(1,15,0.3,0.7), alpha=0.5, origin='upper', zorder=-1)
の代わりにextent=myaxe.axis()
、 を使用extent
して画像の位置とサイズを制御します。左下隅と右上隅をextent=(1,15,0.3,0.7)
長方形に画像を配置します。(1, 0.3)
(15, 0.7)
ではorigin='upper'
、[0,0]
配列のインデックスはim
範囲の左上隅に配置されます。それを使用origin='lower'
すると、左下隅に配置されます。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import matplotlib.image as image
np.random.seed(1)
datafile = cbook.get_sample_data('logo2.png', asfileobj=False)
im = image.imread(datafile)
fig, ax= plt.subplots()
myaximage = ax.imshow(im, aspect='auto', extent=(1,15,0.3,0.7), alpha=0.5, zorder=-1)
ax.plot(np.random.rand(20), '-o', ms=20, lw=2, alpha=1.0, mfc='orange')
ax.grid()
plt.show()
画像を拡大してプロットの範囲にクリップしたい場合は、ax.set_xlim
andax.set_ylim
も使用する必要がある場合があります。
myaximage = ax.imshow(im, aspect='auto', extent=(-1,25,0.3,0.7), alpha=0.5, zorder=-1,
origin='upper')
ax.plot(np.random.rand(20), '-o', ms=20, lw=2, alpha=1.0, mfc='orange')
ax.set_xlim(0,20)
ax.set_ylim(0,1)
または、さらに制御するために、以下を使用して画像を任意のパスにクリップできますmyaximage.set_clip_path
。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import matplotlib.image as image
import matplotlib.patches as patches
np.random.seed(1)
datafile = cbook.get_sample_data('logo2.png', asfileobj=False)
im = image.imread(datafile)
fig, ax= plt.subplots()
myaximage = ax.imshow(im, aspect='auto', extent=(-5,25,0.3,0.7),
alpha=0.5, origin='upper',
zorder=-2)
# patch = patches.Circle((300,300), radius=100)
patch = patches.Polygon([[5, 0.4], [15, 0.4], [15, 0.6], [5, 0.6]], closed=True,
transform=ax.transData)
myaximage.set_clip_path(patch)
ax.plot(np.random.rand(20), '-o', ms=20, lw=2, alpha=1.0, mfc='orange',
zorder=-1)
ax.set_xlim(0, 20)
ax.set_ylim(0, 1)
plt.show()