Python 在散点图中隐藏绘制线上方的所有点

Python 在散点图中隐藏绘制线上方的所有点,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,绘制两个银河系等效宽度比列表,我将它们相对绘制,然后我想消除线上方的所有点y=(0.61)/(x-0.05)+1.3,以便只有下面的点保留在绘图中。这是我到目前为止所做的,我已经看过了堆栈溢出,但我不知道如何实现这一点。注意:我只想消除上面的y而不是y2点,谢谢 plt.scatter(NT,OT,s=5, c='r', marker='o') x = np.linspace(-5,5,100) y=(0.61)/(x-0.05)+1.3 y2 =((0.61)/(x-0.47)) + 1.19

绘制两个银河系等效宽度比列表,我将它们相对绘制,然后我想消除线上方的所有点
y=(0.61)/(x-0.05)+1.3
,以便只有下面的点保留在绘图中。这是我到目前为止所做的,我已经看过了堆栈溢出,但我不知道如何实现这一点。注意:我只想消除上面的
y
而不是
y2
点,谢谢

plt.scatter(NT,OT,s=5, c='r', marker='o')
x = np.linspace(-5,5,100)
y=(0.61)/(x-0.05)+1.3
y2 =((0.61)/(x-0.47)) + 1.19#
plt.plot(x, y, '-k')
plt.plot(x, y2, '--k')
plt.xlabel('log(NII/HA)', color='#1C2833')
plt.ylabel('log(OIII/HB)', color='#1C2833')
plt.ylim((-1,1.5))   
plt.xlim((-2,0.5))  

提前感谢,如有任何建议,将不胜感激

我认为最简单的方法是在绘图之前过滤出所需的点,您可以使用

filteredx = list()
filteredy = list()
for ii in range(len(NT)):
    if OT[ii] < (0.61) / (NT[ii] - 0.05) + 1.3:    #Adjust equation as needed
        filteredx.append(NT[ii])
        filteredy.append(OT[ii])
plt.scatter(filteredx, filteredy)


在这种情况下,您需要指定颜色,否则这两个区域将具有不同的颜色。此外,如果需要为图例标记线,只需给两个标签中的一个a
标签
——如果你给每个区域一个标签,你将得到两个图例条目。

如果y2包含你的点,那么你可以使用列表理解来过滤掉y2的值,给定一个高于y的x。y和y2都是散点图上绘制的线,并且数据是由NT和OT绘制的这是两个比率,我通常会告诉你如何使用列表理解来实现这一点。您可以检查NT和OT的每个点,并且仅当它低于必须低于的y值时,才将其包含在要绘制的点列表中。类似于中的解决方案。如果有帮助,请告诉我。请阅读谢谢!这正是我事后的想法,我没有在第一篇文章中提到这一点,你会知道如何隐藏渐近线吗,我已经浏览了matplotlib文档,但看不到有办法,谢谢你的帮助@乔什·马什:你是说蓝线的垂直部分?还是整件事?只是垂直部分,我限制了轴,但我认为这只是视觉上的限制。由于这条垂直线连接着-无穷大和+无穷大,我需要一种方法来移除它,谢谢@JoshMarsh看到编辑过的答案,如果它解决了问题,请确保选中复选标记接受它
import numpy as np
import matplotlib.pyplot as plt

# Create random data for demonstration
np.random.seed(1)
n = 200
datay = np.random.randn(n)*50
datax = np.random.randn(n)*1.5
x = np.linspace(-5, 5, 1000)
y = (0.61) / (x - 0.05) + 1.3

filteredx = list()
filteredy = list()
plt.scatter(datax, datay, marker='o', color='g', label="All Points")
for ii in range(n):
    if datay[ii] < (0.61) / (datax[ii] - 0.05) + 1.3:
        filteredx.append(datax[ii])
        filteredy.append(datay[ii])
plt.scatter(filteredx, filteredy, marker='.', color='r', label="After Filtering")
plt.plot(x,y, linewidth=1, linestyle='-')
plt.legend()
plt.show()
plt.plot(x[x < 0.05], y[x < 0.05], linewidth=1, linestyle='-', color='b')
plt.plot(x[x > 0.05], y[x > 0.05], linewidth=1, linestyle='-', color='b')