2016-05-30 3 views
0

私はscatterplotを生成している単純なmatplotlibコードを作っています。今、私はポイントに対応する画像を開いて、そのポイントをクリックしたいと思います。たとえば、ポイント1をクリックするとイメージ1が開き、ポイント2にはイメージ2が開きます。ここに私のコードは私が遠くのポイントからクリックした場合でも、それは、画像を開いているyの値が非常に高い(10^3程度のプロットに拡大すると今ここで問題があり、Matplotlib scatterplot:私がクリックしたポイントに対応する画像を開く

import matplotlib.image as mpimg 
import numpy as np 
import matplotlib.pyplot as plt 

x=[1,2,3,4] 
y=[1,4,9,16] 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(x,y,'o') 
coords = [] 

def onclick(event): 
    global ix, iy 
    ix, iy = event.xdata, event.ydata 
    print 'x = %f, y = %f'%(ix, iy) 

    global coords 
    coords.append((ix, iy)) 
    print len(coords) 
    z=len(coords)-1 
    print coords[z][1] 
    per = (10*coords[z][1])/100 
    errp = abs(coords[z][1]+per) 
    errn = abs(coords[z][1]-per) 
    print "errn=%f, errp=%f"%(errn, errp) 

    for i in range(len(x)): 
    if abs(float(y[i])) >= errn and abs(float(y[i])) <= errp : 
     print y[i] 
     fig2 = plt.figure() 
     img=mpimg.imread('white.png') 
     line2 = plt.imshow(img) 
     fig2.show() 
    return coords 

cid = fig.canvas.mpl_connect('button_press_event', onclick) 
plt.show() 

です。むしろ、どこか近くの地域でポイント自体をクリックしたときに私は、画像を必要得ることができる方法

[これが重複質問であれば、私に元の質問へのリンクをお願い]

編集:?追加するのを忘れ画像white.png

答えて

1

ズームしながら、あなたはこれが仕事をしたい場合は、私はクリックが軸の範囲の機能を発生することがあり、その中の距離になるだろう:

import matplotlib.image as mpimg 
import numpy as np 
import matplotlib.pyplot as plt 

plt.close('all') 

x=[1,2,3,4] 
y=[1,4,9,16] 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(x, y, 'o') 

def onclick(event): 
    ix, iy = event.xdata, event.ydata 
    print("I clicked at x={0:5.2f}, y={1:5.2f}".format(ix,iy)) 

    # Calculate, based on the axis extent, a reasonable distance 
    # from the actual point in which the click has to occur (in this case 5%) 
    ax = plt.gca() 
    dx = 0.05 * (ax.get_xlim()[1] - ax.get_xlim()[0]) 
    dy = 0.05 * (ax.get_ylim()[1] - ax.get_ylim()[0]) 

    # Check for every point if the click was close enough: 
    for i in range(len(x)): 
     if(x[i] > ix-dx and x[i] < ix+dx and y[i] > iy-dy and y[i] < iy+dy): 
      print("You clicked close enough!") 

cid = fig.canvas.mpl_connect('button_press_event', onclick) 
plt.show() 
+0

こんにちはバートソリューションのおかげで、これは素晴らしい取り組んでいます。必要に応じてここで働くソリューションを追加します。 – dking

関連する問題