在同一个文件matplotlib中绘制并保存多个函数

时间:2016-08-23 23:38:16

标签: python matplotlib

我想使用matplotlib在一个页面中保存6个图表。这些图表都是函数的调用,并在保存之前提出以下代码进行测试:

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文件并创建一个图(单独它正在工作)。另一个是类似的功能,也在工作。似乎我错过了将图形放在图形指定位置的东西。

这是我正在使用的功能之一。

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 个答案:

答案 0 :(得分: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