我想知道是否可以移除任何完全被其他形状覆盖的形状? 我经常生成粒子的散点图,其中一些粒子彼此靠近,并且由于粒子的数量很容易达到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> 5s(2.4MB)
N = 20000> 10s(4.8MB)
N = 40000> 20s(9.5MB)
时间和文件大小均线性增加,正如增加圆圈数所预期的那样。
有没有人知道如何解决这个问题?
答案 0 :(得分:1)
我认为您应该将绘图保存为光栅图像,然后将其嵌入到pdf中(cairo
模块效果很好)。
根据我的经验,大多数人不会在PDF中放大这么多,以便在矢量和图像之间产生差异。此外,你的矢量很重,足以证明使用更高的DPI图像而不增加文件大小。
另外,一个好的建议是使用ms
(markersize)和mew
(标记边缘宽度)和alpha
关键字参数绘制无边框的透明圆圈。视觉效果令人惊叹。而不是
plt.scatter(x, y)
你可以做到
plt.plot(x, y, 'o', ms=3, mew=0, alpha=0.3)
试试看!
希望这有帮助!