我在一张图中有 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 偏移)?
较新的
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()