【问题标题】:How to manually position one subplot graph in matplotlib.pyplot如何在 matplotlib.pyplot 中手动定位一个子图
【发布时间】:2016-04-20 08:43:17
【问题描述】:

如何重新定位第二行中的图形,使其与整个图形居中对齐。在更一般的说明中,如何手动重新定位同一行中的任意位置的图表?

import matplotlib.pyplot as plt
m=0
for i in range(0,2):
    for j in range(0,2):
        if m <= 2:      
            ax = plt.subplot2grid((2,2), (i,j))
            ax.plot(range(0,10),range(0,10))
            m = m+1
plt.show()

谢谢。

【问题讨论】:

    标签: python matplotlib subplot


    【解决方案1】:

    使用GridSpec,您可以创建可用于放置子图的任何尺寸的网格。

    import matplotlib.gridspec as gridspec
    import matplotlib.pyplot as plt
    
    gs = gridspec.GridSpec(4, 4)
    
    ax1 = plt.subplot(gs[:2, :2])
    ax1.plot(range(0,10), range(0,10))
    
    ax2 = plt.subplot(gs[:2, 2:])
    ax2.plot(range(0,10), range(0,10))
    
    ax3 = plt.subplot(gs[2:4, 1:3])
    ax3.plot(range(0,10), range(0,10))
    
    plt.show()
    

    这将创建一个 4x4 网格,每个子图占用一个 2x2 子网格。这使您可以正确地将底部子图居中。

    要使用您在问题中使用的相同 for 循环方法,您可以执行以下操作:

    import matplotlib.gridspec as gridspec
    import matplotlib.pyplot as plt
    
    gs = gridspec.GridSpec(4, 4)
    m = 0
    
    for i in range(0, 4, 2):
      for j in range(0, 4, 2):
        if m < 3:
          ax = plt.subplot(gs[i:i+2, j:j+2])
          ax.plot(range(0, 10), range(0, 10))
          m+=1
        else:
          ax = plt.subplot(gs[i:i+2, 1:3])
          ax.plot(range(0, 10), range(0, 10))
    
    plt.show()
    

    这两个代码sn-ps的结果都是:

    【讨论】:

    • 谢谢。但是我如何使用 forloop 对说 i=[0,1] 和 j=[0,1,2] 做同样的事情?
    • 一分钟后,我将用可能的循环逻辑更新我的答案。
    • @gogo 答案已更新为遵循您的 for 循环结构
    • 正在用我的案例进行测试。它有效:)
    【解决方案2】:

    如果你让它填满底部呢?

    您可以使用colspan(或rowspan)占据子图的多个部分。

    import matplotlib.pyplot as plt
    m=0
    for i in range(0,2):
        for j in range(0,2):
            if m <= 2:
                if m == 2:
                    ax = plt.subplot2grid((2,2), (i,j), colspan=2)
                else:
                    ax = plt.subplot2grid((2,2), (i,j))
                ax.plot(range(0,10),range(0,10))
                m = m+1
    plt.show()
    

    http://matplotlib.org/users/gridspec.html

    【讨论】:

    • 我不想填满这个空间。我只想重新定位图表。有什么想法吗?
    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 2012-06-20
    • 2015-11-23
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多