【发布时间】:2017-11-14 13:18:55
【问题描述】:
我有一个数据框,我将数据框分成三个子集。每个子集有 3 到 4 行数据。在我将数据框分成三个子集后,我使用 Matplotlib 绘制它们。
我遇到的问题是我无法创建一个图,其中每个子图都是使用切片 DataFrame 绘制的。例如,在一组三个一组中,我只绘制了一个图(最后一个子图),而其余两个图没有数据,组中的初始集。对于所有三个子图,“r”值似乎都没有传递给“r.plot”。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD'))
df['key1'] = 0
df.key1.iloc[0:3] = 1
df.key1.iloc[3:7] = 2
df.key1.iloc[7:] = 3
df_grouped = df.groupby('key1')
for group_name, group_value in df_grouped:
rows, columns = group_value.shape
fig, axes = plt.subplots(rows, 1, sharex=True, sharey=True, figsize=(15,20))
for i,r in group_value.iterrows():
r = r[0:columns-1]
r.plot(kind='bar', fill=False, log=False)
【问题讨论】:
-
感谢您提供带有随机数据的可复制示例。但是,我无法完全重现这一点,因为此示例中未定义
rows变量。你能澄清rows的价值吗? -
行是随机数生成器创建的索引 A、B、C 和 D 中的值。此代码应生成一个输出,其中每个子集中仅填充一个子图。第一个子集由 3 行数据组成,第二个集合包含四行数据,第三个集合包含三行数据。每行数据有4个值,索引为a、b、c、d。
-
对不起,我应该更清楚。您在此行中定义您的
rows变量:rows, columns = group_value.shape,直到您尝试将它与此行一起使用后的三行:fig, axes = plt.subplots(rows, 1, sharex=True, sharey=True, figsize=(15,20))。要运行此代码示例,必须在使用之前定义rows。这就是我在尝试运行您的代码时遇到的错误。 -
是的,你是对的。它应该按照您的建议移动。但是,在我的子图中,只绘制了其中一个。这就是我要解决的问题。谢谢。
-
我还添加了 pyplot 导入
标签: python pandas matplotlib