【问题标题】:Hiding all points above a plotted line in a scatter plot隐藏散点图中绘制线上方的所有点
【发布时间】:2019-02-26 01:44:04
【问题描述】:

绘制 2 个星系等效宽度比列表,我将它们相互绘制,然后我想消除线 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))  

提前感谢任何建议!

【问题讨论】:

  • 如果 y2 包含您的点,那么您可以使用列表推导过滤掉 y2 的值​​,给定一个高于 y 的 x。
  • y 和 y2 都是在散点图上绘制的线,数据绘制在 NT 和 OT 这两个比率,我不确定您将如何使用列表理解来完成这项工作
  • 我明白了。您可以遍历 NT 和 OT 的每个点,如果它低于必须低于的 y 值,则仅将其包含在要绘制的点列表中。类似于this question 的解决方案。让我知道这是否有帮助。

标签: python python-3.x matplotlib


【解决方案1】:

我相信最简单的方法是在绘图之前简单地过滤出所需的点,您可以这样做

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)

举个完整的例子:

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

要删除渐近线,您可以过滤大于和小于的值 x = 0.05 并分别绘制两组,即

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

在这种情况下你需要指定颜色,否则两个区域会有不同的颜色。此外,如果您需要为图例标记线,只需将两者之一指定为 label - 如果您为每个区域指定一个,您最终将获得两个图例条目。

【讨论】:

  • 谢谢!这正是我所追求的
  • 对不起,我没有在第一篇文章中包含这个,你会不会碰巧知道如何隐藏渐近线,我已经搜索了 matplotlib 文档,但看不到有办法,感谢任何帮助!
  • @JoshMarsh 你是指蓝线的垂直部分吗?还是整件事?
  • 只是垂直部分,我已经限制了轴,但我认为这只是一个视觉限制。由于那条垂直线将 -infinity 连接到 +infinity 我需要一种删除它的方法,谢谢!
  • @JoshMarsh 查看编辑后的答案,如果它解决了问题,请确保点击复选标记接受它
猜你喜欢
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-30
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 2021-10-29
相关资源
最近更新 更多