子图函数不显示所有子图

Subplot function not showing all subplots

我一直在尝试将我的绘图转换为函数以便重新利用它们。现在,我正在尝试绘制子图,其中每个子图都绘制了一段时间内某个类别的销售额。 在其循环形式中,它看起来像这样:

Categories=dfs['Category'].unique()
fig, ax=plt.subplots(figsize=(18,10))

for j,i in zip(Equipos,range(len(Equipos))):
    df0=dfs.loc[dfs['Category']==j]
    df_aux=df0.groupby(['Date'], as_index=False).sum()
    plt.subplot(3,5,i+1)
    plt.plot( df_aux['Date'], df_aux['Sales'])

plt.show()

类别有 14 个值,因此这会带来一个 3x5 网格,最后一个单元格中没有图表。 但是当我把它变成这样的函数时:

def subplots_category(cat,measure,df=dfs,w=18,h=10):
    fig, ax=plt.subplots(figsize=(18,10))

    for j,i in zip(df[cat].unique(),range(len(cat))):
        df0=dfs.loc[dfs[cat]==j]
        df_aux=df0.groupby(['Date'], as_index=False).sum()
        plt.subplot(3,5,i+1)
        plt.plot( df_aux['Date'], df_aux[measure])

    plt.show()

然后输入:

subplots_category('Category','Sales')

我得到一个 2x5 的网格,最后一个没有出现(9 个图形)。知道会发生什么吗? (简化和翻译的实际代码,因此,如果需要,我可以 post 实际代码) 提前致谢!

编辑:删除 NaN 后,该函数尊重子图网格,但我得到的图表仍然比预期的要少。

如果我不得不猜测它是基于你的变量 i 的最小值。最小值是0吗?如果不是,那么您将在偏移位置开始子图。如果 i 的最小值是,比方说 1,那么你的第一个子图就像

subplot(3,5,2)

并在第二个分配的子图网格 space 而不是第一个。另外,检查 i 的最大值是多少。如果您有效地显示 10(9 个,1 个为空),那么您的 i 值可能不会迭代到您为了获得 15 个图(14 个,1 个为空)而期望的值。我有一个类似的情况,你正在 运行 并检查我的 i 值,因为它被迭代帮助了我。希望这对您有所帮助!

编辑:我应该注意,检查 j 的值也会有所帮助。

(这也是我第一次回答问题,所以如果答案格式很奇怪,那么我道歉)

字符串'Category'有8个字符。你遍历这个字符串的长度,因此得到 8 个子图。

我猜你想遍历所有唯一类别。

for i, j in enumerate(df[cat].unique()):