【问题标题】:ploting and save multiple functions in the same file matplotlib在同一个文件 matplotlib 中绘制和保存多个函数
【发布时间】:2016-08-24 09:27:43
【问题描述】:

我想使用 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

有什么建议吗?

【问题讨论】:

  • 那么到底是什么问题呢?这对我有用(至少如果 plot_X 每个都返回一个数组。你不应该在这个函数内绘图)。
  • plot_X 正在返回一个情节。我将把它的代码粘贴到主要问题中
  • 好的...您必须将参数 subplot_ax 添加到您的函数中(并使用 sub1、sub2、... 调用它们)。然后在你的函数中使用 subplot_ax.plot() 。 xlabel 和 co 也是如此。但是这些函数的名称可能会有所不同(谷歌matplotlib的面向对象用法)。而且你不应该在里面调用 savefig。

标签: python matplotlib


【解决方案1】:

试试这样的:

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.xlabelfigure-level)和ax.set_xlabelaxes-level)之间的区别。

【讨论】:

  • 我的主要问题是每个图形共享相同的 x 轴范围,但不共享 y 轴。换句话说,我必须将每个图视为一个独特的图,而不是同一图的重复
  • 那有什么问题呢?只需将 x 和 y 放入 ax.plot(x, y)。如果您想在绘图之间共享一些轴,它只会变得更有趣。
猜你喜欢
  • 2014-04-12
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多