轴类-以给定单位明确设置轴的尺寸(宽度/高度)


问题内容

我想使用matplotlib创建一个图形,在其中可以显式指定轴的大小,即我要设置轴bbox的宽度和高度。

我到处环顾四周,找不到解决方案。我通常会发现如何调整整个图形的大小(包括刻度和标签),例如使用fig, ax = plt.subplots(figsize=(w, h))

这对我来说非常重要,因为我想使轴比例为1:1,即纸中的1单位实际上等于1单位。例如,如果xrange是0到10,且主要刻度=
1且x轴是10cm,则1个主要刻度= 1cm。我将此图另存为pdf,以将其导入到乳胶文档中。

这个问题提出了一个类似的话题,但是答案不能解决我的问题(使用plt.gca().set_aspect('equal', adjustable='box')代码)

从另一个问题中,我看到可以获取轴的大小,但是不能明确地修改它们。

关于如何设置坐标轴框大小而不只是图形尺寸的任何想法。图形尺寸应适应轴尺寸。

谢谢!

对于那些熟悉乳胶pgfplots的人来说,它会喜欢与该scale only axis选项类似的东西(例如,请参见此处)。


问题答案:

轴尺寸由图形尺寸和图形间距确定,可以使用设置figure.subplots_adjust()。相反,这意味着您可以通过考虑图形间距来设置图形尺寸来设置轴尺寸:

import matplotlib.pyplot as plt

def set_size(w,h, ax=None):
    """ w, h: width, height in inches """
    if not ax: ax=plt.gca()
    l = ax.figure.subplotpars.left
    r = ax.figure.subplotpars.right
    t = ax.figure.subplotpars.top
    b = ax.figure.subplotpars.bottom
    figw = float(w)/(r-l)
    figh = float(h)/(t-b)
    ax.figure.set_size_inches(figw, figh)

fig, ax=plt.subplots()

ax.plot([1,3,2])

set_size(5,5)

plt.show()