matplotlib删除看不见的形状

时间:2012-11-01 13:40:02

标签: python matplotlib scatter-plot

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

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

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

1 个答案:

答案 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)

试试看!

希望这有帮助!