【问题标题】:Check if seaborn scatterplot function is sampling data检查 seaborn 散点图函数是否采样数据
【发布时间】:2020-04-22 22:43:14
【问题描述】:

我已经绘制了一个 seaborn 散点图。我的数据由 5000 个数据点组成。通过查看情节,我绝对没有看到5000分。所以我很确定 seaborn scatterplot 函数会执行某种采样。我想知道图中每个点代表多少个数据点?如果依赖代码,代码如下:

g = sns.scatterplot(x=data['x'], y=data['y'],hue=data['P'], s=40,  edgecolor='k', alpha=0.8, legend="full")

【问题讨论】:

  • 散点图不对数据进行采样。绘制所有数据。请随意询问您的实际问题(请参阅minimal reproducible example)。
  • 尝试向 y 添加一个小的随机数(“抖动”)。它将分离一些重叠的点
  • 你确定没有5000分吗?其中一些可能重叠......
  • 其实我不是 100% 确定的。我想确保没有采样在起作用并且所有的点都被绘制了

标签: python matplotlib seaborn scatter-plot sampling


【解决方案1】:

据我所知,没有进行采样。在您发布的图片上,您可以看到大部分数据点只是重叠,这可能是您看不到 5000 个点的原因。尝试使用更少的点,您会看到所有点都被绘制出来。

【讨论】:

    【解决方案2】:

    为了检查 Seaborn 的 scatter 是否删除了点,这里有一种查看 5000 个不同点的方法。似乎没有遗漏任何点。

    import matplotlib.pyplot as plt
    import seaborn as sns
    import numpy as np
    
    x = np.linspace(1, 100, 100)
    y = np.linspace(1, 50, 50)
    X, Y = np.meshgrid(x, y)
    Z = (X * Y) % 25
    X = np.ravel(X)
    Y = np.ravel(Y)
    Z = np.ravel(Z)
    
    sns.scatterplot(x=X, y=Y, s=15, hue=Z, palette=plt.cm.plasma, legend=False)
    plt.show()
    

    【讨论】:

    • 我不认为这是决定性的,因为散点图函数对它认为会过度绘制的点进行采样是完全合理的,但不是从绘图的稀疏区域。这样的函数不会从您的图中删除任何点,但可以想象将它们从 OP 的图中删除。
    【解决方案3】:

    没有什么能真正向我暗示 seaborn 正在对您的数据进行采样。但是,您可以检查您的坐标轴 g 中的数据以确定。为 PathCollection(散点图)对象查询轴的子级:

    g.get_children()
    

    它可能是返回的列表中的第一个项目。从那里您可以使用get_offsets 检索数据并检查其形状。

    g.get_children()[0].get_offsets().shape
    

    【讨论】:

    • 这确认没有采样发生。谢谢!
    猜你喜欢
    • 2018-11-09
    • 2018-03-17
    • 2020-12-04
    • 2019-02-03
    • 2019-09-26
    • 2016-08-23
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多