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
相关产品推荐
相关产品推荐

