【问题标题】:How to hide some dots in a matplotlib scatter? [duplicate]如何在 matplotlib 散点图中隐藏一些点? [复制]
【发布时间】:2017-10-26 07:20:19
【问题描述】:
import matplotlib.pyplot as plt
import numpy as np
y = np.random.rand(100)
plt.scatter(list(range(100)), y)

上面的推荐会用matplotlib画一个散点图。

假设我想隐藏值小于 0.5 的点。同时,我应该保持 x 轴不变。我该怎么做?

【问题讨论】:

  • 不要绘制您不想绘制的点,根据需要指定 xlim。就如此容易。这种方法有什么问题?
  • 我没看懂,你能给我看看代码吗? @朱利安
  • 不,这不是 SO 的工作方式,先自己尝试一下。
  • @Julien 假设 x=[0,1,2,3,4], y=[0.6, 0.5, 0.3, 0.8, 0.9]。我只想隐藏0.3点,其他点保持不变。
  • @Julien 我想你误解了我的问题。我有 (0,0.6), (1, 0.5), (2, 0.3), (3, 0.8), (4, 0.9) 这五个点。我想隐藏 (2, 0.3) 并保持其他不变。如果使用你的方法,我会得到 (0,0.6), (1, 0.5), (2, 0.8), (3, 0.9)。这不是我想要的。

标签: python matplotlib


【解决方案1】:

您可以创建一个仅选择满足y > 0.5 的点的掩码:

x = np.arange(100)
y = np.random.rand(100)
mask = y > 0.5
plt.scatter(x[mask], y[mask])

【讨论】:

    【解决方案2】:

    对于这样的事情,我将使用for 循环并创建一个新变量y1 并将y 中小于0.5 的所有值替换为NaN 然后绘制y1。所以从这里(改变了 numpy 函数也给你一些负数)

        import matplotlib.pyplot as plt
        import numpy as np
        y = np.random.randint(low=-100,high=100, size=100)
        plt.scatter(list(range(0,len(y))), y)
        plt.show()
    

    到这里:

        import matplotlib.pyplot as plt
        import numpy as np
        y = np.random.randint(low=-100,high=100, size=100)
        y1 = []
        for i in y:
            if i < 0.5:
                i = 'NaN'
            y1.append(i)
    
        plt.scatter(list(range(0,len(y1))), y1)
        plt.show()
    

    你可以通过绘制两者来查看结果

        plt.scatter(list(range(0,len(y))), y)
        plt.scatter(list(range(0,len(y))), y1)
    

    这可能不是最好的答案,但确实可以。

    【讨论】:

    • 非常感谢!它真的奏效了。我发现 None 也可以隐藏点。
    • 下面@user8153 的解决方案更优雅。哪一个更有帮助可能取决于您是否要对截断的数据集进行任何进一步的计算。如果你这样做,那么这可能是一个更好的解决方案,但对于简单的绘图,其他版本似乎更好
    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2020-07-22
    相关资源
    最近更新 更多