matplotlib:一个图形上的多个绘图

8

我有一些代码:

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)

这段代码将会输出以下内容: Fig1

我的问题是:
1)为什么会创建两个单独的图像?我认为subplot命令应该将它们合并成一个图像。我认为可能是多个plt.show()命令的原因,但是我尝试注释掉这些命令并且只从我的函数外部调用一次,但我仍然得到了2个窗口。
2)如何正确地将它们组合成一个图像?此外,我希望第二个图形的坐标轴具有相同的比例(例如,x轴上的400 m与y轴上的400 m相同)。同样,我也想垂直地拉伸直方图 - 这要如何实现?
1个回答

8
正如您已经观察到的那样,如果你只想使用一个图表(一个窗口),你不能在每个函数内调用 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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接