前提・実現したいこと
右クリックで範囲を選択し、その範囲の中で一番大きい傾きを正と負の方向両方求めたいです。
試したこと
まず、空のリストを作成し、xの増加量とyの増加量をそれぞれ求め、yの増加量/xの増加量をし、それら全てを空のリストに入れ、そのリストの最大値を求めるという求め方を考えましたが、マウスで選択した範囲で求める場合、毎回要素数が変わるため、xの増加量とyの増加量の求め方がわからず悩んでいます。
アドバイスを頂けたら嬉しいです。よろしくお願いします。
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3 4def oncmask(event): 5 6 global stat 7 global leftind, rightind 8 9 ind=np.searchsorted(xdata,event.xdata) 10 plt.title("You clicked index="+str(ind)) 11 if event.button==3 and stat==1: 12 leftind=ind 13 ax.plot([xdata[ind]],[ydata[ind]],".",color="red") 14 stat=2 15 elif event.button==3 and stat==2: 16 rightind=ind 17 ax.plot(xdata[leftind:rightind],ydata[leftind:rightind],color="red") 18 stat=3 19 print (leftind, rightind) 20 elif event.button==1 and event.dblclick==1 and stat==3: 21 plt.title("Approved") 22 mask[leftind:rightind]=False 23 stat=1 24 elif event.button==2 and stat==3: 25 plt.title("Canceled") 26 ax.plot(xdata[leftind:rightind],ydata[leftind:rightind],color="blue") 27 ax.plot([xdata[leftind]],[ydata[leftind]],".",color="green") 28 stat=1 29 fig.canvas.draw() 30 31def f(x): 32 temp =[] 33 for index in x: 34 temp.append(max(5.*index+10.,-3.*index + 10)) 35 return temp 36 37xdata = np.linspace(-10, 10, num=201) 38ydata = f(xdata)+ 5.*np.random.randn(xdata.size) 39mask=np.ones(len(xdata),dtype=bool) 40 41stat = 1 42fig=plt.figure() 43ax=fig.add_subplot(111) 44ax.plot(xdata,ydata) 45cid = fig.canvas.mpl_connect('button_press_event', oncmask) 46 47plt.show()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/04 15:04