gpt4 book ai didi

python - 当带有子图的图形从 python3.2 中的 matplotlib 保存为 pdf 时创建的空 pdf

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:49 25 4
gpt4 key购买 nike

我需要保存一个从 python3.2 中的 matpolotlib 生成的图形(上面有 8 个子图)。我需要将图形保存在一个 pdf 页面上。每个子图可能有 240k 到 400k 个数据点。

我的代码:

from matplotlib.backends.backend_pdf import PdfPages
plt.show(block=False)
pp = PdfPages('multipage.pdf')
fig = plt.figure()
fig.savefig('figure_1.pdf', dpi = fig.dpi)
pp.close()

但是,只创建了一个空的 pdf 文件,上面没有任何图形。任何帮助将不胜感激。

更新这是演示代码:

def plot_pdf_example():

fig = plt.figure()

# I create subplots here
#x = np.random.rand(50)
#y = np.random.rand(50)

plt.plot(x, y, '.')

fig.savefig('figure_b.pdf')

if __name__ == '__main__':
r = plot_pdf_example()
# the return value of r is not 0 for my case
print("donne")

如果我使用 plt.show() 在弹出窗口中获取图形,子图之间会有一些标题和图例重叠。如何调整弹出图形,以便我可以获得所有子图而没有任何重叠,并将所有子图保持为正方形。 将它们保持为方形用户界面对我来说非常重要。

最佳答案

您的代码确实将单个空图形 fig 保存到文件 figure_1.pdf,而不使用 PdfPages。 pdf 文件为空也是正常的,因为您没有在 fig 中绘制任何内容。下面是一个 MWE,展示了如何仅将一张图保存到单个 pdf 文件中。我已经用 PdfPages 删除了所有不必要的内容。

更新(2015-07-27):当将无花果保存为 pdf 时出现问题,因为需要渲染的数据太多,或者在复杂而详细的颜色图的情况下,可能会出现以下问题:栅格化绘图中一些有问题的元素是个好主意。下面的 MWE 已更新以反射(reflect)这一点。

import matplotlib.pyplot as plt
import numpy as np
import time

plt.close("all")

fig = plt.figure()

N = 400000
x = np.random.rand(400000)
y = np.random.rand(400000)
colors = np.random.rand(400000)
area = 3

ax0 = fig.add_axes([0.1, 0.1, 0.85, 0.85])

scater = ax0.scatter(x, y, s=area, c=colors)
scater.set_rasterized(True)

plt.show(block=False)

ts = time.clock()
fig.savefig('figure_1.pdf')
te = time.clock()

print('t = %f sec' % (te-ts))

在我的机器上,当 scater 的 rasterized 设置为 true 时,上面的代码大约需要 6.5 秒来保存 pdf,而当它设置为 False 时,需要 61.5 秒。

默认情况下,保存为pdf时,图形保存在vectorial format中。这意味着每个点都保存为一组参数(颜色、大小、位置等)。当有大量数据时(OP 的情况下为 8 * 400k),需要存储大量信息。将绘图的某些元素转换为 raster format 时,绘制的点数并不重要,因为图像被保存为固定数量的像素(就像 png 一样)。通过仅光栅化散点图,图形的其余部分(轴、标签、文本、图例等)仍然保持矢量格式。因此,总体而言,对于某些类型的图表(例如颜色图或散点图),质量损失并不那么明显,但对于具有锐线的图表来说,质量损失将是那么明显。

关于python - 当带有子图的图形从 python3.2 中的 matplotlib 保存为 pdf 时创建的空 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com