检查seaborn散点图函数是否是采样数据

Check if seaborn scatterplot function is sampling data

我绘制了一个 seaborn 散点图。我的数据包含 5000 个数据点。通过查看情节,我绝对看不到 5000 点。所以我很确定某种采样是由 seaborn 散点图函数执行的。我想知道图中每个点代表多少个数据点?如果依赖于代码,代码如下:

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

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

为了检查Seaborn的散点是否去除点,这里有一个方法可以看到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()

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

g.get_children()

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

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