我目前正在尝试开发一种便利功能,该功能应该为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
答案 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()