python - 删除被遮挡的散点图点

标签 python matplotlib

对于矢量后端(pdf、eps),点被其他点完全遮挡在文件大小和渲染时间方面都是浪费。如何删除这些?

最佳答案

这是一个几乎不公平的问题,因为这将取决于标记大小与实际坐标,即 difficult to calculate .

无论如何,也许一半的解决方案适合您。我认为,如果您计算所有点之间的距离,当一对点低于给定的容差时,您只使用其中一个点(而不是同时使用两个点)。这并不完美,但可能会很有用。使用这个想法进行快速测试(我希望我的距离逻辑是正确的):

import matplotlib.pyplot as plt
import scipy

x = np.random.normal(0,1,15000)
y = np.random.normal(0,1,15000)
tol = 0.01

xy = np.hstack((x[:,np.newaxis],y[:,np.newaxis]))
d = scipy.spatial.distance.cdist(xy,xy)
b = np.ones(x.shape,dtype='bool')
for i in range(d.shape[0]-1):
    if d[i,i+1:].min() < tol and b[i]:
        b[i+1+d[i,i+1:].argmin()] = False

x2 = x[b]
y2 = y[b]

f, (ax1, ax2) = plt.subplots(1, 2)

ax1.scatter(x,y,s=90)
ax1.set_xlim(-6,6)
ax1.set_ylim(-6,6)
ax2.scatter(x2,y2,s=90)
ax2.set_xlim(-6,6)
ax2.set_ylim(-6,6)

print('Before: ', x.shape,'\nNow: ',x2.shape)
plt.show()

,给我这个结果:

Before:  (15000,) 
Now:  (13004,)

Attempting to remove invisible markers from matplotlib plot

这意味着 15000 中节省了大约 2000 个点。如果您仔细观察,您会发现这并不完美,但我确信在 tol 参数中进行一点校准可以显着改善绘图.

关于python - 删除被遮挡的散点图点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489469/

相关文章:

python - 着色问题 - open cv 与 matplotlib legend 的结合

python - mplot3d - 如何显示小刻度?

python - matplotlib:辅助 y 轴上的 ylabel 带有手动刻度放置

python - 使用带有特定单词的 pandas 提取句子

python - <枚举位于 0x7f0211ea2360 的对象>

c++ - PyString_FromStringAndSize 导致段错误

python - 计算销售额的滚动(滞后和超前)差异的最佳方法是什么?

python - 使用 python 通过网络将数据发送到远程程序

python-2.7 - 属性错误 : 'module' object has no attribute 'cm'

python - 使图中的颜色连续(如果可能,通过识别和勾勒边界)