matplotlib通过单个列表迭代子图轴数组

 860520430_a87a12 发布于 2023-02-13 19:01

是否有一种简单/干净的方法来迭代由子图返回的轴数组

nrow = ncol = 2
a = []
fig, axs = plt.subplots(nrows=nrow, ncols=ncol)
for i, row in enumerate(axs):
    for j, ax in enumerate(row):
        a.append(ax)

for i, ax in enumerate(a):
    ax.set_ylabel(str(i))

甚至适用于nrowncol == 1.

我尝试了列表理解,如:

[element for tupl in tupleOfTuples for element in tupl]

但是如果nrows或者那就失败了ncols == 1

3 个回答
  • ax返回值是一个numpy的阵列,其可以,我相信,重新成形而不的数据的任何复制.如果您使用以下内容,您将获得一个可以干净地迭代的线性数组.

    nrow = 1; ncol = 2;
    fig, axs = plt.subplots(nrows=nrow, ncols=ncol)
    
    for ax in axs.reshape(-1): 
      ax.set_ylabel(str(i))
    

    当ncols和nrows都是1时,这不成立,因为返回值不是数组; 您可以将返回值转换为一个元素,以保持一致性,尽管感觉有点像cludge:

    nrow = 1; ncol = 1;
    fig, axs = plt.subplots(nrows=nrow, ncols=nrow)
    axs = np.array(axs)
    
    for ax in axs.reshape(-1):
      ax.set_ylabel(str(i))
    

    重塑文档.该参数-1导致重塑推断输出的维度.

    2023-02-13 19:02 回答
  • 我不确定它何时添加,但现在有一个squeeze关键字参数.这样可以确保结果始终是2D numpy数组.将其转换为一维数组很容易:

    fig, ax2d = subplots(2, 2, squeeze=False)
    axli = ax2d.flatten()
    

    适用于任意数量的子图,不需要单斧的技巧,因此比接受的答案更容易(squeeze当时可能还不存在).

    2023-02-13 19:03 回答
  • fig返回值plt.subplots具有所有轴的列表.要迭代图中的所有子图,您可以使用:

    nrow = 2
    ncol = 2
    fig, axs = plt.subplots(nrow, ncol)
    for i, ax in enumerate(fig.axes):
        ax.set_ylabel(str(i))
    

    这也适用于nrow == ncol == 1.

    2023-02-13 19:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有