使用矢量后端(pdf,eps),在文件大小和渲染时间方面浪费,让点被其他点完全遮挡。如何删除这些?
答案 0 :(得分:2)
这是一个几乎不公平的问题,因为这将取决于标记大小与实际坐标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,)
这表示在15000中节省了大约2000点。如果你仔细观察,你会发现这并不完美,但我确信tol
论证中的一点校准可以显着改善情节。