我一直在尝试将绘图转换为函数,以便重新利用它们。现在,我尝试绘制子图,其中每个子图都绘制一个类别随时间的销售情况。 循环形式如下:
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个图)。知道会发生什么吗? (经过简化和翻译的实际代码,因此,如果需要,我可以发布实际代码) 预先感谢!
编辑:在删除NaN之后,该函数会遵循子图网格,但是仍然得到的图形比想象的要少。
答案 0 :(得分:1)
字符串'Category'
有8个字符。您遍历此字符串的长度,因此得到8个子图。
我猜想,您想遍历所有唯一类别。
for i, j in enumerate(df[cat].unique()):
答案 1 :(得分:0)
如果我不得不猜测它是基于变量i的最小值的。最小值是0吗?如果不是,那么您将在偏移位置开始子图。如果i的最小值是1,那么您的第一个子图将是
> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:
[1] fr_FR.UTF-8/fr_FR.UTF-8/fr_FR.UTF-8/C/fr_FR.UTF-8/fr_FR.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] microbenchmark_1.4-4 ReporteRs_0.8.10 ReporteRsjars_0.0.4 officer_0.3.2
loaded via a namespace (and not attached):
[1] Rcpp_0.12.17 knitr_1.20 xml2_1.2.0 magrittr_1.5 uuid_0.1-2 xtable_1.8-2
[7] R6_2.2.2 tools_3.5.1 rvg_0.1.9.001 R.oo_1.22.0 png_0.1-7 htmltools_0.3.6
[13] yaml_2.1.19 digest_0.6.15 zip_1.0.0 rJava_0.9-10 shiny_1.1.0 later_0.7.3
[19] base64enc_0.1-3 R.utils_2.6.0 promises_1.0.1 mime_0.5 compiler_3.5.1 gdtools_0.1.7
[25] R.methodsS3_1.7.1 httpuv_1.4.4.2
,并在第二个分配的子图网格空间,而不是根据需要的第一个。另外,检查您的i的最大值是多少。如果您有效地显示10(9个空白为1),那么您的i值可能不会迭代到您期望得到的15个绘图(14个空白为1个空白)。我遇到了类似的情况,您遇到了这种情况,并检查了迭代的i的值对我的帮助。希望这会有所帮助!
编辑:我应该注意,检查j的值也将有所帮助。
(这也是我对问题的第一个答案,因此,如果答案格式很奇怪,那么我道歉)