Python 如何遮罩线下的点?
我在练习matplotlib.pyplot,并使用掩蔽数据(np.ma.masked_where)点。有没有数学公式或方法来屏蔽线下的数据点?预期结果:Python 如何遮罩线下的点?,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我在练习matplotlib.pyplot,并使用掩蔽数据(np.ma.masked_where)点。有没有数学公式或方法来屏蔽线下的数据点?预期结果: points_X = [1,2,3,4,5,6,7,8,9,10] // your points_X data points_Y = [1,2,3,4,5,6,7,8,9,10] // your points_Y data new_points_X=[] new_points_Y=[] for i in range(len(points_X
points_X = [1,2,3,4,5,6,7,8,9,10] // your points_X data
points_Y = [1,2,3,4,5,6,7,8,9,10] // your points_Y data
new_points_X=[]
new_points_Y=[]
for i in range(len(points_X)):
if(points_Y[i] <= points_X[i]):
new_points_Y.append(points_Y[i])
new_points_X.append(points_X[i])
plot(new_points_X, new_points_Y)
points\u X=[1,2,3,4,5,6,7,8,9,10]//您的points\u X数据
points_Y=[1,2,3,4,5,6,7,8,9,10]//您的points_Y数据
新的_点_X=[]
新的_点_Y=[]
对于范围内的i(len(点X)):
如果(点Y[i]是,检查Y值是否低于x值的线性函数。
在您的例子中,它似乎是第一象限的角平分线,所以偏移量是0
,斜率是1
:
y < x
y
一般检查
y < m * x + t # with slope m and offset t
y
也就是说,在你的情况下
y.mask = y < x
plt.plot(x, y)
y.mask=y
例如:
将numpy导入为np
将matplotlib.pyplot作为plt导入
plt.style.use('ggplot'))
图=plt.图()
np.随机。种子(7)#准备数据
x=np.随机。随机(10)
y=np.随机。随机(10)
y=np.ma.掩蔽阵列(y)
#绘制所有值
plt.plot(x,y,'o',ms=10,mec='k',mfc=(0,0,0),label='所有点')
y、 遮罩=y
如果您能展示您的数据点是如何组织的,我可以帮助您更加感谢您的详细回答,mate@ChauLoi不客气-我可以问一下,为什么你接受了更复杂的答案,需要一个循环和所有x和y值的完整副本,这些值应该是可见的,而不是简单的一行?我以为你在寻找什么基于numpy的蒙面数组?@SpghttCd。很抱歉我回复晚了。顺便说一句,我只是一个初学者。我从书本和例子中学习。我倾向于继承它,同时,你更先进,经验更多,因此,你知道哪种方法简单易懂。你可能会觉得它很傻,但这个问题打开了我的思路。
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
fig = plt.figure()
np.random.seed(7) # prepare data
x = np.random.random(10)
y = np.random.random(10)
y = np.ma.masked_array(y)
# plot all values
plt.plot(x, y, 'o', ms=10, mec='k', mfc=(0,0,0,0), label = 'all points')
y.mask = y < x # mask values below angular bisector
plt.plot(x, y, 'bo', label = '$y \geq x$') # plot masked array
plt.plot((0, 1), (0, 1), 'b') # plot angular bisector
m = 3 # prepare the general case
t = -1
y.mask = y < m * x + t # mask values below linear function
plt.plot(x, y, 'rx', label = '$y \geq 3x - 1$') # plot masked array
plt.plot((0, 1), (m*0+t, m*1+t), 'r') # plot linear function
plt.ylim(0, 1)
fig.legend(ncol=3, loc='upper center')