删除遮挡散点图点

2024-04-26 07:16:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: pdf时间浪费eps向量
1条回答
网友
1楼 · 发布于 2024-04-26 07:16:21

这是一个几乎不公平的问题,因为这将取决于标记大小与实际坐标的关系,即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()

,得到的结果是:

^{pr2}$

Attempting to remove invisible markers from matplotlib plot

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

相关问题 更多 >