0

由于数据访问模式,我需要将各种直方图保存在 Python 列表中,然后稍后访问它们以作为多页 PDF 的一部分输出。

如果我一创建直方图就将它们保存到我的 PDF 中,我的代码可以正常工作:

def output_histogram_pdf(self, pdf):
        histogram = plt.hist(
            x=[values], bins=50)
        plt.xlabel(xlabel)
        plt.ylabel(ylabel)
        plt.title(title)

        if isinstance(pdf, PdfPages):
            pdf.savefig()

但是,如果我将它们保存到一个列表中以便以后可以操纵订单,我就会遇到麻烦。

histogram_list.append(histogram)

然后稍后

for histogram in histogram_list:
            plt.figure(histogram)
            pdf.savefig()

这不起作用。我要么保存了错误的东西,要么我不知道如何正确打开我保存的东西。

我花了相当长的时间在谷歌上搜索一个可行的解决方案,但其中的许多术语都非常模糊,以至于我在搜索结果中发现了大量不同类型的问题。任何帮助将不胜感激,谢谢!

4

2 回答 2

1

简答

您可以使用plt.gcf()

创建图形时,在设置 xlabel、ylabel 和标题后,将图形附加到直方图列表中。

histogram_list.append(plt.gcf())

然后,您可以稍后遍历列表并调用 savefig。

长答案

plt.hist不返回图形对象。但是,可以使用gcf(Get Current Figure) 获取图形对象。

如果您不想使用当前图形,您始终可以自己创建图形,使用plt.figureor plt.subplot

无论哪种方式,由于您已经在绘制直方图并为图形设置标签,因此您希望将图形附加到列表中。

选项 1:使用 gcf

    histogram = plt.hist(
        x=[values], bins=50)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.title(title)
    histogram_list.append(plt.gcf())

选项2:创建自己的人物

    figure = plt.figure(figsize=(a,b,))
    # draw histogram on figure
    histogram_list.append(figure)
于 2020-12-08T23:01:25.733 回答
1

每个都由每个 bin 的值在哪里histogram形成,是 bin的边缘(1 比 n 多),并且是创建条形的艺术家。(n,bins,patches)nbinspatches

最简单的是,尝试将每个直方图绘制为

for histogram in histogram_list:
    n = histogram[0]
    bins = histogram[1]
    plt.plot(bins[:-1], n, '-', ds='steps-pre')
于 2020-12-08T23:06:33.673 回答