matplotlib 用A、B、C标注图中的子图

bnl4lu3b  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(101)

当向科学期刊提交论文时,一个经常需要列举一个数字的不同子图A,B,….

这听起来像是一个非常常见的问题,我试图找到一种优雅的方法来自动使用matplotlib来实现这个目标,但我惊讶地发现它什么也没有。但我可能没有使用正确的搜索词。理想情况下,我正在寻找一种注解的方法,以便在调整图形大小或子图通过fig.subplots_adjustfig.tight_layout或类似方式移动时,字母相对于子图保持不变。
任何帮助或解决方案将不胜感激。

zlhcx6iw

zlhcx6iw1#

如果你想要相对于子图的注解,那么使用ax.text绘制它对我来说似乎是最方便的方法。
考虑如下情况:

import numpy as np
import matplotlib.pyplot as plt
import string

fig, axs = plt.subplots(2,2,figsize=(8,8))
axs = axs.flat

for n, ax in enumerate(axs):
    
    ax.imshow(np.random.randn(10,10), interpolation='none')    
    ax.text(-0.1, 1.1, string.ascii_uppercase[n], transform=ax.transAxes, 
            size=20, weight='bold')

编辑:
使用新的plt.subplot_mosiac,上面的例子可以写成。也许稍微更有弹性。并考虑添加constrained_layout=True

fig, axs = plt.subplot_mosaic("AB;CD", figsize=(10,10))

for n, (key, ax) in enumerate(axs.items()):

    ax.imshow(np.random.randn(10,10), interpolation='none')    
    ax.text(-0.1, 1.1, key, transform=ax.transAxes, 
            size=20, weight='bold')

相关问题