【问题标题】:Function does not finish executing in `hist` function only on second time函数仅在第二次才在“hist”函数中完成执行
【发布时间】:2019-03-07 06:42:48
【问题描述】:

在 Python DataFrame 中,我试图生成直方图,它是在第一次调用函数时生成的。但是,当第二次调用 create_histogram 函数时,它会卡在 h = df.hist(bins=3, column="amount")。当我说“卡住”时,我的意思是说它没有完成执行该语句并且执行没有继续到下一行,但同时它没有给出任何错误或从执行中中断。这里到底是什么问题,我该如何解决?

import matplotlib.pyplot as plt
...
...
    def create_histogram(self, field):
        df = self.main_df    # This is DataFrame
        h = df.hist(bins=20, column="amount")
        fileContent = StringIO()
        plt.savefig(fileContent, dpi=None, facecolor='w', edgecolor='w',
                    orientation='portrait', papertype=None, format="png",
                    transparent=False, bbox_inches=None, pad_inches=0.5,
                    frameon=None)
        content = fileContent.getvalue()
        return content

【问题讨论】:

  • 如果没有Minimal, Complete, and Verifiable example,这将很难回答。您能否提供可以复制和粘贴重现问题的最少代码量?
  • 只是为了好玩,我创建了一个DataFrame,并连续两次调用DataFrame.hist()并没有问题,所以目前,您的问题无法重现
  • 问题中给出的是与该功能相关的多数代码。剩下的是调用此函数的 API 调用代码。所以,我已经给你代码了。既然它对您来说无法重现,那可能是数据大小吗?或者可能是别的什么?您可能猜到的任何内容都会有所帮助。
  • @DizietAsahi,最后,我找到了问题并修复了它(在答案部分给出)。谢谢你们的cmets。

标签: python python-2.7 dataframe matplotlib sklearn-pandas


【解决方案1】:

最后我自己弄明白了。

每当我执行该功能时,我总是会收到以下日志消息,但由于我缺乏意识,我忽略了它。

后端 TkAgg 是交互式后端。开启交互模式。

但后来我意识到这可能是它以交互模式运行(这不是我的目的)。所以,我发现有一种方法可以关闭它,如下所示。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt 

这解决了我的问题。

注意use 应在按照此处给出的顺序导入 matplotlib 后立即调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多