【问题标题】:Pandas: unable to save multiple plots using for loop [duplicate]Pandas:无法使用 for 循环保存多个图 [重复]
【发布时间】:2018-06-23 21:35:23
【问题描述】:

我正在尝试以 gif 格式保存由 pandas.dataframe.plot 创建的多个图。我正在使用 for 循环来迭代这些图。问题是执行循环后保存的图不正确。这是代码

for i in range(len(plot_cols)):
    grouped = cust_data[plot_cols[i]].groupby(cust_data['Cluster_ID'])
    mean_trans = grouped.mean()
    plot = mean_trans.plot(kind = 'bar', figsize = [10, 7])
    plot.set_ylabel(plot_cols[i])
    fig = plot.get_figure()
    fig.savefig("C:\\Users\\utkarsh.a.ranjan\\Documents\\pyqt_data\\view_bar_graphs\\cluster_" + str(i))

当我删除 for 循环并替换 i 的各个值时,我得到了正确的图。

我想要的情节是这些

我得到的情节是这些

【问题讨论】:

  • 您好,欢迎分享mcve
  • 您可以尝试将plt.figure() 放在新画布循环的开头

标签: python pandas matplotlib


【解决方案1】:

在每次迭代中清除绘图

for i in range(len(plot_cols)):
    grouped = cust_data[plot_cols[i]].groupby(cust_data['Cluster_ID'])
    mean_trans = grouped.mean()
    plot = mean_trans.plot(kind = 'bar', figsize = [10, 7])
    plot.set_ylabel(plot_cols[i])
    fig = plot.get_figure()
    ## Clear plot here
    plot.clf()

    fig.savefig("C:\\Users\\utkarsh.a.ranjan\\Documents\\pyqt_data\\view_bar_graphs\\cluster_" + str(i))

【讨论】:

  • 为什么要先清除再保存?
  • 信息已经保存在 fig 变量中,plot 的信息被清除而不是 fig
【解决方案2】:

您的问题可能已在评论中得到解答(请参阅重复问题的链接),以下是对您的代码的一些小改进:

import os
def filename(string):
    return os.path.join('C:\\Users\\utkarsh.a.ranjan\\Documents\\'
                        'pyqt_data\\view_bar_graphs',
                        'cluster{}'.format(string))

for i, column in enumerate(plot_cols): 
    mean_trans = (cust_data[column]
                  .groupby(cust_data['Cluster_ID'])
                  .mean())
    ax = mean_trans.plot(kind = 'bar', figsize = [10, 7])
    ax.set_ylabel(plot_cols[i])
    fig = ax.get_figure()        
    fig.savefig(filename(i))
    # initial problem
    ax.clf()

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2021-06-20
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多