【问题标题】:matplotlib: multiple plots on one figurematplotlib:一个图形上的多个图
【发布时间】:2015-03-27 06:37:21
【问题描述】:

我有一些代码:

import matplotlib.pyplot as plt

def print_fractures(fractures):
    xpairs = []
    ypairs = []
    plt.figure(2)
    plt.subplot(212)
    for i in range(len(fractures)):
        xends = [fractures[i][1][0], fractures[i][2][0]]
        yends = [fractures[i][1][1], fractures[i][2][1]]
        xpairs.append(xends)
        ypairs.append(yends)
    for xends,yends in zip(xpairs,ypairs):
        plt.plot(xends, yends, 'b-', alpha=0.4)
    plt.show()


def histogram(spacings):
    plt.figure(1)
    plt.subplot(211)
    plt.hist(spacings, 100)
    plt.xlabel('Spacing (m)', fontsize=15)
    plt.ylabel('Frequency (count)', fontsize=15)
    plt.show()

histogram(spacings)    
print_fractures(fractures)

此代码将产生以下输出:

我的问题是:

1) 为什么要创建两个单独的图形?我认为 subplot 命令会将它们组合成一个图形。我认为这可能是多个 plt.show() 命令,但我尝试将它们注释掉,并且只从我的函数外部调用它一次,我仍然有 2 个窗口。

2) 如何正确地将它们组合成 1 个图形?另外,我希望图 2 轴具有相同的比例(即 x 轴上的 400 m 与 y 轴上的 400 m 长度相同)。同样,我也想垂直拉伸直方图 - 这是如何完成的?

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    正如您已经观察到的,如果您打算只使用一个图形(一个窗口),则不能在每个函数内调用 figure()。相反,只需调用 subplot() 而无需在函数内部调用 show()。如果您处于plt.ioff() 模式,show() 将强制pyplot 创建第二个图形。在plt.ion() 模式下,您可以将plt.show() 调用保留在本地上下文中(在函数内部)。

    要在 x 轴和 y 轴上实现相同的比例,请使用 plt.axis('equal')。您可以在下面看到此原型的图示:

    from numpy.random import random
    import matplotlib.pyplot as plt
    
    def print_fractures():
        plt.subplot(212)
        plt.plot([1,2,3,4])
    
    def histogram():
        plt.subplot(211)
        plt.hist(random(1000), 100)
        plt.xlabel('Spacing (m)', fontsize=15)
        plt.ylabel('Frequency (count)', fontsize=15)
    
    histogram()
    print_fractures()
    plt.axis('equal')
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      相关资源
      最近更新 更多