matplotlib中包含大量数据点的数字

时间:2015-06-24 00:31:19

标签: pdf matplotlib pdf-generation

我使用matplotlib(png格式)生成附加图像。我想使用eps或pdf,但我发现,对于所有数据点,图形在屏幕上渲染的速度非常慢。除了绘制较少的数据之外,还有优化它以便加载更快吗?

enter image description here

3 个答案:

答案 0 :(得分:3)

我认为你有三种选择:

  1. 正如您自己提到的,您可以减少积分。对于你在问题中显示的情节,我认为只绘制其他每一点都可以。

  2. 正如@tcaswell在评论中所说,你可以使用一条线代替点,这样可以提高效率。

  3. 你可以光栅化蓝点。 Matplotlib允许您有选择地栅格化单个艺术家,因此如果您将rasterized=True传递给绘图命令,您将获得输出文件中点的位图版本。由于位图的分辨率,以有限缩放的价格加载会更快。 (请注意,绘图的轴和所有其他元素将保留为矢量图形和字体元素。)

答案 1 :(得分:1)

首先,如果你想在你的绘图中显示一个“趋势”,并考虑你正在绘制的x,y数组是“巨大的”,你可以将随机的子采样应用到你的x,y数组,作为一个分数你的数据:

import numpy as np
import matplotlib.pyplot as plt

fraction = 0.50
x_resampled = []
y_resampled = []

for k in range(0,len(x)):
   if np.random.rand() < fraction:
       x_resampled.append(x[k])
       y_resampled.append(y[k])

plt.scatter(x_resampled,y_resampled , s=6)
plt.show()

其次,您是否考虑过在x轴上使用对数刻度来提高可见度?

答案 2 :(得分:0)

在这个例子中,只有绘图区域被光栅化,轴仍然是矢量格式:

import numpy as np
import matplotlib.pyplot as plt
x = np.random.uniform(size=400000)
y = np.random.uniform(size=400000)
plt.scatter(x, y, marker='x', rasterized=False)
plt.savefig("norm.pdf", format='pdf')

enter image description here