我正在使用自定义转换,PNG 没问题,但 PDF 是空的

问题描述 投票:0回答:1

这个问题是制作海报:如何使用毫米和左上角原点将艺术家放置在图中的后续问题

此代码:

import matplotlib.pyplot as plt
from matplotlib.transforms import Affine2D

mm, dpi = 1/25.4, dpi
w, h = 841, 1189
trans = Affine2D().scale(mm*dpi).scale(1,-1).translate(0,h*mm*dpi)

fig = plt.figure(figsize=(w*mm, h*mm), layout='none', dpi=dpi)
fig.patches.append(
    plt.Rectangle((230, 190), 40, 18, transform=trans))
fig.savefig('A0.pdf')
fig.savefig('A0.png')

生成空 PDF,而 PNG 文件是正确的。

不幸的是,拥有宽幅喷墨绘图仪的印刷店需要 PDF。虽然我可以将光栅文件转换为 PDF,但我更喜欢直接生成正确的 PDF。

我的代码中是否有问题,或者它不应该发生,并且这是一个我必须向 Matplotlib 开发人员报告的错误?


此代码不使用自定义转换,会生成正确的 PDF,其中矩形位于正确的位置和正确的尺寸。

import numpy as np
import matplotlib.pyplot as plt

mm, dpi = 1/25.4, 96
w, h = 841, 1189
fig = plt.figure(dpi=dpi, layout='none', figsize=(w*mm,h*mm))
fig.patches.append(plt.Rectangle((660/w, 1-1000/h), 40/w, -40/h,
                                 transform=fig.transFigure))
fig.savefig('A0.pdf')

更新

...
fig = plt.figure(figsize=(w*mm, h*mm), layout='none', dpi=dpi)
fig.patches.append(
    plt.Rectangle((230, 190), 40, 18, transform=trans))
fig.patches.append(
    plt.Rectangle((600/w, 1-190/h), 40/w, -18/h, transform=fig.transFigure))
fig.savefig('A0.pdf')

生成一个非空 PDF,但只有第二个矩形(未使用自定义转换绘制)可见。

python matplotlib pdf coordinate-transformation
1个回答
0
投票

2010 年 7 月this 回溯线程中,他们建议将

dpi=72
硬编码到 PDF 渲染器中,以便向后兼容较旧的 PDF 规范。事实上,当我将其设置为
savefig
时,矩形(以及使用自定义变换添加到图形中的任何其他艺术家)渲染得很好:

fig.savefig("A0.pdf", dpi=72)
© www.soinside.com 2019 - 2024. All rights reserved.