gpt4 book ai didi

python - matplotlib 子图的行标题

转载 作者:太空狗 更新时间:2023-10-29 21:39:46 25 4
gpt4 key购买 nike

在 matplotlib 中,除了为整个图形设置标题和为每个单独的图设置标题外,是否可以为每一行子图设置单独的标题?这将对应于下图中的橙色文本。 enter image description here

如果不是,您将如何解决这个问题?在左侧创建一个单独的空子图列,并用橙色文本填充它们?

我知道可以使用 text()annotate() 手动定位每个标题,但这通常需要大量调整,我有许多子图。有没有更流畅的解决方案?

最佳答案

matplotlib 3.4.0 的新特性

行标题现在可以实现为子图标题:

The new subfigure feature allows creating virtual figures within figures with localized artists (e.g., colorbars and suptitles) that only pertain to each subfigure.

See how to plot subfigures for further details.


如何重现 OP 的引用图:

  • 要么 Figure.subfigures (最直接)

    创建 3x1 fig.subfigures,其中每个 subfig 都有自己的 1x3 subfig.subplotssubfig.suptitle :

    fig = plt.figure(constrained_layout=True)
    fig.suptitle('Figure title')

    # create 3x1 subfigs
    subfigs = fig.subfigures(nrows=3, ncols=1)
    for row, subfig in enumerate(subfigs):
    subfig.suptitle(f'Subfigure title {row}')

    # create 1x3 subplots per subfig
    axs = subfig.subplots(nrows=1, ncols=3)
    for col, ax in enumerate(axs):
    ax.plot()
    ax.set_title(f'Plot title {col}')
  • Figure.add_subfigure (到现有的 subplots)

    如果您已经有 3x1 plt.subplots,则将 add_subfigure 放入底层 gridspec 中。同样,每个 subfig 将获得自己的 1x3 subfig.subplotssubfig.suptitle:

    # create 3x1 subplots
    fig, axs = plt.subplots(nrows=3, ncols=1, constrained_layout=True)
    fig.suptitle('Figure title')

    # clear subplots
    for ax in axs:
    ax.remove()

    # add subfigure per subplot
    gridspec = axs[0].get_subplotspec().get_gridspec()
    subfigs = [fig.add_subfigure(gs) for gs in gridspec]

    for row, subfig in enumerate(subfigs):
    subfig.suptitle(f'Subfigure title {row}')

    # create 1x3 subplots per subfig
    axs = subfig.subplots(nrows=1, ncols=3)
    for col, ax in enumerate(axs):
    ax.plot()
    ax.set_title(f'Plot title {col}')

任一示例的输出(在一些样式之后):

关于python - matplotlib 子图的行标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com