似たような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_xlimandax.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()
