绘图上的用户鼠标输入以获取积分限制-python [英] User mouse input on plot for integration limits - python

查看:93
本文介绍了绘图上的用户鼠标输入以获取积分限制-python的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个分布,并且希望在用户单击鼠标在分布图上选择的自定义范围内进行积分.

I have a distribution and I wish to integrate over a custom range selected by the user's mouse click on the distribution's plot.

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的积分.

At this point I would like to be able to select the lower and upper bounds of x over which the integral of y will be calculated.

即.

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)

推荐答案

如果您想要最简单的选项,请使用point1, point2 = plt.ginput(2).

If you want the simplest possible option, use point1, point2 = plt.ginput(2).

point1point2将是x,y的元组,因此您想在示例中使用a, b = point1[0], point2[0].

point1 and point2 will be tuples of x,y, so you'd want a, b = point1[0], point2[0] in your example.

作为一个简单的例子:

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()

这篇关于绘图上的用户鼠标输入以获取积分限制-python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆