我想创建一个有 2 列的图,第一个只有 1 个图,第二个有 3 个图。我尝试使用以下代码来设置它
import matplotlib.pyplot as plt
def format_axes(fig):
for i, ax in enumerate(fig.axes):
ax.text(0.5, 0.5, "ax%d" % (i+1), va="center", ha="center")
ax.tick_params(labelbottom=False, labelleft=False)
fig = plt.figure()
ax1 = plt.subplot(222)
ax2 = plt.subplot(224)
ax3 = plt.subplot(121)
axes = [ax1, ax2, ax3]
format_axes(fig)
plt.tight_layout()
plt.show()
但是后来我很难制作第四个图,因为子图不支持索引> 5,而且我不知道如何使每个图的图形大小满足给定的比例。
我使用下面的代码再次尝试使用 gridspec
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
def format_axes(fig):
for i, ax in enumerate(fig.axes):
ax.text(0.5, 0.5, "ax%d" % (i+1), va="center", ha="center")
ax.tick_params(labelbottom=False, labelleft=False)
fig = plt.figure(layout="constrained")
gs = GridSpec(3, 2, figure=fig)
ax1 = fig.add_subplot(gs[: , 0])
ax2 = fig.add_subplot(gs[0, -1])
ax3 = fig.add_subplot(gs[1, 1])
ax4 = fig.add_subplot(gs[-1, 1])
format_axes(fig)
plt.show()
但是,我的问题再次出现,因为我无法操纵每个图的大小。
是否有一种通用方法可以为更大的 nrows x ncols 子图制作列大小图?有人可以为我解释一下 gridspec,我从 matplotlib.org 复制了代码并更改了一些值。
plt.subplot_mosaic
可能更容易,使用 height_ratios
和 widths_ratios
更改轴大小。
import matplotlib.pyplot as plt
fig, axd = plt.subplot_mosaic(
"""
AB
AC
AD
""",
constrained_layout=True,
gridspec_kw={
"height_ratios": [1, 3, 2],
"width_ratios": [1, 2],
},
)
# axd is a dict of Axes, e.g. use axd["A"]
def label_axes(axd):
for ax_name, ax in axd.items():
ax.text(0.5, 0.5, ax_name, va="center", ha="center")
ax.tick_params(labelbottom=False, labelleft=False)
label_axes(axd)
fig.show()