我想准备一张“肖像”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
我不知道如何定义适当的变换以使坐标按照我想要的方式指定。
如何定义正确的变换?
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
。