matplotlib与熊猫的多个情节

时间:2019-02-15 11:33:17

标签: python pandas matplotlib

我目前正在尝试开发一种便利功能,该功能应该为pandas数据框中的每一列创建一个基本图,其中包含数据框中所有列的值及其数量。

def plot_value_counts(df, leave_out):
  # is supposed to create the subplots grid where I can add the plots
  fig, axs = plt.subplots(int(len(df)/2) + 1,int(len(df)/2) + 1)
  for idx, name in enumerate(list(df)):
    if name == leave_out:
      continue
    else:
      axs[idx] = df[name].value_counts().plot(kind="bar")
  return fig, axs

此代码段永远运行,永远不会停止。 我尝试查看关于stackoverflow的其他类似问题,但找不到适合我情况的特定内容。

subplots功能的使用来自以下问题:Is it possible to automatically generate multiple subplots in matplotlib?

在数据文件的简短示例下面,以便每个人都可以理解该问题: https://gist.github.com/hentschelpatrick/e0a7e1400a4b5c356ec8b0e4952f8cc1#file-train-csv

2 个答案:

答案 0 :(得分:1)

您可以在绘图方法docs中传递axis对象。而且您应该在列上进行迭代:

fig, axs = plt.subplots(int(len(df)/2) + 1,int(len(df)/2) + 1)
for idx, name in enumerate(df.columns):
    if name == leave_out:
        continue
    else:
        df[name].value_counts().plot(kind="bar", ax=axs[idx])

编辑:如果您遇到内存问题(似乎没有运行),请先尝试不使用子图,并show使用每个图:

for idx, name in enumerate(df.columns):
    if name == leave_out:
        continue
    else:
        df[name].value_counts().plot(kind="bar")
        plt.show()

答案 1 :(得分:1)

这是我为我的项目编写的函数,用于绘制pandas数据框中的所有列。它将生成一个大小为nx4的网格,并将绘制所有列

def plotAllFeatures(dfData):
    plt.figure(1, figsize=(20,50))
    pos=1
    for feature in dfData.columns:
        plt.subplot(np.ceil(len(dfData.columns)/4),4,pos)
        dfData[feature].plot(title=feature)
        pos=pos+1
    plt.show()