制作海报:如何使用毫米和左上角原点将艺术家放置在图中

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

我想准备一张“肖像”A0海报(841毫米×1189毫米),放置不同的艺术家(没有轴,而是矩形和文本),指定他们距离图左上角的毫米位置。

我已经想出了一个可能的程序,例如,如果我想要一个矩形,40mm×18mm,其左上角位于距图左上角(230mm,190mm)处,我会写

import matplotlib.pyplot as plt

fig = plt.figure(figsize(841/25.4, 25.4), layout='none')
fig.patches.append(plt.Rectangle((230, 190), 40, 18, transform=???))
# -------------------------------------------------------------///
fig.savefig('A0.pdf')

虽然我知道

x_fig = x_mm/841
y_fig = 1 - y_mm/1189
我不知道如何定义适当的变换以使坐标按照我想要的方式指定。

如何定义正确的变换?

python matplotlib coordinates transform
1个回答
0
投票

一种选择是将单位

scale
改为毫米,然后
translate
翻转无花果的“y轴”:

import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms

D = 300
W, H = 120, 50
# W, H = 841, 1189 # op

mm = 1 / 25.4

fig = plt.figure(figsize=(W * mm, H * mm), layout="none", dpi=D)

rect = plt.Rectangle(
    (20, 15), 36, 20,
    # (230, 190), 400, 180, # op
    fc="springgreen", ec="k",
    transform=mtransforms.Affine2D()
    .scale(mm * fig.dpi).scale(1, -1)
    .translate(0, fig.get_figheight() * fig.dpi),
)

fig.patches.append(rect)

# fig.savefig("A0.pdf", dpi=D) # invisible rectangle !
# fig.savefig("A0.png", dpi=D) # works just fine !

NB:为了清晰起见,下图使用了随机纸张类型 (

120x50
) 和
Ruler

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.