Pdf matplotlib中包含大量数据点的图形
我使用matplotlib(png格式)生成了附加图像。我想使用eps或pdf,但我发现对于所有数据点,图形在屏幕上的渲染速度非常慢。除了打印更少的数据外,是否还有其他方法对其进行优化以使其加载更快Pdf matplotlib中包含大量数据点的图形,pdf,matplotlib,pdf-generation,Pdf,Matplotlib,Pdf Generation,我使用matplotlib(png格式)生成了附加图像。我想使用eps或pdf,但我发现对于所有数据点,图形在屏幕上的渲染速度非常慢。除了打印更少的数据外,是否还有其他方法对其进行优化以使其加载更快 我想你有三个选择: 正如您所提到的,您可以绘制更少的点。对于你在问题中展示的情节,我认为只每隔一点绘制一次就可以了 正如@tcaswell在其评论中所述,您可以使用线条而不是点,这样可以更有效地渲染 你可以把蓝点光栅化。Matplotlib允许您有选择地光栅化单个美工师,因此,如果将光栅化=True
我想你有三个选择:
光栅化=True
传递给plotting命令,您将获得输出文件中点的位图版本。由于位图的分辨率,以有限的缩放为代价加载速度会快得多。(请注意,轴和绘图的所有其他元素将保留为矢量图形和字体元素)首先,如果要在绘图中显示“趋势”,并且考虑到正在绘制的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()
将numpy导入为np
将matplotlib.pyplot作为plt导入
分数=0.50
x_重采样=[]
y_重采样=[]
对于范围(0,len(x))中的k:
如果np.random.rand()小于分数:
x_重采样。追加(x[k])
y_重采样。追加(y[k])
plt.散射(x_重采样,y_重采样,s=6)
plt.show()
第二,您是否考虑过在x轴上使用对数比例来增加可见性?在本例中,只有打印区域被光栅化,轴仍为矢量格式:
将numpy导入为np
将matplotlib.pyplot作为plt导入
x=np.随机.均匀(尺寸=400000)
y=np.随机.均匀(尺寸=400000)
plt.scatter(x,y,marker='x',光栅化=假)
plt.savefig(“norm.pdf”,format='pdf')
如果您使用直线
-
而不是点(假设这是绘图而不是散布),直线简化代码可能会帮助您。如果你真的想要你所有的点,那么点,你有点像在向量的后端一样,你或多或少有命令“移动到x,y;画标记;移动到…”为每个点。可能重复的循环似乎很慢。尝试x_subsampled=x[np.random.rand(*x.shape)
。