You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib自定义变换下PDF输出为空,PNG正常的问题咨询

自定义变换绘制图形时PDF输出异常问题(Stack Overflow后续)

这是Stack Overflow问题《Making a poster: how to place Artists in a Figure using mm and top-left origin》的后续。

执行自定义变换代码时,生成的PDF文件为空,但PNG文件显示正常。由于喷绘打印店要求提供PDF格式文件,需直接生成正确的PDF,而非将栅格格式转为PDF,现需确认是代码问题还是Matplotlib Bug。

问题复现代码

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)

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')

现象:未使用自定义变换,生成的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非空,但仅显示未使用自定义变换绘制的第二个矩形。

疑问

请问是代码存在问题,还是这属于需要向Matplotlib开发者反馈的Bug?


内容的提问来源于stack exchange,提问作者gboffi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:52:04