我想知道是否可以移除任何被其他形状完全覆盖的形状? 我经常生成粒子的散点图,其中一些粒子彼此靠近,并且由于粒子的数量很容易达到 100k,因此这些图变得非常庞大。
考虑以下简单示例:
import matplotlib.pyplot as plt
import numpy as np
N = 10000
x = np.random.randn(N)
y = np.random.randn(N)
plt.scatter(x,y)
plt.savefig('unseen.pdf')
当使用大于 10000 的 N 值时,大部分圆圈位于其他圆圈下方并且看不见。但是,当打开生成的 pdf 文件时,会绘制所有圆圈,并且打开文件的时间会增加,即使可见圆圈的数量几乎相同也是如此。
在 pdf-viewer 中打开图形的时间(无论哪个):
N=10000 > 5 秒 (2.4MB)
N=20000 > 10 秒 (4.8MB)
N=40000 > 20 秒 (9.5MB)
时间和文件大小都线性增加,正如预期的那样,增加圆圈数。
有没有人知道如何解决这个问题?
请您参考如下方法:
我认为您应该将绘图保存为光栅图像,然后将其嵌入到 pdf 中(cairo 模块效果很好)。
根据我的经验,大多数人不会在 PDF 中缩放太多以区分矢量和图像。此外,您的矢量内容足够重,足以证明在不增加文件大小的情况下使用更高 DPI 图像是合理的。
此外,一个好的技巧是使用 ms(标记大小)和 mew(标记边缘宽度)和 alpha 绘制无边框的透明圆圈> 关键字参数。视觉效果令人惊叹。而不是
plt.scatter(x, y)
你可以做到
plt.plot(x, y, 'o', ms=3, mew=0, alpha=0.3)
试试看!
希望这对您有所帮助!
