我一直在尝试将我的绘图转换成函数,这样我就可以重用它们。现在,我正在尝试绘制子图,每个子图绘制一个类别随时间变化的销售额。在它的循环形式中,它看起来像这样:
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()Category有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个图)。知道会发生什么吗?(简化和翻译的实际代码,所以,如果需要,我可以张贴实际代码)提前感谢!
编辑:在删除NaNs后,该函数尊重子图网格,但我得到的图形仍然比预期的要少。
发布于 2018-07-20 06:55:38
字符串'Category'有8个字符。你遍历这个字符串的长度,因此得到8个子图。
我猜,相反,您希望循环遍历所有独特的类别。
for i, j in enumerate(df[cat].unique()):发布于 2018-07-20 04:48:44
如果非要我猜的话,它是基于你的变量i的最小值,这个最小值是0吗?如果不是,则从偏移位置开始绘制子图。如果i的最小值是1,那么您的第一个子图将如下所示
subplot(3,5,2)并且在所分配的第二子图网格空间而不是所需的第一子图网格空间。另外,检查i的最大值是多少。如果您有效地显示了10 (9,1为空),那么您的i值可能不会迭代到您期望的值,从而获得15个图(14,1为空)。我遇到过类似的情况,在迭代时检查i的值对我很有帮助。希望这能有所帮助!
编辑:我应该注意,检查j的值也会很有帮助。
(这也是我对一个问题的第一个回答,所以如果答案格式很奇怪,那么我道歉)
https://stackoverflow.com/questions/51431282
复制相似问题