Seaborn heatmap to.pdf速度非常慢。这正常吗?

Seaborn heatmap to.pdf速度非常慢。这正常吗?,pdf,matplotlib,seaborn,Pdf,Matplotlib,Seaborn,尝试将一些实验数据保存到文件中时,我注意到,当尝试保存NxN大小的热图时,执行将永远不会完成。进一步调查似乎是由于.pdf扩展名。例如,如果我使用.png,速度非常快 最小可复制示例: import matplotlib.pylab as plt import numpy as np import seaborn as sbn N=200 THE_FIGURE = plt.figure(figsize=(8.27, 6), dpi=300) ax = plt.subplot(1, 1, 1)

尝试将一些实验数据保存到文件中时,我注意到,当尝试保存NxN大小的热图时,执行将永远不会完成。进一步调查似乎是由于.pdf扩展名。例如,如果我使用.png,速度非常快

最小可复制示例:

import matplotlib.pylab as plt
import numpy as np
import seaborn as sbn

N=200
THE_FIGURE = plt.figure(figsize=(8.27, 6), dpi=300)
ax = plt.subplot(1, 1, 1)
sbn.heatmap(np.random.uniform(1, 20, (N, N)), ax=ax)
THE_FIGURE.savefig('image.pdf', bbox_inches='tight', pad_inches=0.1)
即使N=100,这种减速也会变得明显。 N=1000甚至没有发生。 这正常吗?我该怎么修呢


谢谢

对于较大的网格,保存pdf比保存png花费更长的时间是有道理的。这可以在下图中看到,其中显示了将pdf和png保存为沿一个轴(
N
)的平铺数函数的时间(实线)。我们还可以查看pdf和png的文件大小,其中观察到一些类似的行为(虚线)

在这里找到复制代码。在我的计算机上运行此操作需要约1:10分钟。
将matplotlib.pylab作为plt导入
将numpy作为np导入
导入seaborn作为sns
导入时间
导入操作系统
定义f(N,form=“pdf”):
t0=时间。时间()
图=plt.图(图尺寸=(8.27,6),dpi=300)
ax=plt.子批次(1,1,1)
sns.热图(np.随机均匀(1,20,(N,N)),ax=ax)
图savefig('image.'+形式,bbox_英寸='tight',pad_英寸=0.1)
t1=时间。时间()
plt.关闭(图)
s=os.path.getsize('image.'+form)
返回t1-t0,s
ns=[5,10,15,20,25,30]+范围(40210,20)
pdf=[]
png=[]
对于枚举中的i,n(ns):
附加(f(n,form=“pdf”))
追加(f(n,form=“png”))
#打印i,n
pdf=np.array(pdf);png=np.array(png)
plt.图()
plt.plot(ns,pdf[:,0],label=“pdf”)
plt.plot(ns,png[:,0],label=“png”)
plt.xlabel(“N”)
plt.ylabel(“时间”)
ax2=plt.gca().twinx()
ax2.plot(ns,pdf[:,1]/1000,label=“pdf(filesize)”,ls=“--”)
ax2.plot(ns,png[:,1]/1000,label=“png(filesize)”,ls=“--”)
ax2.set_ylabel(“文件大小[kByte]”)
plt.gcf()
plt.子批次调整(顶部=0.85)

plt.show()
这可能是因为转换为PDF是使用矢量图形完成的。这样做的优点是PDF可以缩放,图形看起来清晰,但缺点是文件大小可能比位图图形大,转换和显示需要更多的处理能力。感谢@ImportanceOfBeingErnest非常感谢详细的答案