2014-01-23 54 views
7

我有一些代碼:matplotlib:一個數字多條曲線

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)爲什麼是兩個獨立的數字正在創建?我認爲這個副劇命令會把它們合併成一個數字。我認爲這可能是多個plt.show()命令,但我嘗試將這些註釋掉,只從外部函數中調用它,並且仍然有2個窗口。

2)如何將它們合併爲1個數字?另外,我希望圖2的軸具有相同的比例尺(即x軸上的400 m與y軸上的400 m相同)。同樣,我也想垂直拉伸直方圖 - 這是如何完成的?

回答

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()