我有一个发行版,我希望整合一个自定义范围,用户通过鼠标点击发行版的情节选择。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from scipy.integrate import trapz
# Probability Density Function
pdf = stats.norm.pdf
#adjust the location and scale of the distribution
loc1, scale1, size1 = (20, 1.5, 500)
loc2, scale2, size2 = (28, 2.5, 500)
# Probability Density Function
pdf = stats.norm.pdf
x2 = np.concatenate([np.random.normal(loc=loc1, scale=scale1, size=size1),np.random.normal(loc=loc2, scale=scale2, size=size2)])
x_eval = np.linspace(x2.min() - 1, x2.max() + 1, 1000)
bimodal_pdf = pdf(x_eval, loc=loc1, scale=scale1) * float(size1) / x2.size + pdf(x_eval, loc=loc2, scale=scale2) * float(size2) / x2.size
plt.figure()
plt.plot(x_eval,bimodal_pdf)
plt.show()
此时我希望能够选择x的下限和上限,y的整数将被计算出来。
即
a = User mouse click x position 1
b = User mouse click x position 2
area = trapz(y[a,b], x[a:b])
print 'the area under curve between x1 and x2 = ' + str(area)
答案 0 :(得分:3)
如果您想要最简单的选项,请使用point1, point2 = plt.ginput(2)
。
point1
和point2
将是x,y的元组,因此您的示例中需要a, b = point1[0], point2[0]
。
作为一个简单的例子:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set(title='Click Twice', xlabel='X', ylabel='Y')
point1, point2 = fig.ginput(2) # Or equivalently, "plt.ginput"
ax.autoscale(False)
ax.axvspan(point1[0], point2[0], color='red', alpha=0.5)
fig.canvas.draw()
plt.show()