更改轴lims后如何保留带有aspec(“equal”)的图形布局?

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

我在一张图中有 2x2 的轴网格,我希望将其与理想矩形的零偏移对齐。不幸的是我还需要使用

ax.set_aspect("equal")
,这似乎会引起很多问题。

最小代码可以如下所示:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2,2,
                    figsize = (15,6.04),
                    gridspec_kw = dict(
                        wspace = 0,
                        hspace = 0
                        ),
                       )
for ax in axes[:,1]:
    ax.yaxis.tick_right()
    ax.yaxis.set_label_position("right")

for ax in axes.flatten():
    ax.set_xlim(0,15)
    ax.set_ylim(-4, 2)
    ax.set_aspect("equal")

设置 Figsize 可以解决问题,但仅限于一组 lims。我希望针对任何 xlim/ylim 比率自动重新计算它。有没有一种简单的方法可以做到这一点(例如通过推导 Figsize y 中的 0.04 偏移)?

matplotlib alignment
1个回答
0
投票

较新的

layout='compressed'
可以做到这一点(https://matplotlib.org/stable/users/explain/axes/constrainedlayout_guide.html#grids-of-fixed-aspect-ratio-axes-compressed-layout)。 但请注意,如果您的刻度标签超出了子图的边缘,“压缩”将在子图之间留出空间。

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2,2,
                    figsize = (6, 4),
                        sharex=True, sharey=True,
                       layout='compressed')
fig.get_layout_engine().set(w_pad=0, h_pad=0, wspace=0, hspace=0)
for ax in axes[:,1]:
    ax.yaxis.tick_right()
    ax.yaxis.set_label_position("right")
for ax in axes.flatten():
    ax.tick_params(direction="in")
    ax.set_xlim(0.0000001, 14.999)
    ax.set_ylim(-3.99999, 1.99999)
    ax.set_aspect("equal")
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.