2016-03-30 45 views
0

テキストファイルを複数のサブプロットに読み込もうとしていますが、プロットは常に1つのテキストファイルとして表示されます。これについてどうやって行くのかについて誰かが私を正しい#方向に向けることができますか?ループ内の複数のテキストファイルからサブプロットを作成する

import numpy as np 
import matplotlib.pyplot as plt 

RiverData1 = np.loadtxt('Gray1961.txt', skiprows = 2) 

RiverData2 = np.loadtxt('Hack1957.txt', skiprows = 2) 

RiverData3 = np.loadtxt('Rignon1996.txt', skiprows = 2) 

RiverData4 = np.loadtxt('Robert1990.txt', skiprows = 2) 

RiverData5 = np.loadtxt('Langbein1947_p145.txt', skiprows = 2) 

RiverData6 = np.loadtxt('Langbein1947_p146.txt', skiprows = 2) 

RiverData7 = np.loadtxt('Langbein1947_p149.txt', skiprows = 2) 

RiverData8 = np.loadtxt('Langbein1947_p152.txt', skiprows = 2) 

plotnums = 1  

for plotnums in range (1,9): 
    plt.subplot(2,4,plotnums) 
    plt.plot((RiverData1[:,0]), (RiverData1[:,1]),'ko') 
    plt.plot((RiverData2[:,0]), (RiverData2[:,1]),'ko') 
    plt.plot((RiverData3[:,0]), (RiverData3[:,1]),'ko') 
    plt.plot((RiverData4[:,0]), (RiverData4[:,1]),'ko') 
    plt.plot((RiverData5[:,0]), (RiverData5[:,1]),'ko') 
    plt.plot((RiverData6[:,0]), (RiverData6[:,1]),'ko') 
    plt.plot((RiverData7[:,0]), (RiverData7[:,1]),'ko') 
    plt.plot((RiverData8[:,0]), (RiverData8[:,1]),'ko') 
    plt.xlabel('River Length (km)') 
    plt.ylabel('Area (Km$^2$)') 
    plt.xscale('log') 
    plt.yscale('log') 
    plotnums=plotnums+1 

    plt.show() 
+0

forループの 'plotnums = plotnums + 1'を削除します – Thiru

答えて

0

あなたがフィギュアを作成して、複数のサブプロットを追加することができますサブプロット

http://matplotlib.org/examples/animation/subplots.html

にmatplotlibのドキュメントを確認してください。

fig = plt.figure() 
for plotnums in range(1,9): 
    plot1 = fig.add_subplot(2,4,plotnums) # update the numbers as required 
    ... 
+0

私は8つのサブプロットを個別に細かくプロットすることができます。問題は、各text_fileをループを介して8つの個別のサブプロットの1つに割り当てることです。 – Milo

1

ループ内にもデータを読み込むことをお勧めします。さらに、軸のハンドルを変数に取り込んで、データのプロットに使用する軸を制御する必要があります。データのアーチファクトを避けるために、各反復の最後に変数をNoneに設定することをお勧めします。

import numpy as np 
import matplotlib.pyplot as plt 

# store your file names in a list to be able to iterate over them: 

FILES = ['Gray1961.txt','Hack1957.txt','Rignon1996.txt',\ 
     'Robert1990.txt','Langbein1947_p145.txt','Langbein1947_p146.txt',\ 
     'Langbein1947_p149.txt','Langbein1947_p152.txt'] 

# specify desired conversion factors for each file, separated by x and y 

xFactor =[1.00, 1.00, 1.00, 1.00\ 
      2.59, 2.59, 2.59, 2.59] 

yFactor = [1.000, 1.000, 1.000, 1.000\ 
      1.609, 1.609, 1.609, 1.609] 

# loop through all files; 
# range(len(FILES)) returns a list of integers from 0 to 7 in this example 

for n in range(len(FILES)): 

    # load the data from each file: 

    RiverData = np.loadtext(FILES[n], skiprows = 2) 

    # convert the data per the specified factors: 

    X = [xi * xFactor[n] for xi in RiverData[:,0]] 
    Y = [yi * yFactor[n] for yi in RiverData[:,1]] 

    # create sub-plot, here, you need to use n+1, 
    # because your loop iterable counts from 0, 
    # but your sub-plots count from 1 

    ax = plt.subplot(2,4,n+1) 

    # use the created axis object to plot your data; 
    # use ax.plot instead of plt.plot 

    ax.plot(X, Y,'ko') 

    # specify your axis details, again use ax.plot instead of plt.plot 

    ax.set_xlabel('River Length (km)') 
    ax.set_ylabel('Area (Km$^2$)') 

    # the file name can be used as plot title 
    # (if you want to omit the .txt ending, use [:-4] 
    # to omit the last for characters in the title string) 

    ax.set_title(FILES[n][:-4]) 
    ax.set_xscale('log') 
    ax.set_yscale('log') 

    # to avoid surprises going from one loop to the next, 
    # clear the data from the variables 

    RiverData = None 
    ax = None 

plt.show() 

Thiru pointed outとして、あなたはfor -loopの内側にあなたのiterableをインクリメントする必要はありません。

+0

ありがとうSchorsch、非常に大きな助け。それらがすべてGray1961として表示されるので、各サブプロットの上に異なるファイル名を順番にプロットする方法はありますか? – Milo

+0

ありがとうSchorsch、非常に大きな助け。私は、各ファイルが最初の4つのファイルの場合であるx(km^2の領域)とy(長さ= km)で構成されているという問題があります。しかし、最後の4つのファイル(landgbeinファイル)は(マイル^ 2)、長さは(マイル)です。 Iveはこれに換算係数(km^2に達するためにマイル2のx2.59)とマイル(km)のx1.609を乗算しようとしました。前に説明したループでこれを動作させることはできませんでした。それらがすべてGray1961で表示され続けるので、各サブプロットの上に異なるファイル名を順番にプロットする方法はありますか? – Milo

+0

@Milo変更されたコードブロックを参照してください。この回答が助けになった場合は、答えの左上隅の上三角( '1'の上)をクリックして、それを上書きすることを検討してください。 [あなたは '1'の下にあるチェックマークをクリックすることでそれを受け入れることも考えられます](http://stackoverflow.com/help/someone-answers)。 – Schorsch

関連する問題