子图功能未显示所有子图

时间:2018-07-19 20:34:04

标签: python pandas matplotlib subplot

我一直在尝试将绘图转换为函数,以便重新利用它们。现在,我尝试绘制子图,其中每个子图都绘制一个类别随时间的销售情况。 循环形式如下:

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之后,该函数会遵循子图网格,但是仍然得到的图形比想象的要少。

2 个答案:

答案 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的值也将有所帮助。

(这也是我对问题的第一个答案,因此,如果答案格式很奇怪,那么我道歉)