2

我想知道是否可以删除任何被其他形状完全覆盖的形状?我经常生成粒子的散点图,其中一些粒子彼此靠近,并且由于粒子的数量很容易达到 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)

时间和文件大小的线性增加,正如增加圈数时所预期的那样。

有谁知道如何解决这个问题?

4

1 回答 1

1

我认为您应该将绘图保存为光栅图像,然后将其嵌入到 pdf 中(cairo模块效果很好)。

以我的经验,大多数人不会在 PDF 中放大太多,以便在矢量和图像之间产生差异。此外,您的矢量素材足够重,可以证明在不增加文件大小的情况下使用更高 DPI 图像是合理的。

此外,一个好的提示是使用ms(markersize) 和mew(marker edge width) 以及alpha关键字参数绘制没有边框的透明圆圈。视觉效果令人惊叹。代替

plt.scatter(x, y)

你可以做

plt.plot(x, y, 'o', ms=3, mew=0, alpha=0.3)

试试看!

希望这可以帮助!

于 2012-11-01T13:49:24.700 回答