6

プロットを表示する GUI があります。そのプロットを既存の画像に合わせたい。次を使用して、プロットの下に画像を表示しました。

myaxe.plot(...)
myaxeimage = myaxe.imshow(myimage, axpect='auto', extent=myaxe.axis(), zorder=-1)

私はすでに画像の不透明度を使って遊ぶことができます

myaxeimage.set_alpha()

ここで、既存のプロットと軸に触れることなく、GUI を使用して画像をズームインおよびズームアウトし、移動して、プロットに合わせられるようにしたいと考えています。言い換えれば、指定された要素にスケーリングしsxsy画像の原点を特定の(x,y)ポイントに配置して、軸の外側にある画像の部分を切り取りたいと考えています。どうやってやるの?

4

2 に答える 2

7

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

ここに画像の説明を入力

于 2013-05-24T20:24:11.847 に答える