2016-08-23 9 views
0

matplotlibを使用して6つのグラフを1ページに保存したい。グラフは各AAの関数の呼び出しであり、それを保存する前にテストするために以下のコードを思い付いた:複数の関数を同じファイルにプロットして保存するmatplotlib

def save_plot (output_DF, path = None): 
    fig = plt.figure(1) 
    sub1 = fig.add_subplot(321) 
    plt.plot(plot_BA(output_DF)) 
    sub2 = fig.add_subplot(322) 
    sub2.plot(plot_merchantableVol(output_DF)) 
    sub3 = fig.add_subplot(323) 
    sub3.plot(plot_topHeight(output_DF)) 
    sub4 = fig.add_subplot(324) 
    sub4.plot(plot_GrTotVol(output_DF)) 
    sub5 = fig.add_subplot(325) 
    sub5.plot(plot_SC(output_DF)) 
    sub6 = fig.add_subplot(326) 
    sub6.plot(plot_N(output_DF)) 
    plt.show() 

それは方法を、私は6つの空のプロットでページを作成するだけでなく、6つの別のプロットを作成できますか私が呼び出すすべての機能に対してplot_BA(output_DF)は、たとえば、CSVファイルを読み込んでプロットを作成するために呼び出す関数です(個々に動作しています)。もう1つは同様の機能であり、同様に機能しています。私はグラフを図の指定された場所に置くために何かを見逃しているようです。

ここに私が使用している機能の1つがあります。

def plot_BA(output_DF): 
    BA = output_DF.loc[:,['BA_Aw','BA_Sw', 'BA_Sb','BA_Pl']]  
    BAPlot = BA.plot() 
    plt.xlabel('Year', fontsize=14) 
    plt.ylabel('BA (m2)') 
    return True 

ヒントはありますか?

+1

何が問題なのですか?これは私のために働く(少なくともplot_Xが配列を返す場合は、この関数の中でプロットするべきではない)。 – sascha

+0

plot_Xがプロットを返しています。私は主な質問にコードを貼り付けます –

+0

さて...あなたの関数に引数subplot_axを追加する必要があります(そしてこれらをsub1、sub2、...と呼びます)。次に、関数内でsubplot_ax.plot()を使用します。 xlabelとcoの場合も同じです。これらの関数の名前は、(matplotlibのGoogleオブジェクト指向の使い方とは)異なる場合があります。そして、あなたはsavefigを内部で呼び出すべきではありません。 – sascha

答えて

0

このような何か試してみてください:

import matplotlib.pyplot as plt 
import random 

def function_to_call(func_name, ax): 
    data = range(10) 
    random_x_label = random.choice('abcdefghijk') 
    random_y_label = random.choice('abcdefghijk') 
    random.shuffle(data) # demonstration 

    ax.plot(data) 
    ax.set_xlabel(random_x_label) 
    ax.set_ylabel(random_y_label) 
    ax.set_title(func_name) 


fig = plt.figure(1) 
sub1 = fig.add_subplot(321) 
function_to_call('call_0', sub1) 
sub2 = fig.add_subplot(322) 
function_to_call('call_1', sub2) 
sub3 = fig.add_subplot(323) 
function_to_call('call_2', sub3) 
sub4 = fig.add_subplot(324) 
function_to_call('call_3', sub4) 
sub5 = fig.add_subplot(325) 
function_to_call('call_4', sub5) 
sub6 = fig.add_subplot(326) 
function_to_call('call_5', sub6) 
plt.tight_layout() # just to improve spacings 
plt.show() 
fig.savefig('output_plot.png') 

をアイデアは、あなたの関数に(全体図内の多くの一つである)あなたの軸オブジェクト前方にあります。次に、軸レベルの関数が必要になります。 plt.xlabel図レベル)とax.set_xlabel軸レベル)の違いに注目してください。

enter image description here

+0

ありがとうございました@sasha –

+0

私の主な問題は、各図が同じx軸の範囲を共有しますが、y軸は共有しないことです。言い換えれば、私はそれぞれのグラフを同じプロットの繰り返しではなく、ユニークなプロットとみなさなければなりません。 –

+0

それでは問題は何ですか? xとyをax.plot(x、y)にパストするだけです。あなたがプロットの間でいくつかの軸を共有したい場合には、もっと面白くなるでしょう。 – sascha

関連する問題