From 3ba31f1c9ffa27bdf0ee9428865d1e361ebf00a5 Mon Sep 17 00:00:00 2001 From: Xiangyun Huang Date: Fri, 15 Mar 2024 12:23:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=95=B0=E6=8D=AE=E6=8E=A2=E7=B4=A2?= =?UTF-8?q?=E9=83=A8=E5=88=86=E7=A7=BB=E9=99=A4=EF=BC=8C=E5=B0=86=E4=BD=9C?= =?UTF-8?q?=E4=B8=BA=E3=80=8A=E7=8E=B0=E4=BB=A3=E7=BB=9F=E8=AE=A1=E5=9B=BE?= =?UTF-8?q?=E5=BD=A2=E3=80=8B=E7=AC=AC=E4=BA=8C=E7=89=88=20(#141)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 将数据探索部分移除,将作为《现代统计图形》第二版 * svn data * 移除依赖 * 移除 ggbeeswarm * add shiny * add ggstats --- .github/workflows/quarto-book-macos.yaml | 9 +- .github/workflows/quarto-book-ubuntu.yaml | 10 +- DESCRIPTION | 24 +- README.md | 59 +- _quarto.yml | 9 - data/MathAnxiety.rds | Bin 626 -> 0 bytes data/china-age-sex-2020.rds | Bin 1064 -> 0 bytes data/china-household-sex-2020.rds | Bin 3459 -> 0 bytes data/china-raise-illiteracy-2020.rds | Bin 1227 -> 0 bytes data/china-sex-ratio-2020.rds | Bin 1572 -> 0 bytes data/contributions.json | 1 - data/gapminder-2020.rds | Bin 95087 -> 0 bytes data/rongelap.rds | Bin 976 -> 0 bytes data/rongelap_coastline.rds | Bin 7432 -> 0 bytes data/rversion-2022.rds | Bin 1017 -> 0 bytes data/usa-mortality-2020.rds | Bin 156342 -> 0 bytes data/volcano.csv | 87 -- index.qmd | 10 +- preface.qmd | 17 +- visualization-advanced.qmd | 826 ------------- visualization-basic.qmd | 809 ------------ visualization-graphics.qmd | 685 ---------- visualization-intermediate.qmd | 1371 --------------------- visualization-lattice.qmd | 843 ------------- visualization-practice.qmd | 576 --------- visualization-tikz.qmd | 512 -------- 26 files changed, 42 insertions(+), 5806 deletions(-) delete mode 100644 data/MathAnxiety.rds delete mode 100755 data/china-age-sex-2020.rds delete mode 100755 data/china-household-sex-2020.rds delete mode 100755 data/china-raise-illiteracy-2020.rds delete mode 100755 data/china-sex-ratio-2020.rds delete mode 100755 data/contributions.json delete mode 100755 data/gapminder-2020.rds delete mode 100755 data/rongelap.rds delete mode 100755 data/rongelap_coastline.rds delete mode 100755 data/rversion-2022.rds delete mode 100755 data/usa-mortality-2020.rds delete mode 100644 data/volcano.csv delete mode 100644 visualization-advanced.qmd delete mode 100755 visualization-basic.qmd delete mode 100644 visualization-graphics.qmd delete mode 100755 visualization-intermediate.qmd delete mode 100644 visualization-lattice.qmd delete mode 100755 visualization-practice.qmd delete mode 100644 visualization-tikz.qmd diff --git a/.github/workflows/quarto-book-macos.yaml b/.github/workflows/quarto-book-macos.yaml index 4f6dad30..eb33bcf9 100644 --- a/.github/workflows/quarto-book-macos.yaml +++ b/.github/workflows/quarto-book-macos.yaml @@ -4,6 +4,10 @@ on: pull_request: branches: main +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + name: Book-MacOS jobs: @@ -25,7 +29,6 @@ jobs: with: use-public-rspm: true r-version: '4.3.3' - extra-repositories: 'https://grantmcdermott.r-universe.dev' - uses: r-lib/actions/setup-r-dependencies@v2 @@ -69,10 +72,6 @@ jobs: tikzDevice::tikzTest("$\\sin(x^2/2 - y^2/4 + 3) \\cos(2 x + 1 - \\exp(y))$") shell: Rscript {0} - - name: Reinstall R packages from source - run: | - install.packages(c("Matrix", "MatrixModels", "rjags", "lme4", "TMB", "glmmTMB"), repos = "https://cran.r-project.org/", type = "source") - shell: Rscript {0} - name: Render Book run: | diff --git a/.github/workflows/quarto-book-ubuntu.yaml b/.github/workflows/quarto-book-ubuntu.yaml index faf139be..73c036e9 100644 --- a/.github/workflows/quarto-book-ubuntu.yaml +++ b/.github/workflows/quarto-book-ubuntu.yaml @@ -4,6 +4,11 @@ on: pull_request: branches: main +# https://github.com/dmlc/xgboost/commit/bc516198dccd9fb345ac318c56ee7bb48bba5aae +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + name: Book-Ubuntu jobs: @@ -25,7 +30,6 @@ jobs: with: use-public-rspm: true r-version: '4.3.3' - extra-repositories: 'https://grantmcdermott.r-universe.dev' - uses: r-lib/actions/setup-r-dependencies@v2 @@ -67,10 +71,6 @@ jobs: tikzDevice::tikzTest("$\\sin(x^2/2 - y^2/4 + 3) \\cos(2 x + 1 - \\exp(y))$") shell: Rscript {0} - - name: Reinstall R packages from source - run: | - install.packages(c("Matrix", "MatrixModels", "rjags", "lme4", "TMB", "glmmTMB"), repos = "https://cran.r-project.org/", type = "source") - shell: Rscript {0} - name: Setup magick run: | diff --git a/DESCRIPTION b/DESCRIPTION index 3ee21ce1..6ce59a42 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -11,7 +11,6 @@ Depends: R (>= 4.3.0) Imports: BB, - beanplot, broom, car, coin, @@ -30,25 +29,12 @@ Imports: gifski, ggalluvial, gganimate (>= 1.0.9), - ggbeeswarm, - ggbump, - ggdensity, - ggeffects, - ggExtra, - ggforce, ggfortify, - ggmosaic, - ggnewscale, ggplot2 (>= 3.5.0), ggraph (>= 2.2.0), ggrepel, ggridges, - ggsignif, - ggstats (>= 0.5.0), - ggstream, - ggthemes (>= 5.0.0), - ggTimeSeries, - ggVennDiagram, + ggstats, ggwordcloud, glmnet, gt (>= 0.10.1), @@ -83,30 +69,24 @@ Imports: RSQLite, scs, showtext, + shiny, spacyr, text2vec, tidygraph, - tinyplot, titanic, tikzDevice, treemapify, TSP, vcd, - vioplot, visNetwork, webshot2, xml2, xts -Remotes: - davidsjoberg/ggbump, - davidsjoberg/ggstream Suggests: quarto (>= 1.2), rsconnect (>= 1.1.0) Enhances: sp (>= 2.0-0) SystemRequirements: pgf (>= 3.00) -Additional_repositories: - https://grantmcdermott.r-universe.dev Encoding: UTF-8 License: CC NC ND 4.0 diff --git a/README.md b/README.md index 7fd6ae60..75c0d137 100755 --- a/README.md +++ b/README.md @@ -4,14 +4,6 @@ 本仓库作为《R 语言数据分析实战》书稿源码的托管地址。目前内容较多的章节有 -- 数据探索 - - ggplot2 入门 - - 基础图形 - - 统计图形 - - lattice 入门 - - graphics 入门 - - TikZ 入门 - - 探索实践 - 数据交流 - 交互图形 - 交互表格 @@ -107,35 +99,30 @@ Running under: macOS Sonoma 14.3.1, RStudio 2023.12.1.402 Locale: en_US.UTF-8 / en_US.UTF-8 / en_US.UTF-8 / C / en_US.UTF-8 / en_US.UTF-8 Package version: - BB_2019.10.1 beanplot_1.3.1 broom_1.0.5 - car_3.1.2 coin_1.4.3 data.table_1.15.2 - datasauRus_0.1.8 dbplyr_2.4.0 downlit_0.4.3 - dplyr_1.1.4 DT_0.32 dunn.test_1.3.5 - dygraphs_1.1.1.6 e1071_1.7.14 ECOSolveR_0.5.5 - GA_3.2.4 ggalluvial_0.12.5 gganimate_1.0.9 - ggbeeswarm_0.7.2 ggbump_0.1.99999 ggdensity_1.0.0 - ggeffects_1.5.0 ggExtra_0.10.1 ggforce_0.4.2 - ggfortify_0.4.16 ggmosaic_0.3.3 ggnewscale_0.4.10 - ggplot2_3.5.0 ggraph_2.2.0 ggrepel_0.9.5 - ggridges_0.5.6 ggsignif_0.6.4 ggstats_0.5.1 - ggstream_0.1.0 ggthemes_5.1.0 ggTimeSeries_1.0.2 - ggVennDiagram_1.5.2 ggwordcloud_0.6.1 gifski_1.12.0.2 - gt_0.10.1 hexbin_1.28.3 HistData_0.9.1 - jiebaR_0.11 kernlab_0.9.32 knitr_1.45 - latticeExtra_0.6.30 lvplot_0.2.1 magick_2.8.3 - maps_3.4.2 misc3d_0.9.1 nloptr_2.0.3 - nomnoml_0.3.0 patchwork_1.2.0 pdftools_3.4.0 - plot3D_1.4.1 plotly_4.10.4 pROC_1.18.5 - purrr_1.0.2 pwr_1.3.0 quadprog_1.5.8 - quantmod_0.4.26 ragg_1.2.7 ROI_1.0.1 - ROI.plugin.ecos_1.0.2 ROI.plugin.glpk_1.0.0 ROI.plugin.nloptr_1.0.1 - ROI.plugin.quadprog_1.0.1 ROI.plugin.scs_1.1.2 rootSolve_1.8.2.4 - RSQLite_2.3.5 scs_3.2.4 showtext_0.9.7 - spacyr_1.3.0 text2vec_0.6.4 tidygraph_1.3.1 - tikzDevice_0.12.6 tinyplot_0.0.5.9000 titanic_0.1.0 + BB_2019.10.1 broom_1.0.5 car_3.1.2 + coin_1.4.3 data.table_1.15.2 datasauRus_0.1.8 + dbplyr_2.4.0 downlit_0.4.3 dplyr_1.1.4 + DT_0.32 dunn.test_1.3.5 dygraphs_1.1.1.6 + e1071_1.7.14 ECOSolveR_0.5.5 GA_3.2.4 + ggalluvial_0.12.5 gganimate_1.0.9 ggfortify_0.4.16 + ggplot2_3.5.0 ggraph_2.2.1 ggrepel_0.9.5 + ggridges_0.5.6 ggwordcloud_0.6.1 gifski_1.12.0.2 + glmnet_4.1.8 gt_0.10.1 hexbin_1.28.3 + HistData_0.9.1 jiebaR_0.11 kernlab_0.9.32 + knitr_1.45 latticeExtra_0.6.30 lvplot_0.2.1 + magick_2.8.3 maps_3.4.2 misc3d_0.9.1 + nloptr_2.0.3 nomnoml_0.3.0 patchwork_1.2.0 + pdftools_3.4.0 plot3D_1.4.1 plotly_4.10.4 + pROC_1.18.5 purrr_1.0.2 pwr_1.3.0 + quadprog_1.5.8 quantmod_0.4.26 ragg_1.2.7 + ROI_1.0.1 ROI.plugin.ecos_1.0.2 ROI.plugin.glpk_1.0.0 + ROI.plugin.nloptr_1.0.1 ROI.plugin.quadprog_1.0.1 ROI.plugin.scs_1.1.2 + rootSolve_1.8.2.4 RSQLite_2.3.5 scs_3.2.4 + showtext_0.9.7 spacyr_1.3.0 text2vec_0.6.4 + tidygraph_1.3.1 tikzDevice_0.12.6 titanic_0.1.0 treemapify_2.5.6 TSP_1.2.4 vcd_1.4.12 - vioplot_0.4.0 visNetwork_2.1.2 webshot2_0.1.1 - xml2_1.3.6 xts_0.13.2 + visNetwork_2.1.2 webshot2_0.1.1 xml2_1.3.6 + xts_0.13.2 ``` diff --git a/_quarto.yml b/_quarto.yml index 80470ef1..8bbcdffb 100755 --- a/_quarto.yml +++ b/_quarto.yml @@ -35,15 +35,6 @@ book: - wrangling-cleaning.qmd - wrangling-manipulation.qmd - wrangling-processing.qmd - - part: "数据探索" - chapters: - - visualization-basic.qmd - - visualization-intermediate.qmd - - visualization-advanced.qmd - - visualization-lattice.qmd - - visualization-graphics.qmd - - visualization-tikz.qmd - - visualization-practice.qmd - part: "数据交流" chapters: - interactive-graphics.qmd diff --git a/data/MathAnxiety.rds b/data/MathAnxiety.rds deleted file mode 100644 index 68fcbffebaf481003052957614cc8fad802ef474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(D2iwFP!0000019enOZ`&{ocAkA~3pT8W98lWkWANf%f?Z3xS6pf znWBD!dgegrY;10C0}oKfC_|LjD2FH(e}pnXd4=wwTaTS>%3%#$Ms10aB$G{sdnK0~s*avC;q|>?MQKP@D;w*e28lY{XUtS01HP%jpbg`k z)EazUXa|zlrdHrXz9LF0q^C<+8&cT?y4&v#AlxS>BcWak0A~BwHb<0@qQJ zN|EDvGY>s`87e@nW!;f}co|s>pnB_p$--WAArY|T6njl^n-E$dj$(^kFWe=hcC7fe zx#LW_E8FgFEe>XM;#$^@Xg9byO^sBzdThskb~TUOTj*Se%NpK`Xa!^ zQBQZgaX;=EZbYpL)Rb+9R7>?pUH7X4UKb!A-H?| M52iA>*S^^W;OcPwhNCCb)xO1A&k%gy2pBA#Ni<7{OfxcmIEKC}e>=ih!@m>3GrMERk4hm9vaKc;%SK z#H%uqWfJw0!ZC>wlf*Jf5|hL+NfM)D8J)!FI7TNidQwDU^c;E)iQzbglbB?d zNtT#oj!Bjn1IrjB#=tR#AR|v<=3pS&>r-d9b-NTpH3 z<%l?>)@LAQYzFP~$Ds?|S;#ei5vBe#jhs2Bk@*Q0MZXmbo{nnh>o^33yc@P|-VbTV z!k}^aI*d&1g8prLpuMgNO53i%d*uM%$yT7dWf4B!tp?AnPWUD~9y+z-P;~QaD0p@X zcA}?&X`h4y!x;Q9JAv+>{vO2~4}tdRROs{9!h)k0J$U7Jm~X8H?@0?X*7?y(;Xk4$ z&&I>`TZfVAzyN$|It_){74Sl+Pnv1Au@ZbKCE(_IVQJ$VC{l*d_7NL$|G9*oFF%Zo zd()7;qYGuW{fr)}y#&)?F)(3x7+%@32hvJ2;kj2sp?diqXtTc#@1Ki;w<{6khdl-L z^H!M6?SZa}9_T#y0Zh7&z{L|+;UirX6#Z5Ou4|F7+gS!l-)h0wriaPTd~kE{4E(Wa z0V>`(549n?VEC6X_%(eejJI3>&lgQ7w*Cmp*RPn zG-Ccdi7K5Va;frxfeg%VC3NA3*gQh>nqw$$^5qE!o0^DQ`c<5@S-a}4vEjXHf!=|w zbJWk)Bg)G*!2#Qx)Xx@0^I0MV$3xgWlP(m*e1Lug^V^8f-oU&=l#Ez^M&u!IaQ2ia z8)#iq5$!u;l+J4%qWNu)3(ugD-s71X+E2~|&7WhS@%!}RyRFc^tzI(TQYE%D&^Ufn zP@^#~&TYw~@4&}@MUDrXPtyLfV`;q%D%b7L+lBl;fb8}mtP->)ZV!^PEU-Pi&Bwh1 z<)S8Etgi|Z3xh4bQzvMcEEx7rOK07VI$+Ot1b38DsxsKOIQp8Xg)R&Yd23pI_1%wN zsq6o{(c9K58t?O!b$E|{;_Iqg9zIIU#zdA~9zG`iU#Prq4tblK*EO)AxZq$yunFO7 il$DW>wY4?Rzs#c9Z+F=f@`_1_FwbB9@mK6z2LJ$TCJ<-< diff --git a/data/china-household-sex-2020.rds b/data/china-household-sex-2020.rds deleted file mode 100755 index 5cd8e6c0154e16bfc41bf4a8cfc648a9af2303c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3459 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 diff --git a/data/china-sex-ratio-2020.rds b/data/china-sex-ratio-2020.rds deleted file mode 100755 index 7c1d74cba3ccd04f8b6d5871f402896b7ce50ff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1572 zcmV+<2HW``iwFP!000001MOC6OjK7C{@#pGK|w^Mtqa&z16ELp8yYE3ltm*}5%ets ziUMvZI_@hJ6oG<(0TdNcfeK0x3J8n{)}=1NE>=U0k+|@NVTq=q1~q}c@!lCH^nd;1 zOWxdf?)lC+-}%nVyvtbvP@<25fznKVgjrCakE^@9H%M?mS9eh=`N0TIOVl1Wgj%#-NN=sn z)|TZO+|AWV+R7?pow8irkEuqh(iAC`BuaG`4OYufsnP|FX`GRfo?mnIF;ng-M(*00 zER#<3)(4+dQ*RO{TP8VWk|xO3{V9?r-iSPURI17`wqH>xRUJ3>r%5-7lN0I=8T)I^ z&NQjel5toU8)x+895m5I)>F#=pi5S1OIG}+xqX`3r@8%)b5p?T{r_b`$V~(tDMKN% z0%3`p;QPD>mx?+uw>AKgNnJP+Foc<+n8=v5M`M?#1@^tQ$EsylnXxx^;+jPZ>I(ZK zEwM|n?#>EqxV;n(=6A7^VT6Z~?b(68PK z=7slA@?-_Pk``j3=Vx$o&c;Y(F~yNs>+VLo5 zH-yoNIOaDK`%BeWTH_Df{EKkumJr?Djql|i7XP{x%G=xE6W;{aoVDoZa0ga{D>3@r zUD%&@hRx+D==$Bp%A=X^besj%sp0TBm5xON+VHvg9-PZpAZ>(%o5?Dy99N42Z7-Q` z+;%eox2B?a_A1!O##j_Vn9~cE%BNB}W7=T@ABVKWu)j zz@&!}7@)lm`{o*Wk4lC`<3gBKN8{|AS(q`Q1QVuihtm!(jOu#@ZnZwJNqB>TfHW-Q zQ;+ z(^qp5Yuyb^Tp@zncH)P}cFdQP)y(`iwK!5|jT_FF(e4_G0-*!LrapjA%uJ^5fm7J) zJr8GwKE}YwortvX2Y09w16S){8&Hpc`EO9Iba<$NOa7t2#WpR00~GqJ)ehiZ9;+iZa(3|B@n$-T8b|xdWdUe6&7@`{0V{+#*)4SZ=whP59O6k*J8?FBK?Rn zh`xe5(Ni?={)5(~ym>k&p+A|AYBSBRp?z3Wy>C(b66I4*`U$b3bGb+A3O0Ik11s(& z^;Far+(WW=NXK@n6(>aNcDKCl_htq!O`yt#U`iRMt$Kdxk`Fu?NYXIgW-pY@7D?Z-c zNAbS@K6wA-jSSxs9=TC|vLVdq*E#oqR2@q#Wozbsz2WOZ*M=M5X2z1oN~L7O@yDuJqmfecw3(&jS~9BsyD1fv(@lGA%xNj% ztoB^S^V$S?+rw@A_~*5WvWFf4HBxSFF9H_osI6lSB=m2hB1Zn{>FLQMKt)flUM#~x WH-(OkP|G3ue*Oh*nq(9A4FCYCE)pvM diff --git a/data/contributions.json b/data/contributions.json deleted file mode 100755 index 56fbc1e9..00000000 --- a/data/contributions.json +++ /dev/null @@ -1 +0,0 @@ -{"years":[{"year":"2023","total":30,"range":{"start":"2023-01-01","end":"2023-12-31"}},{"year":"2022","total":611,"range":{"start":"2022-01-01","end":"2022-12-31"}},{"year":"2021","total":625,"range":{"start":"2021-01-01","end":"2021-12-31"}},{"year":"2020","total":797,"range":{"start":"2020-01-01","end":"2020-12-31"}},{"year":"2019","total":409,"range":{"start":"2019-01-01","end":"2019-12-31"}},{"year":"2018","total":1109,"range":{"start":"2018-01-01","end":"2018-12-31"}},{"year":"2017","total":70,"range":{"start":"2017-01-01","end":"2017-12-31"}},{"year":"2016","total":1,"range":{"start":"2016-01-01","end":"2016-12-31"}},{"year":"2015","total":1,"range":{"start":"2015-01-01","end":"2015-12-31"}}],"contributions":[{"date":"2023-12-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-12-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-11-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-10-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-09-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-08-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-07-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-06-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-05-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-04-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-03-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-02-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-11","count":3,"color":"#30a14e","intensity":"3"},{"date":"2023-01-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-08","count":5,"color":"#216e39","intensity":"4"},{"date":"2023-01-07","count":3,"color":"#30a14e","intensity":"3"},{"date":"2023-01-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2023-01-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2023-01-04","count":2,"color":"#40c463","intensity":"2"},{"date":"2023-01-03","count":5,"color":"#216e39","intensity":"4"},{"date":"2023-01-02","count":10,"color":"#216e39","intensity":"4"},{"date":"2023-01-01","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-12-31","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-12-30","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-12-29","count":20,"color":"#216e39","intensity":"4"},{"date":"2022-12-28","count":7,"color":"#30a14e","intensity":"3"},{"date":"2022-12-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-12-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-12-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-21","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-12-20","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-12-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-10","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-12-09","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-12-08","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-12-07","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-12-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-12-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-11-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-28","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-11-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-26","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-11-25","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-11-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-23","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-11-22","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-11-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-11-20","count":7,"color":"#30a14e","intensity":"3"},{"date":"2022-11-19","count":7,"color":"#30a14e","intensity":"3"},{"date":"2022-11-18","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-11-17","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-11-16","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-11-15","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-11-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-13","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-11-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-08","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-11-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-11-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-28","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-10-27","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-10-26","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-25","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-24","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-10-23","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-21","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-20","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-18","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-10-17","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-16","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-10-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-14","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-10","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-10-09","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-08","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-10-03","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-10-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-30","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-29","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-25","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-24","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-22","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-18","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-15","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-11","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-09","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-08","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-09-03","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-09-01","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-08-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-26","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-25","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-24","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-08-23","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-08-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-20","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-08-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-18","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-08-17","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-16","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-15","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-11","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-10","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-09","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-08-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-08-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-04","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-08-03","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-08-02","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-08-01","count":9,"color":"#216e39","intensity":"4"},{"date":"2022-07-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-26","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-25","count":15,"color":"#216e39","intensity":"4"},{"date":"2022-07-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-11","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-07-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-09","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-07-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-07-07","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-07-06","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-04","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-07-03","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-07-02","count":9,"color":"#216e39","intensity":"4"},{"date":"2022-07-01","count":11,"color":"#216e39","intensity":"4"},{"date":"2022-06-30","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-06-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-26","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-25","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-19","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-06-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-16","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-14","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-06-13","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-06-12","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-10","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-09","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-08","count":8,"color":"#30a14e","intensity":"3"},{"date":"2022-06-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-06-06","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-04","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-06-03","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-06-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-06-01","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-05-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-29","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-05-28","count":8,"color":"#30a14e","intensity":"3"},{"date":"2022-05-27","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-05-26","count":10,"color":"#216e39","intensity":"4"},{"date":"2022-05-25","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-05-24","count":13,"color":"#216e39","intensity":"4"},{"date":"2022-05-23","count":9,"color":"#216e39","intensity":"4"},{"date":"2022-05-22","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-05-21","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-05-20","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-05-19","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-05-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-17","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-13","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-05-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-05-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-10","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-05-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-07","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-05-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-05","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-05-04","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-05-03","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-05-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-05-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-29","count":7,"color":"#30a14e","intensity":"3"},{"date":"2022-04-28","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-04-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-04-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-04-23","count":7,"color":"#30a14e","intensity":"3"},{"date":"2022-04-22","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-04-21","count":7,"color":"#30a14e","intensity":"3"},{"date":"2022-04-20","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-04-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-17","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-15","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-04-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-04-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-04-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-11","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-04-10","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-08","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-04-05","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-04-04","count":9,"color":"#216e39","intensity":"4"},{"date":"2022-04-03","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-04-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-04-01","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-03-31","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-26","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-03-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-24","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-19","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-17","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-16","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-13","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-12","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-03-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-03-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-27","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-02-26","count":6,"color":"#30a14e","intensity":"3"},{"date":"2022-02-25","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-02-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-12","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-02-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-02-06","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-02-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-02-04","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-02-03","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-02-02","count":7,"color":"#30a14e","intensity":"3"},{"date":"2022-02-01","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-01-31","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-29","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-01-28","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-26","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-23","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-22","count":3,"color":"#40c463","intensity":"2"},{"date":"2022-01-21","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-20","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-01-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-16","count":5,"color":"#40c463","intensity":"2"},{"date":"2022-01-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-11","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-09","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-08","count":7,"color":"#30a14e","intensity":"3"},{"date":"2022-01-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-06","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2022-01-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2022-01-03","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-01-02","count":4,"color":"#40c463","intensity":"2"},{"date":"2022-01-01","count":4,"color":"#40c463","intensity":"2"},{"date":"2021-12-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-26","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-20","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-19","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-18","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-17","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-16","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-15","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-12","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-12-11","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-05","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-04","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-12-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-28","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-11-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-24","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-23","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-21","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-20","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-18","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-17","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-14","count":9,"color":"#40c463","intensity":"2"},{"date":"2021-11-13","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-12","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-11","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-10","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-09","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-04","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-11-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-11-01","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-31","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-30","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-26","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-20","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-17","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-10-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-06","count":14,"color":"#30a14e","intensity":"3"},{"date":"2021-10-05","count":13,"color":"#30a14e","intensity":"3"},{"date":"2021-10-04","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-03","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-10-02","count":7,"color":"#40c463","intensity":"2"},{"date":"2021-10-01","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-09-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-09-28","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-09-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-25","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-09-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-21","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-09-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-15","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-09-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-09-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-09-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-08-28","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-08-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-11","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-08-10","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-08-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-07","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-04","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-08-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-08-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-07-18","count":11,"color":"#30a14e","intensity":"3"},{"date":"2021-07-17","count":15,"color":"#30a14e","intensity":"3"},{"date":"2021-07-16","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-07-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-14","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-07-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-12","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-07-11","count":9,"color":"#40c463","intensity":"2"},{"date":"2021-07-10","count":20,"color":"#216e39","intensity":"4"},{"date":"2021-07-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-07","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-07-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-04","count":19,"color":"#216e39","intensity":"4"},{"date":"2021-07-03","count":10,"color":"#40c463","intensity":"2"},{"date":"2021-07-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-07-01","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-27","count":7,"color":"#40c463","intensity":"2"},{"date":"2021-06-26","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-25","count":7,"color":"#40c463","intensity":"2"},{"date":"2021-06-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-20","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-15","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-14","count":10,"color":"#40c463","intensity":"2"},{"date":"2021-06-13","count":7,"color":"#40c463","intensity":"2"},{"date":"2021-06-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-11","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-08","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-06-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-06","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-06-05","count":8,"color":"#40c463","intensity":"2"},{"date":"2021-06-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-06-03","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-06-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-28","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-26","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-23","count":26,"color":"#216e39","intensity":"4"},{"date":"2021-05-22","count":15,"color":"#30a14e","intensity":"3"},{"date":"2021-05-21","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-19","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-18","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-15","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-11","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-10","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-09","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-06","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-05","count":8,"color":"#40c463","intensity":"2"},{"date":"2021-05-04","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-05-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-05-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-05-01","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-24","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-19","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-18","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-11","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-08","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-06","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-04","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-03","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-04-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-04-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-29","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-03-28","count":22,"color":"#216e39","intensity":"4"},{"date":"2021-03-27","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-03-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-25","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-03-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-21","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-03-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-04","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-03-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-03-01","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-02-28","count":7,"color":"#40c463","intensity":"2"},{"date":"2021-02-27","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-21","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-20","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-11","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-02-10","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-09","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-07","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-06","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-03","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-02-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-02-01","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-31","count":11,"color":"#30a14e","intensity":"3"},{"date":"2021-01-30","count":10,"color":"#40c463","intensity":"2"},{"date":"2021-01-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-25","count":6,"color":"#40c463","intensity":"2"},{"date":"2021-01-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-20","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-18","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-17","count":12,"color":"#30a14e","intensity":"3"},{"date":"2021-01-16","count":11,"color":"#30a14e","intensity":"3"},{"date":"2021-01-15","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-14","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-10","count":15,"color":"#30a14e","intensity":"3"},{"date":"2021-01-09","count":7,"color":"#40c463","intensity":"2"},{"date":"2021-01-08","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-07","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-05","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-04","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2021-01-03","count":7,"color":"#40c463","intensity":"2"},{"date":"2021-01-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2021-01-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-31","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-12-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-29","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-28","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-27","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-26","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-12-25","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-18","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-06","count":7,"color":"#40c463","intensity":"2"},{"date":"2020-12-05","count":12,"color":"#30a14e","intensity":"3"},{"date":"2020-12-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-12-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-12-01","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-30","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-29","count":9,"color":"#40c463","intensity":"2"},{"date":"2020-11-28","count":12,"color":"#30a14e","intensity":"3"},{"date":"2020-11-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-26","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-23","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-22","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-20","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-18","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-17","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-15","count":6,"color":"#40c463","intensity":"2"},{"date":"2020-11-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-08","count":13,"color":"#30a14e","intensity":"3"},{"date":"2020-11-07","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-11-01","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-10-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-10-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-10-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-17","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-10-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-15","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-10-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-10-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-11","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-10-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-09","count":6,"color":"#40c463","intensity":"2"},{"date":"2020-10-08","count":36,"color":"#216e39","intensity":"4"},{"date":"2020-10-07","count":9,"color":"#40c463","intensity":"2"},{"date":"2020-10-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-10-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-10-02","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-10-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-29","count":10,"color":"#30a14e","intensity":"3"},{"date":"2020-09-28","count":15,"color":"#216e39","intensity":"4"},{"date":"2020-09-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-09-26","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-09-25","count":6,"color":"#40c463","intensity":"2"},{"date":"2020-09-24","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-09-23","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-09-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-20","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-09-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-18","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-09-17","count":7,"color":"#40c463","intensity":"2"},{"date":"2020-09-16","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-09-15","count":8,"color":"#40c463","intensity":"2"},{"date":"2020-09-14","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-09-13","count":10,"color":"#30a14e","intensity":"3"},{"date":"2020-09-12","count":20,"color":"#216e39","intensity":"4"},{"date":"2020-09-11","count":6,"color":"#40c463","intensity":"2"},{"date":"2020-09-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-07","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-09-06","count":11,"color":"#30a14e","intensity":"3"},{"date":"2020-09-05","count":9,"color":"#40c463","intensity":"2"},{"date":"2020-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-09-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-09-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-29","count":6,"color":"#40c463","intensity":"2"},{"date":"2020-08-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-26","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-23","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-22","count":10,"color":"#30a14e","intensity":"3"},{"date":"2020-08-21","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-19","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-15","count":11,"color":"#30a14e","intensity":"3"},{"date":"2020-08-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-09","count":14,"color":"#216e39","intensity":"4"},{"date":"2020-08-08","count":6,"color":"#40c463","intensity":"2"},{"date":"2020-08-07","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-08-04","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-03","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-08-02","count":13,"color":"#30a14e","intensity":"3"},{"date":"2020-08-01","count":11,"color":"#30a14e","intensity":"3"},{"date":"2020-07-31","count":8,"color":"#40c463","intensity":"2"},{"date":"2020-07-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-27","count":10,"color":"#30a14e","intensity":"3"},{"date":"2020-07-26","count":16,"color":"#216e39","intensity":"4"},{"date":"2020-07-25","count":12,"color":"#30a14e","intensity":"3"},{"date":"2020-07-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-21","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-20","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-19","count":15,"color":"#216e39","intensity":"4"},{"date":"2020-07-18","count":10,"color":"#30a14e","intensity":"3"},{"date":"2020-07-17","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-13","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-12","count":10,"color":"#30a14e","intensity":"3"},{"date":"2020-07-11","count":10,"color":"#30a14e","intensity":"3"},{"date":"2020-07-10","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-06","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-05","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-07-04","count":10,"color":"#30a14e","intensity":"3"},{"date":"2020-07-03","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-07-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-07-01","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-06-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-28","count":8,"color":"#40c463","intensity":"2"},{"date":"2020-06-27","count":13,"color":"#30a14e","intensity":"3"},{"date":"2020-06-26","count":17,"color":"#216e39","intensity":"4"},{"date":"2020-06-25","count":22,"color":"#216e39","intensity":"4"},{"date":"2020-06-24","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-21","count":9,"color":"#40c463","intensity":"2"},{"date":"2020-06-20","count":9,"color":"#40c463","intensity":"2"},{"date":"2020-06-19","count":11,"color":"#30a14e","intensity":"3"},{"date":"2020-06-18","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-06-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-06-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-06-14","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-13","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-06-12","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-11","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-10","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-09","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-08","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-07","count":12,"color":"#30a14e","intensity":"3"},{"date":"2020-06-06","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-05","count":8,"color":"#40c463","intensity":"2"},{"date":"2020-06-04","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-03","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-06-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-06-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-31","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-05-30","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-29","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-28","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-27","count":7,"color":"#40c463","intensity":"2"},{"date":"2020-05-26","count":5,"color":"#40c463","intensity":"2"},{"date":"2020-05-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-24","count":11,"color":"#30a14e","intensity":"3"},{"date":"2020-05-23","count":9,"color":"#40c463","intensity":"2"},{"date":"2020-05-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-10","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-09","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-08","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-04","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-05-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-05-01","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-25","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-23","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-20","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-18","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-17","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-11","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-04","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-04-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-04-02","count":8,"color":"#40c463","intensity":"2"},{"date":"2020-04-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-29","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-03-28","count":18,"color":"#216e39","intensity":"4"},{"date":"2020-03-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-03-21","count":11,"color":"#30a14e","intensity":"3"},{"date":"2020-03-20","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2020-03-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-03","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-03-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-03-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-16","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2020-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-12","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2020-02-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-02-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-22","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2020-01-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2020-01-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-20","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-12-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-12-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-12-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-26","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-24","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-23","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-17","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-16","count":12,"color":"#30a14e","intensity":"3"},{"date":"2019-11-15","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-13","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-11-03","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-02","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-11-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-18","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-17","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-16","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-08","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-10-02","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-10-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-29","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-20","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-17","count":5,"color":"#40c463","intensity":"2"},{"date":"2019-09-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-15","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-14","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-12","count":9,"color":"#30a14e","intensity":"3"},{"date":"2019-09-11","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-10","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-09","count":9,"color":"#30a14e","intensity":"3"},{"date":"2019-09-08","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-07","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-09-03","count":7,"color":"#40c463","intensity":"2"},{"date":"2019-09-02","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-09-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-31","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-30","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-28","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-27","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-26","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-25","count":9,"color":"#30a14e","intensity":"3"},{"date":"2019-08-24","count":13,"color":"#216e39","intensity":"4"},{"date":"2019-08-23","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-22","count":16,"color":"#216e39","intensity":"4"},{"date":"2019-08-21","count":10,"color":"#30a14e","intensity":"3"},{"date":"2019-08-20","count":20,"color":"#216e39","intensity":"4"},{"date":"2019-08-19","count":18,"color":"#216e39","intensity":"4"},{"date":"2019-08-18","count":11,"color":"#30a14e","intensity":"3"},{"date":"2019-08-17","count":18,"color":"#216e39","intensity":"4"},{"date":"2019-08-16","count":13,"color":"#216e39","intensity":"4"},{"date":"2019-08-15","count":13,"color":"#216e39","intensity":"4"},{"date":"2019-08-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-11","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-10","count":9,"color":"#30a14e","intensity":"3"},{"date":"2019-08-09","count":5,"color":"#40c463","intensity":"2"},{"date":"2019-08-08","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-07","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-03","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-08-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-08-01","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-31","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-26","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-25","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-13","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-09","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-08","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-07","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-06","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-04","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-03","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-07-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-07-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-06-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-06-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-06-18","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-06-13","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-06-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-11","count":11,"color":"#30a14e","intensity":"3"},{"date":"2019-06-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-06","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-06-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-03","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-06-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-06-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-31","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-05-30","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-05-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-28","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-05-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-18","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-05-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-14","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-05-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-10","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-05-09","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-05-08","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-05-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-04","count":11,"color":"#30a14e","intensity":"3"},{"date":"2019-05-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-05-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-04-29","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-04-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-04-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-24","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-04-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-20","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-04-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-13","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2019-04-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-08","count":6,"color":"#40c463","intensity":"2"},{"date":"2019-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-04-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-31","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-05","count":7,"color":"#40c463","intensity":"2"},{"date":"2019-03-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-03-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-23","count":8,"color":"#40c463","intensity":"2"},{"date":"2019-02-22","count":7,"color":"#40c463","intensity":"2"},{"date":"2019-02-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-02-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-18","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2019-01-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2019-01-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2019-01-02","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2019-01-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-12-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-11","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-12-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-12-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-30","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-11-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-26","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-11-25","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-11-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-11-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-19","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2018-11-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-15","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-11-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-11-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-03","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-11-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-11-01","count":10,"color":"#40c463","intensity":"2"},{"date":"2018-10-31","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-30","count":14,"color":"#40c463","intensity":"2"},{"date":"2018-10-29","count":11,"color":"#40c463","intensity":"2"},{"date":"2018-10-28","count":6,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-10-26","count":34,"color":"#216e39","intensity":"4"},{"date":"2018-10-25","count":10,"color":"#40c463","intensity":"2"},{"date":"2018-10-24","count":34,"color":"#216e39","intensity":"4"},{"date":"2018-10-23","count":8,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-22","count":16,"color":"#40c463","intensity":"2"},{"date":"2018-10-21","count":18,"color":"#30a14e","intensity":"3"},{"date":"2018-10-20","count":24,"color":"#30a14e","intensity":"3"},{"date":"2018-10-19","count":34,"color":"#216e39","intensity":"4"},{"date":"2018-10-18","count":34,"color":"#216e39","intensity":"4"},{"date":"2018-10-17","count":8,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-16","count":8,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-15","count":14,"color":"#40c463","intensity":"2"},{"date":"2018-10-14","count":30,"color":"#216e39","intensity":"4"},{"date":"2018-10-13","count":8,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-12","count":20,"color":"#30a14e","intensity":"3"},{"date":"2018-10-11","count":15,"color":"#40c463","intensity":"2"},{"date":"2018-10-10","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-09","count":37,"color":"#216e39","intensity":"4"},{"date":"2018-10-08","count":70,"color":"#216e39","intensity":"4"},{"date":"2018-10-07","count":6,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-06","count":20,"color":"#30a14e","intensity":"3"},{"date":"2018-10-05","count":16,"color":"#40c463","intensity":"2"},{"date":"2018-10-04","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2018-10-03","count":36,"color":"#216e39","intensity":"4"},{"date":"2018-10-02","count":9,"color":"#40c463","intensity":"2"},{"date":"2018-10-01","count":12,"color":"#40c463","intensity":"2"},{"date":"2018-09-30","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-09-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-09-28","count":10,"color":"#40c463","intensity":"2"},{"date":"2018-09-27","count":16,"color":"#40c463","intensity":"2"},{"date":"2018-09-26","count":24,"color":"#30a14e","intensity":"3"},{"date":"2018-09-25","count":8,"color":"#9be9a8","intensity":"1"},{"date":"2018-09-24","count":12,"color":"#40c463","intensity":"2"},{"date":"2018-09-23","count":14,"color":"#40c463","intensity":"2"},{"date":"2018-09-22","count":18,"color":"#30a14e","intensity":"3"},{"date":"2018-09-21","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2018-09-20","count":20,"color":"#30a14e","intensity":"3"},{"date":"2018-09-19","count":16,"color":"#40c463","intensity":"2"},{"date":"2018-09-18","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-09-17","count":22,"color":"#30a14e","intensity":"3"},{"date":"2018-09-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-05","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-09-02","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2018-09-01","count":9,"color":"#40c463","intensity":"2"},{"date":"2018-08-31","count":7,"color":"#9be9a8","intensity":"1"},{"date":"2018-08-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-25","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2018-08-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-23","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2018-08-22","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-08-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-20","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2018-08-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-18","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-08-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-08-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-10","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-08-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-08-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-07-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-07-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-11","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2018-06-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-06-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-22","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-05-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-18","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-05-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-05-01","count":7,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-26","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-22","count":8,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-14","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-13","count":9,"color":"#40c463","intensity":"2"},{"date":"2018-04-12","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-11","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-10","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-06","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-05","count":8,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-04-02","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2018-04-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-31","count":14,"color":"#40c463","intensity":"2"},{"date":"2018-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-28","count":7,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-27","count":6,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-26","count":8,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-25","count":11,"color":"#40c463","intensity":"2"},{"date":"2018-03-24","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-23","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-21","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-20","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-17","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-11","count":12,"color":"#40c463","intensity":"2"},{"date":"2018-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-07","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-05","count":7,"color":"#9be9a8","intensity":"1"},{"date":"2018-03-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-03-03","count":9,"color":"#40c463","intensity":"2"},{"date":"2018-03-02","count":9,"color":"#40c463","intensity":"2"},{"date":"2018-03-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-28","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-02-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-25","count":4,"color":"#9be9a8","intensity":"1"},{"date":"2018-02-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-02-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-02-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-02-02","count":19,"color":"#30a14e","intensity":"3"},{"date":"2018-02-01","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-30","count":22,"color":"#30a14e","intensity":"3"},{"date":"2018-01-29","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-28","count":18,"color":"#30a14e","intensity":"3"},{"date":"2018-01-27","count":7,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-26","count":10,"color":"#40c463","intensity":"2"},{"date":"2018-01-25","count":7,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-24","count":11,"color":"#40c463","intensity":"2"},{"date":"2018-01-23","count":7,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-22","count":7,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-20","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-19","count":2,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-18","count":5,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-17","count":22,"color":"#30a14e","intensity":"3"},{"date":"2018-01-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-14","count":3,"color":"#9be9a8","intensity":"1"},{"date":"2018-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2018-01-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-24","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-12-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-22","count":2,"color":"#40c463","intensity":"2"},{"date":"2017-12-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-04","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-12-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-19","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-11-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-16","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-11-15","count":2,"color":"#40c463","intensity":"2"},{"date":"2017-11-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-11-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-10-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-07","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-10-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-10-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-23","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-09-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-13","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-09-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-09","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-09-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-09-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-27","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-08-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-22","count":3,"color":"#30a14e","intensity":"3"},{"date":"2017-08-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-14","count":2,"color":"#40c463","intensity":"2"},{"date":"2017-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-08-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-25","count":3,"color":"#30a14e","intensity":"3"},{"date":"2017-07-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-07-20","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-07-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-15","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-07-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-06","count":4,"color":"#216e39","intensity":"4"},{"date":"2017-07-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-03","count":2,"color":"#40c463","intensity":"2"},{"date":"2017-07-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-07-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-22","count":2,"color":"#40c463","intensity":"2"},{"date":"2017-06-21","count":1,"color":"#9be9a8","intensity":"1"},{"date":"2017-06-20","count":5,"color":"#216e39","intensity":"4"},{"date":"2017-06-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-15","count":3,"color":"#30a14e","intensity":"3"},{"date":"2017-06-14","count":4,"color":"#216e39","intensity":"4"},{"date":"2017-06-13","count":3,"color":"#30a14e","intensity":"3"},{"date":"2017-06-12","count":4,"color":"#216e39","intensity":"4"},{"date":"2017-06-11","count":4,"color":"#216e39","intensity":"4"},{"date":"2017-06-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-06","count":2,"color":"#40c463","intensity":"2"},{"date":"2017-06-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-06-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-27","count":2,"color":"#40c463","intensity":"2"},{"date":"2017-05-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-25","count":2,"color":"#40c463","intensity":"2"},{"date":"2017-05-24","count":7,"color":"#216e39","intensity":"4"},{"date":"2017-05-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-05-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-04-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-03-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-02-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2017-01-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-12-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-11-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-10-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-09-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-08-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-17","count":1,"color":"#216e39","intensity":"4"},{"date":"2016-07-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-07-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-06-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-05-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-04-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-03-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-02-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2016-01-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-12-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-11-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-10-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-09-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-08-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-07-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-06-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-05-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-20","count":1,"color":"#216e39","intensity":"4"},{"date":"2015-04-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-04-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-03-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-02-01","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-31","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-30","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-29","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-28","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-27","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-26","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-25","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-24","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-23","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-22","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-21","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-20","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-19","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-18","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-17","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-16","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-15","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-14","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-13","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-12","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-11","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-10","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-09","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-08","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-07","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-06","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-05","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-04","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-03","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-02","count":0,"color":"#ebedf0","intensity":"0"},{"date":"2015-01-01","count":0,"color":"#ebedf0","intensity":"0"}]} \ No newline at end of file diff --git a/data/gapminder-2020.rds b/data/gapminder-2020.rds deleted file mode 100755 index b67203fb9f80c190145725793ecda6732494fed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95087 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 diff --git a/data/rongelap_coastline.rds b/data/rongelap_coastline.rds deleted file mode 100755 index 40609475703f5fe848457119c94e4599fe534280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7432 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 diff --git a/data/usa-mortality-2020.rds b/data/usa-mortality-2020.rds deleted file mode 100755 index e3a47d6da2ee4d457aeed137f61316c52eda1a48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156342 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"iE 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

TS_2Q?dDWS%~AAaI7PJ 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¬gT^8|J`)aPHp(`0Lxt v{@27>_J4o=R8{`{jZOa0KP&z~n;jaa8WVJkWq(BW(eM8QqpVr^mdXSG@%2_w diff --git a/data/volcano.csv b/data/volcano.csv deleted file mode 100644 index 5191142e..00000000 --- a/data/volcano.csv +++ /dev/null @@ -1,87 +0,0 @@ -100,100,101,101,101,101,101,100,100,100,101,101,102,102,102,102,103,104,103,102,101,101,102,103,104,104,105,107,107,107,108,108,110,110,110,110,110,110,110,110,108,108,108,107,107,108,108,108,108,108,107,107,107,107,106,106,105,105,104,104,103 -101,101,102,102,102,102,102,101,101,101,102,102,103,103,103,103,104,105,104,103,102,102,103,105,106,106,107,109,110,110,110,110,111,112,113,114,116,115,114,112,110,110,110,109,108,109,109,109,109,108,108,108,108,107,107,106,106,105,105,104,104 -102,102,103,103,103,103,103,102,102,102,103,103,104,104,104,104,105,106,105,104,104,105,106,107,108,110,111,113,114,115,114,115,116,118,119,119,121,121,120,118,116,114,112,111,110,110,110,110,109,109,109,109,108,108,107,107,106,106,105,105,104 -103,103,104,104,104,104,104,103,103,103,103,104,104,104,105,105,106,107,106,106,106,107,108,110,111,114,117,118,117,119,120,121,122,124,125,126,127,127,126,124,122,120,117,116,113,111,110,110,110,109,109,109,109,108,108,107,107,106,106,105,105 -104,104,105,105,105,105,105,104,104,103,104,104,105,105,105,106,107,108,108,108,109,110,112,114,115,118,121,122,121,123,128,131,129,130,131,131,132,132,131,130,128,126,122,119,115,114,112,110,110,110,110,110,109,109,108,107,107,107,106,106,105 -105,105,105,106,106,106,106,105,105,104,104,105,105,106,106,107,109,110,110,112,113,115,116,118,119,121,124,126,126,129,134,137,137,136,136,135,136,136,136,135,133,129,126,122,118,116,115,113,111,110,110,110,110,109,108,108,108,107,107,106,106 -105,106,106,107,107,107,107,106,106,105,105,106,106,107,108,109,111,113,114,116,118,120,121,122,123,125,127,129,130,135,140,142,142,142,141,140,140,140,140,139,137,134,129,125,121,118,116,114,112,110,110,110,111,110,109,109,108,108,107,107,106 -106,107,107,108,108,108,108,107,107,106,106,107,108,108,110,113,115,117,118,120,122,124,125,127,128,129,131,134,135,141,146,147,146,146,145,144,144,144,143,142,141,139,135,130,126,122,118,116,114,112,112,113,112,110,110,109,109,108,108,107,106 -107,108,108,109,109,109,109,108,108,107,108,108,110,111,113,116,118,120,123,125,127,129,130,132,134,135,137,139,142,146,152,152,151,151,150,149,148,148,146,145,143,142,139,135,131,127,122,119,117,115,115,115,114,112,110,110,109,109,108,107,107 -108,109,109,110,110,110,110,109,109,108,110,110,113,116,118,120,122,125,127,129,133,136,138,140,141,142,148,150,151,156,158,159,158,157,158,158,154,151,149,148,146,144,141,137,134,130,125,122,120,118,117,117,115,113,111,110,110,109,108,107,107 -109,110,110,111,111,111,111,110,110,110,112,114,118,121,123,125,127,129,133,137,141,143,145,146,148,150,154,156,159,161,162,163,164,163,164,164,160,157,154,151,149,146,144,140,137,133,129,126,124,121,119,118,116,114,112,111,110,109,108,107,106 -110,110,111,113,112,111,113,112,112,114,116,119,121,124,127,129,133,138,143,146,149,149,151,153,154,157,159,160,163,165,166,167,168,168,168,168,166,162,159,157,154,152,149,144,140,136,133,131,128,125,122,119,117,115,113,111,110,109,108,107,106 -110,111,113,115,114,113,114,114,115,117,119,121,124,126,129,133,140,145,150,154,155,155,157,159,161,162,164,165,167,168,169,170,172,174,172,172,171,169,166,163,161,158,153,148,143,140,137,134,131,128,125,120,118,116,114,112,110,109,108,107,105 -111,113,115,117,116,115,116,117,117,119,121,124,126,128,132,137,143,151,156,161,161,162,163,165,166,167,168,170,171,173,175,177,179,178,177,176,176,174,171,169,165,161,156,152,148,144,140,138,135,131,127,123,119,117,115,113,111,110,108,106,105 -114,115,117,117,117,118,119,119,120,121,124,126,128,131,137,143,150,156,160,163,165,168,170,171,172,173,174,175,177,179,180,182,183,183,183,183,180,178,177,172,168,164,160,156,152,148,144,141,138,134,130,126,121,117,114,112,110,110,108,106,104 -116,118,118,118,120,121,121,122,122,123,125,128,130,134,141,147,152,156,160,165,168,170,174,176,179,180,181,181,182,182,183,184,186,187,187,184,184,181,180,176,172,168,165,161,157,153,149,145,142,138,133,129,125,120,115,111,110,110,108,106,104 -118,120,120,121,122,123,124,124,125,126,127,129,132,135,142,149,153,157,161,166,170,174,178,180,182,183,184,184,185,186,186,187,189,189,189,189,189,186,182,179,175,171,168,165,162,157,152,149,145,141,137,131,125,120,116,111,110,110,108,106,104 -120,121,122,123,124,125,126,127,127,128,130,132,134,137,142,151,155,158,162,169,172,176,181,183,184,186,187,188,189,189,189,189,190,190,191,190,190,188,186,183,180,175,171,168,165,161,157,152,149,145,141,134,127,121,116,112,110,110,108,106,104 -120,122,125,126,126,127,128,129,130,130,132,134,136,139,145,152,157,160,167,172,175,178,181,185,186,188,190,191,192,193,193,192,192,191,192,191,191,190,190,187,184,181,177,172,169,165,161,156,152,147,143,139,131,123,119,115,111,110,108,106,105 -121,124,126,128,129,129,130,131,132,133,135,137,139,143,150,154,159,164,170,173,176,179,184,186,189,190,191,192,193,194,195,194,193,192,191,191,191,191,190,190,188,184,181,177,173,169,165,160,155,149,145,142,136,129,123,118,114,110,108,108,107 -122,125,127,130,130,131,133,134,135,136,137,140,143,147,154,158,162,166,171,174,177,181,186,189,190,190,191,192,191,191,190,189,188,189,190,190,191,190,190,190,189,186,184,181,177,173,169,164,158,152,148,144,140,134,125,118,115,111,110,108,107 -122,125,128,130,132,133,135,136,137,139,140,143,147,152,157,161,164,168,172,175,179,182,186,190,190,190,190,189,187,184,184,183,182,182,183,183,183,184,185,186,187,186,185,184,181,177,173,169,163,157,149,145,141,136,130,119,116,112,110,108,106 -123,126,129,131,133,135,137,138,139,141,143,147,150,156,161,164,167,170,173,177,181,184,187,188,190,189,187,185,183,179,176,174,174,174,174,174,176,177,179,180,182,183,182,181,181,180,176,171,166,160,152,147,142,138,133,126,121,115,110,106,105 -124,127,130,132,135,137,138,140,142,144,147,149,154,157,161,165,168,171,175,178,181,184,186,187,187,184,184,181,179,175,171,169,168,168,168,169,170,172,174,177,178,179,180,181,181,180,179,174,167,161,155,148,144,139,134,128,121,115,110,106,105 -123,128,131,133,136,138,140,142,144,146,149,151,154,157,160,164,168,172,175,178,181,183,184,184,185,183,180,177,174,170,167,165,164,164,164,165,166,168,171,175,176,178,180,181,180,180,179,177,170,163,157,150,144,139,134,128,121,115,110,108,107 -123,127,131,134,136,138,140,142,144,147,149,151,154,157,160,164,168,171,174,178,180,181,181,182,183,181,178,173,169,166,163,161,161,160,160,161,163,165,168,173,176,178,179,180,181,180,180,175,173,166,159,152,145,139,134,127,121,115,110,109,108 -120,124,128,131,134,137,139,142,144,146,149,151,153,156,160,163,167,171,174,178,180,180,180,180,180,180,175,171,167,162,160,158,157,157,157,158,159,162,166,170,175,177,178,180,181,181,180,178,175,169,160,154,148,140,134,128,121,115,110,110,109 -118,121,125,129,132,134,137,140,142,145,147,149,151,155,159,163,166,169,173,177,179,180,180,180,180,179,174,169,166,161,158,156,154,153,153,154,156,159,163,169,173,175,178,180,181,180,180,179,175,170,160,154,149,142,135,128,122,116,111,110,110 -117,120,121,125,129,132,135,138,140,143,145,147,149,153,157,160,163,166,171,174,177,179,180,180,180,179,172,168,164,160,157,154,151,149,150,150,154,158,164,169,174,178,180,180,180,180,178,177,175,170,161,153,148,142,135,129,123,116,113,112,110 -115,118,120,122,126,130,133,136,138,141,143,145,148,151,154,157,160,163,168,171,174,177,179,179,179,176,171,167,164,160,156,153,149,148,149,151,155,158,163,170,173,177,179,180,180,180,178,175,173,171,162,154,147,141,136,130,124,117,115,112,110 -114,116,118,120,122,127,131,133,136,138,141,143,146,148,151,154,157,160,164,168,171,174,178,178,179,177,173,169,165,161,157,154,151,149,150,152,155,159,166,171,175,177,179,180,180,179,176,174,171,168,159,151,146,141,135,129,124,119,116,113,110 -115,114,116,118,120,122,127,129,132,136,139,141,143,146,148,151,153,156,160,164,167,172,174,176,177,176,173,170,166,162,159,157,154,153,154,155,158,161,169,172,174,176,178,178,178,178,175,172,169,162,156,149,144,140,134,128,123,118,115,112,110 -113,113,114,116,118,120,122,125,129,133,136,138,141,143,146,149,150,153,156,160,165,170,173,176,176,176,173,172,169,165,163,160,158,157,158,159,161,166,170,170,173,175,176,178,176,173,171,168,164,158,153,146,140,137,132,127,121,117,113,111,110 -111,112,113,114,116,118,120,122,126,130,133,136,139,142,145,147,148,151,155,158,163,168,173,176,177,177,176,174,171,169,166,164,161,161,162,164,165,167,170,170,171,173,173,173,170,168,165,163,160,155,149,143,138,134,130,125,119,116,112,110,109 -110,112,113,113,114,116,118,120,123,127,131,134,137,141,143,145,148,150,154,157,161,166,171,176,178,178,178,176,174,172,170,167,167,167,166,168,170,169,168,167,168,168,168,168,167,165,163,160,156,152,146,140,136,131,128,122,118,114,110,110,109 -109,110,111,112,114,116,118,119,120,124,128,131,136,140,142,145,147,150,153,157,160,165,170,174,178,179,179,178,178,176,174,171,170,170,170,168,167,166,164,163,161,162,163,163,163,161,160,157,153,148,142,136,130,127,124,120,117,113,110,110,109 -108,109,111,112,114,116,117,118,120,121,125,128,132,138,142,144,147,149,153,156,160,164,170,174,178,180,180,179,179,178,176,172,170,170,170,168,166,164,162,160,157,156,157,158,158,156,153,151,149,144,139,130,127,124,121,118,115,112,110,110,109 -108,109,111,113,114,116,117,118,119,120,122,126,130,135,139,143,147,149,152,156,160,164,169,173,177,180,180,180,180,179,178,174,170,170,168,167,165,163,161,157,154,153,152,152,152,149,148,147,144,140,134,128,125,122,119,117,114,110,110,109,109 -107,108,111,112,114,115,116,117,119,120,121,124,128,133,137,141,145,149,152,156,160,164,168,172,176,179,180,180,180,179,178,174,170,168,166,165,163,161,158,154,150,149,148,146,145,143,143,143,140,136,130,126,123,120,118,115,112,110,110,109,109 -107,108,110,112,113,113,115,116,118,120,122,125,128,132,136,140,145,148,150,155,160,164,167,170,174,177,179,179,178,176,176,173,169,166,164,163,161,159,155,152,148,145,143,141,140,139,139,138,136,132,128,124,121,118,116,114,111,110,110,109,108 -107,108,109,111,113,114,116,117,119,120,122,125,128,132,137,141,144,146,149,152,157,162,166,168,171,173,175,175,173,172,172,171,168,165,162,160,158,156,153,149,145,142,139,138,137,136,135,133,131,129,126,122,119,117,114,112,110,110,109,108,107 -108,109,110,112,114,115,116,117,119,120,122,126,129,133,137,141,143,146,148,151,155,160,164,167,168,169,170,170,169,168,167,168,166,163,160,158,155,153,150,147,143,140,137,136,134,133,132,130,129,127,125,121,118,115,112,110,110,110,108,107,107 -109,110,111,113,115,116,117,118,120,121,123,126,129,133,138,141,143,146,148,150,155,159,163,165,166,167,168,168,166,165,164,161,160,159,158,155,152,149,147,144,141,138,135,134,132,130,129,128,126,124,122,120,117,113,111,110,110,110,108,107,107 -110,111,112,113,116,117,118,119,120,122,125,127,130,133,138,141,143,146,148,150,154,159,162,163,164,166,166,166,165,163,161,159,157,156,155,153,150,146,143,140,138,136,133,132,130,129,128,125,124,122,120,119,117,114,111,110,110,109,108,107,107 -111,112,113,114,116,117,118,119,120,123,125,128,130,134,139,141,144,146,148,151,154,158,161,164,166,167,168,166,165,163,161,158,156,154,152,150,146,142,139,137,135,133,131,130,129,128,127,125,123,121,120,118,116,113,111,110,110,109,108,107,106 -111,112,113,115,117,118,118,120,121,124,126,128,131,135,139,142,144,146,148,151,155,160,164,165,168,169,169,168,166,163,160,158,156,153,151,148,145,142,139,137,135,132,130,129,127,126,125,124,123,120,120,117,116,114,112,110,110,108,107,106,106 -112,113,114,116,117,118,119,120,122,124,127,129,132,135,139,142,144,146,149,152,157,162,167,169,170,170,170,168,165,163,161,159,157,155,151,148,145,141,139,136,134,132,130,128,127,126,124,123,122,120,119,117,116,114,112,111,109,107,106,106,105 -113,114,115,116,117,119,119,120,122,125,127,129,132,135,139,142,144,147,149,154,159,164,169,170,170,170,170,170,168,165,163,161,158,155,151,148,145,142,139,137,135,132,131,128,126,125,124,122,121,120,119,117,115,113,111,110,109,106,105,105,104 -113,114,115,117,118,119,120,121,123,125,127,130,132,135,139,142,145,148,150,156,161,166,170,170,170,170,170,170,169,166,163,161,159,155,151,148,146,143,140,138,135,134,132,130,127,125,123,121,120,120,119,116,114,112,110,110,108,106,105,104,104 -114,115,116,117,118,119,120,121,123,126,128,130,133,136,139,142,145,148,152,157,161,166,168,170,170,170,170,168,166,164,163,160,159,155,151,148,146,143,141,138,136,134,132,130,128,125,123,121,120,120,118,116,113,111,110,110,109,106,105,104,104 -115,116,117,118,119,120,121,121,123,126,128,131,134,136,139,142,145,149,152,157,161,163,164,166,168,167,166,164,163,161,160,158,156,152,149,147,144,143,141,139,136,134,132,130,128,125,122,120,120,119,117,115,113,110,110,109,107,106,105,104,104 -115,116,117,118,119,120,121,122,123,125,128,131,134,137,139,142,145,149,152,156,159,159,160,162,162,161,161,160,159,158,157,155,153,150,148,146,145,143,142,140,137,134,131,129,126,124,122,120,119,117,115,113,111,110,109,109,107,106,105,104,104 -114,115,116,116,118,119,120,121,122,126,129,132,135,137,140,143,146,149,152,155,156,157,158,159,159,159,158,158,157,155,153,151,150,149,147,146,145,144,142,141,138,135,132,128,125,122,120,118,117,115,113,112,110,109,108,108,106,105,105,104,104 -113,114,115,116,117,118,119,120,123,126,129,132,135,138,140,143,146,148,151,153,154,156,157,157,157,157,156,155,154,152,150,149,148,147,146,145,144,142,141,140,139,136,132,129,125,121,118,116,115,113,111,110,109,108,108,107,106,105,104,104,104 -112,113,114,115,116,117,119,120,122,126,130,133,136,138,141,143,146,148,150,152,154,155,155,155,155,155,154,152,152,150,148,147,146,145,145,143,142,141,140,140,140,137,133,129,125,120,117,115,111,110,110,109,108,107,107,106,105,105,104,104,103 -111,112,114,115,116,117,118,120,122,125,131,134,137,139,142,144,146,148,150,152,153,153,153,153,153,153,153,151,149,147,146,144,144,143,143,142,141,140,140,140,140,138,134,130,123,120,118,111,110,110,110,108,107,106,108,105,105,104,104,103,103 -111,112,113,115,115,116,117,119,121,126,131,135,138,140,142,144,146,148,150,151,151,151,151,151,151,151,151,150,148,146,144,142,141,141,142,141,140,140,140,140,140,140,136,132,126,120,115,110,110,110,109,107,106,105,107,105,104,104,104,103,103 -112,113,113,114,115,116,117,119,122,127,132,135,139,141,143,145,147,149,150,150,150,150,150,150,150,150,150,149,147,144,142,141,140,140,140,140,140,140,140,140,140,140,137,133,128,120,117,110,110,110,108,106,105,105,106,105,104,104,103,103,103 -112,113,114,114,116,117,118,120,122,128,132,136,139,141,144,146,147,149,150,150,150,150,150,150,150,150,150,149,146,143,141,140,140,139,139,139,140,140,140,140,140,140,137,133,129,121,118,110,110,109,107,106,105,105,105,104,104,103,103,103,102 -112,114,114,115,116,117,119,120,122,128,133,136,140,142,144,146,148,150,150,150,150,150,150,150,150,150,150,148,145,142,140,138,138,138,137,138,140,140,140,140,140,140,137,134,130,122,118,110,110,108,106,105,103,104,104,104,104,103,103,102,102 -113,114,115,116,116,117,118,120,123,129,133,137,140,142,144,146,149,150,150,150,150,150,150,150,150,150,150,147,143,141,139,137,136,136,135,136,138,140,140,140,140,139,136,134,130,123,119,113,109,108,106,104,103,104,104,104,103,103,102,102,101 -114,115,115,116,117,118,118,120,123,129,133,137,140,143,145,147,150,150,150,150,150,150,150,150,150,150,148,145,142,139,138,136,135,134,134,134,136,138,137,138,139,137,134,132,125,122,117,114,109,107,105,103,102,104,104,103,103,102,102,101,101 -114,115,116,117,117,119,118,120,123,128,132,136,139,142,145,148,150,150,150,150,150,150,150,150,150,150,147,144,141,139,136,135,134,133,132,132,134,134,134,134,135,133,131,128,124,120,116,113,110,107,104,102,102,103,103,103,102,102,102,101,100 -115,116,116,117,118,119,119,120,124,128,132,136,139,142,145,148,150,150,150,150,150,150,150,150,150,149,146,143,140,138,135,134,133,131,131,131,131,131,131,131,130,127,124,122,119,117,115,112,109,106,104,101,102,103,103,102,102,102,101,100,100 -115,116,117,118,118,119,120,123,125,128,131,135,138,141,145,148,150,150,150,150,150,150,150,150,150,147,145,142,139,137,134,132,131,130,129,128,128,128,128,128,126,123,121,119,116,114,112,110,108,105,103,101,103,103,103,102,102,101,100,100,100 -116,117,118,118,119,120,122,123,125,128,131,134,137,141,145,148,149,150,150,150,150,150,150,150,148,145,143,141,138,135,133,130,129,128,127,126,125,125,125,124,123,120,118,116,114,111,109,107,106,104,102,100,101,101,102,102,101,100,100,100,100 -116,117,118,119,120,121,123,124,126,128,130,133,137,140,144,145,147,148,149,150,149,149,147,146,144,141,139,136,133,131,129,128,127,126,125,124,123,123,122,121,120,118,116,114,112,108,107,105,103,102,100,100,100,100,101,101,100,100,100,100,100 -117,118,119,119,120,121,123,124,126,128,129,131,135,139,142,143,145,146,147,147,147,146,144,142,140,138,135,133,130,128,127,126,125,124,123,122,121,120,119,118,117,115,114,112,110,106,105,102,101,100,100,100,100,100,100,100,100,99,99,99,99 -117,118,119,120,120,121,123,124,125,126,128,129,132,137,140,142,143,143,144,144,144,143,141,139,137,135,133,130,128,127,126,125,123,122,121,120,119,117,116,115,114,112,111,108,107,105,100,100,100,100,100,100,100,99,99,99,99,99,99,99,98 -116,117,118,120,120,121,122,123,124,125,126,128,130,134,139,140,141,141,141,141,141,140,138,136,134,133,131,129,127,125,124,123,122,120,119,118,117,116,114,112,111,108,109,106,106,100,100,100,100,100,99,99,99,99,99,99,99,98,98,98,97 -114,115,116,117,119,119,120,121,122,123,125,127,129,133,136,134,134,136,138,138,137,137,135,133,132,130,129,127,125,124,122,121,120,119,117,116,115,114,112,110,109,108,107,105,105,100,100,100,100,99,99,99,98,98,98,98,98,97,97,97,97 -112,113,114,115,116,116,117,119,120,122,124,126,127,129,129,128,127,129,132,133,133,133,133,131,129,127,126,125,124,122,121,119,118,117,116,114,113,112,110,109,108,106,106,105,100,100,100,98,98,98,98,98,98,97,97,97,97,97,97,97,96 -109,111,112,112,113,113,113,114,116,119,121,123,124,125,124,123,123,123,125,127,129,129,128,128,127,125,124,123,122,121,119,118,117,116,114,113,112,110,109,108,107,106,105,100,100,100,97,97,97,97,97,97,97,96,96,96,96,96,96,96,96 -106,107,108,108,109,110,110,112,113,114,117,119,120,121,119,117,117,117,118,120,123,124,125,125,125,123,121,120,120,119,118,117,116,115,114,113,111,109,109,107,106,105,100,100,100,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96 -104,105,105,106,106,107,108,108,109,109,111,115,116,114,113,112,111,110,111,113,116,119,122,122,122,121,120,119,118,118,117,116,115,114,113,112,111,108,108,106,105,100,100,100,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96 -102,103,103,104,104,105,106,106,107,108,109,111,112,110,109,108,108,108,108,109,110,112,116,117,117,118,118,118,117,116,116,115,114,113,112,111,110,107,107,105,100,100,100,97,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96 -101,102,103,103,104,105,105,106,106,107,108,109,109,107,106,106,105,105,105,106,107,108,109,110,111,113,114,115,115,115,114,113,112,111,110,108,108,106,105,100,100,100,97,97,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96 -100,101,102,102,103,103,104,104,105,106,106,107,106,106,106,105,105,104,103,103,104,105,107,108,110,111,111,112,112,113,113,112,111,110,108,107,106,105,100,100,100,98,97,97,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96 -100,101,101,102,102,103,103,104,104,105,105,105,105,106,105,105,104,103,102,101,102,103,104,106,107,110,111,111,111,112,112,112,110,107,107,106,105,102,100,100,99,98,97,97,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,95 -99,100,101,102,102,103,103,103,104,104,104,104,103,104,104,104,104,102,101,101,102,103,104,105,107,110,111,111,111,111,111,111,108,106,105,105,102,101,100,99,99,98,97,97,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,95,95 -99,100,100,101,101,102,102,102,103,103,103,103,102,103,103,104,103,102,101,101,101,102,103,104,106,109,110,111,111,111,110,110,107,105,103,104,100,100,99,99,98,98,97,97,96,96,96,96,96,96,96,96,96,96,95,95,95,95,95,95,95 -99,100,100,100,101,101,101,102,102,103,102,102,101,102,102,103,103,101,101,100,101,101,102,103,105,109,110,110,111,110,110,109,106,105,100,102,100,99,99,99,98,98,97,97,96,96,96,96,96,96,95,95,95,95,95,95,95,95,95,95,94 -99,99,99,99,100,100,101,101,102,102,101,101,101,101,101,102,102,101,100,100,101,101,101,103,104,107,109,109,110,110,109,108,105,102,100,100,99,99,99,98,98,98,97,96,96,96,96,96,95,95,95,95,95,95,95,94,94,94,94,94,94 -98,99,99,99,99,100,100,101,101,102,101,100,100,100,101,101,101,100,100,100,100,101,101,101,103,106,107,109,109,109,109,107,104,101,100,99,99,99,98,98,98,97,96,96,96,96,95,95,95,95,95,95,95,94,94,94,94,94,94,94,94 -98,98,98,99,99,99,100,100,101,101,100,100,99,99,100,100,100,100,100,100,100,101,101,101,102,105,106,109,108,109,107,105,102,100,100,99,99,98,98,98,97,96,96,96,96,95,95,95,95,95,95,94,94,94,94,94,94,94,94,94,94 -97,98,98,98,99,99,99,100,100,100,100,100,99,99,99,100,100,100,100,100,100,100,101,101,101,103,104,105,106,105,104,101,100,100,99,99,98,98,97,97,97,96,96,96,95,95,95,95,95,94,94,94,94,94,94,94,94,94,94,94,94 -97,97,97,98,98,99,99,99,100,100,100,99,99,99,99,99,100,100,100,100,100,100,101,101,100,100,100,100,100,100,100,100,100,100,99,99,98,97,97,97,96,96,96,95,95,95,95,94,94,94,94,94,94,94,94,94,94,94,94,94,94 diff --git a/index.qmd b/index.qmd index 33b21dd8..5bc7b5e1 100755 --- a/index.qmd +++ b/index.qmd @@ -29,12 +29,10 @@ CI <- identical(Sys.getenv("CI"), "true") #| message: false xfun::session_info(packages = c( - "ggplot2", "gganimate", "ggrepel", "ggdensity", - "ggridges", "ggsignif", "ggforce", "ggbeeswarm", - "ggeffects", "ggnewscale", "patchwork", "shiny", - "plotly", "lattice", "igraph", "tidygraph", "ggraph", - "dplyr", "purrr", "tidyr", "httr", "data.table", - "rsconnect", "knitr", "rmarkdown", "gt", "DT", + "ggplot2", "gganimate", "ggrepel", "ggridges", + "patchwork", "shiny", "plotly", "lattice", "igraph", + "tidygraph", "ggraph", "dplyr", "purrr", "tidyr", "httr", + "data.table", "rsconnect", "knitr", "rmarkdown", "gt", "DT", "showtext", "gifski", "tinytex", "magick" ), dependencies = FALSE) ``` diff --git a/preface.qmd b/preface.qmd index 8a99b64f..12bdbe7b 100755 --- a/preface.qmd +++ b/preface.qmd @@ -108,15 +108,13 @@ aggregate(data = dat, weight ~ weight_bucket + group, FUN = length) 2. 数据部分:从本地文件、远程数据库、网页爬取等数据获取方式,筛选、变换、重塑、排序等基础的数据操作,离群值、异常值检测,缺失值处理等基础的数据处理 -3. 展示部分:ggplot2 基础、统计图形、实战应用、经验总结 +3. 交流部分:交互的图形、表格和应用,动态的 HTML 网页、PDF 文档和办公文档。 -4. 交流部分:交互的图形、表格和应用,动态的 HTML 网页、PDF 文档和办公文档。 +4. 统计分析:统计检验、相关分析、分类数据、功效分析 -5. 建模部分:线性模型、广义线性模型、混合效应模型、数据挖掘算法和神经网络模型 +5. 数据建模:网络数据、文本数据、时序数据 -6. 应用部分:网络数据、文本数据、时序数据、空间数据的分析 - -7. 其它部分:参数估计、假设检验和抽样分布等基础的统计推断,L-BFGS 算法、EM 算法等统计计算,自助法、重抽样等统计模拟。 +6. 优化建模:统计计算、数值优化、优化问题 ## 公开数据从哪找? {#sec-finding-public-datasets} @@ -125,10 +123,3 @@ aggregate(data = dat, weight ~ weight_bucket + group, FUN = length) - 各类网站提供的数据集,比如 GitHub 开放数据集列表 [awesome-public-datasets](https://github.com/awesomedata/awesome-public-datasets),[kaggle](https://www.kaggle.com/datasets) 网站提供大量数据分析竞赛及相应的数据集。 - R 包内置数据集,已整理得很好,比如 [**spData**](https://github.com/Nowosad/spData/) 包 收集整理了很多空间统计方面的数据集。[Rdatasets](https://github.com/vincentarelbundock/Rdatasets) 更是收集约 1900 个数据集,全部来自 CRAN 上发布的 R 包。 - 一些 R 包封装数据下载的接口,比如[**tidyBdE**](https://github.com/rOpenSpain/tidyBdE)包可以下载西班牙银行开放的数据,[**WDI**](https://github.com/vincentarelbundock/WDI) 可以下载世界银行开放的数据。 - -## 学会有效地提问? {#sec-asking-the-right-questions} - -- 想清楚自己的问题是什么?尽力做好拆解和界定。 -- 去掉枝叶,保留主干,提供最小的可重复的示例。 -- 有耐心地等待社区的回应,积极地与社区沟通。 -- 为社区提供力所能及的帮助,提升自己的影响力。 diff --git a/visualization-advanced.qmd b/visualization-advanced.qmd deleted file mode 100644 index 3744adac..00000000 --- a/visualization-advanced.qmd +++ /dev/null @@ -1,826 +0,0 @@ -# 统计图形 {#sec-advanced} - -```{r} -#| echo: false - -source("_common.R") -``` - -- @sec-visualize-data-distribution 探索、展示数据中隐含的分布信息,具体有箱线图、提琴图、直方图、密度图、岭线图和抖动图。 -- @sec-visualize-data-relation 探索、展示数据中隐含的相关信息,这种相关具有一般性,比如线性和非线性相关,位序关系、包含关系、依赖关系等,具体有散点图、气泡图、凹凸图、韦恩图、甘特图和网络图。 -- @sec-visualize-data-uncertainty 探索、展示数据中隐含的不确定性,统计中描述不确定性有很多概念,比如置信区间、假设检验中的 P 值,统计模型中的预测值及其预测区间,模型残差隐含的分布,模型参数分量的边际分布及其效应,贝叶斯视角下的模型参数的后验分布。 - -## 描述分布 {#sec-visualize-data-distribution} - -数据来自中国国家统计局发布的2021年统计年鉴,各省、直辖市和自治区分区域的性别比数据(部分)情况见 @tbl-province-sex-ratio 。 - -```{r} -#| label: tbl-province-sex-ratio -#| tbl-cap: "各省、直辖市和自治区分区域的性别比数据(部分)" -#| echo: false - -province_sex_ratio <- readRDS(file = "data/china-sex-ratio-2020.rds") -knitr::kable(head(province_sex_ratio)) -``` - -### 箱线图 {#sec-boxplot} - -```{r} -#| label: fig-ggplot2-boxplot -#| fig-cap: 箱线图的几种绘制形式 -#| fig-subcap: -#| - ggplot2 包 -#| - ggplot2 包(高亮离群值) -#| - lvplot 包 -#| - Base R 包 -#| fig-width: 4.5 -#| fig-height: 4.5 -#| fig-showtext: true -#| par: true -#| layout-ncol: 2 - -library(ggplot2) -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_boxplot() + - theme_classic() -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_boxplot(outlier.colour = "red") + - theme_classic() -library(lvplot) -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_lv() + - theme_classic() -boxplot(`性别比(女=100)` ~ `区域` , data = province_sex_ratio) -``` - -箱线图的历史有 50 多年了,它的变体也有很多,除了 ggplot2 包,**lvplot** 包也可以绘制箱线图的变体 [@Tukey1978]。更多详情见 Hadley Wickham 和 Lisa Stryjewski 的文章 [40 years of boxplots](https://vita.had.co.nz/papers/boxplots.pdf)。 - -### 提琴图 {#sec-violin} - -```{r} -#| label: fig-ggplot2-violin -#| fig-cap: "提琴图" -#| fig-subcap: -#| - 函数 `geom_violin()` -#| - 函数 `geom_violin()` 标记分位点 -#| - vioplot 包 -#| - beanplot 包 -#| fig-width: 4.5 -#| fig-height: 4.5 -#| fig-showtext: true -#| par: true -#| layout-ncol: 2 - -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_violin(fill = "lightgray") + - theme_classic() -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_violin(fill = "lightgray", draw_quantiles = c(0.25, 0.5, 0.75)) + - theme_classic() -vioplot::vioplot(`性别比(女=100)` ~ `区域`, - data = province_sex_ratio, col = "lightgray") -beanplot::beanplot(`性别比(女=100)` ~ `区域`, - data = province_sex_ratio, col = "lightgray", log = "", - xlab = "区域", ylab = "性别比(女=100)") -``` - -**beanplot** 包的名字是根据图形的外观取的,bean 即是豌豆,rug 用须线表示数据。 - -### 直方图 {#sec-histogram} - -ggplot2 包绘制直方图的函数是 `geom_histogram()` ,而与之相关的函数 `geom_freqpoly()` 是绘制折线图,将直方图中每个柱子的顶点连接起来。 - -```{r} -#| label: fig-histogram -#| fig-cap: "直方图" -#| fig-subcap: -#| - 函数 `geom_histogram()` -#| - 函数 `geom_freqpoly()` -#| fig-width: 4.5 -#| fig-height: 3.5 -#| fig-showtext: true -#| layout-ncol: 2 - -ggplot(data = province_sex_ratio, aes(x = `性别比(女=100)`, fill = `区域`)) + - geom_histogram(binwidth = 5, color = "white", position = "stack") + - scale_fill_grey() + - theme_classic() + - theme(legend.position = "inside", legend.position.inside = c(0.9, 0.8)) + - labs(y = "频数") -ggplot(data = province_sex_ratio, aes(x = `性别比(女=100)`, color = `区域`)) + - geom_freqpoly(binwidth = 5, stat = "bin", position = "stack") + - scale_color_grey() + - theme_classic() + - theme(legend.position = "inside", legend.position.inside = c(0.9, 0.8)) -``` - -### 密度图 {#sec-density} - -ggplot2 包绘制密度图的函数是 `geom_density()`, @fig-density 展示分组密度曲线图 - -```{r} -#| label: fig-density -#| fig-cap: "密度图" -#| fig-width: 4.5 -#| fig-height: 3.5 -#| fig-showtext: true - -ggplot(data = province_sex_ratio, aes(x = `性别比(女=100)`)) + - geom_density(aes(fill = `区域`), alpha = 0.75) + - scale_fill_grey() + - theme_classic() -``` - -#### 堆积(条件)密度图 {#sec-density-stacked-plot} - -::: callout-caution -Stacked density plots: if you want to create a stacked density plot, you probably want to 'count' (density \* n) variable instead of the default density -::: - -堆积密度图正确的绘制方式是保护边际密度。 - -```{r} -#| label: fig-density-stack -#| fig-cap: "累积分布密度图" -#| fig-subcap: -#| - 堆积密度图 `after_stat(density)` -#| - 堆积密度图 `after_stat(density * n)` -#| fig-width: 4.5 -#| fig-height: 3.5 -#| fig-showtext: true -#| layout-ncol: 2 - -ggplot(data = province_sex_ratio, aes(x = `性别比(女=100)`, y = after_stat(density))) + - geom_density(aes(fill = `区域`), position = "stack", alpha = 0.5) + - scale_fill_grey() + - theme_classic() + - theme(legend.position = "inside", legend.position.inside = c(0.9, 0.8)) -ggplot(data = province_sex_ratio, aes(x = `性别比(女=100)`, y = after_stat(density * n))) + - geom_density(aes(fill = `区域`), position = "stack", alpha = 0.5) + - scale_fill_grey() + - theme_classic() + - theme(legend.position = "inside", legend.position.inside = c(0.9, 0.8)) -``` - -什么原因导致 @fig-density-stack 中两个子图看起来没什么差别呢?而换一组数据,就可以看出明显的差别。 - -```{r} -#| label: fig-density-diamonds -#| fig-cap: "堆积密度图" -#| fig-subcap: -#| - 函数 `after_stat(density)` -#| - 函数 `after_stat(density * n)` -#| fig-width: 4 -#| fig-height: 3 -#| fig-showtext: true -#| layout-ncol: 2 - -ggplot(diamonds, aes(x = carat, y = after_stat(density), fill = cut)) + - geom_density(position = "stack") + - scale_fill_grey() + - theme_classic() + - theme(legend.position = "inside", legend.position.inside = c(0.8, 0.7)) + - labs(x = "克拉", y = "频数", fill = "切工") -ggplot(diamonds, aes(x = carat, y = after_stat(density * n), fill = cut)) + - geom_density(position = "stack") + - scale_fill_grey() + - scale_y_continuous( - breaks = c(25000, 50000, 75000), - labels = c("25K", "50K", "75K")) + - theme_classic() + - theme(legend.position = "inside", legend.position.inside = c(0.8, 0.7)) + - labs(x = "克拉", y = "频数", fill = "切工") -``` - -#### 联合密度图 {#sec-density-2d-joint} - -```{r} -#| label: fig-density-2d -#| fig-cap: "二维联合密度图" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -state_x77 <- data.frame(state.x77, state_name = rownames(state.x77), - state_region = state.region, check.names = FALSE) -p1 <- ggplot(data = state_x77, aes(x = Income, y = `Life Exp`)) + - geom_point() + - geom_density_2d( - aes(color = after_stat(level), alpha = after_stat(level)), show.legend = F - ) + - scale_color_distiller(palette = "Greys") + - labs( - x = "人均收入(美元)", y = "预期寿命(年)", - title = "1977 年各州预期寿命与人均收入的关系", - caption = "数据源:美国人口调查局" - ) + - theme_classic() -p1 -``` - -#### 边际密度图 {#sec-density-margins} - -**ggExtra** 包[@ggExtra2022] 添加边际密度曲线和边际直方图。 - -```{r} -#| label: fig-density-margins -#| fig-cap: "描述边际分布" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -library(ggExtra) -ggMarginal(p1, type = "density") -ggMarginal(p1, type = "histogram") -``` - -#### 填充密度图 {#sec-density-2d-filled} - -**ggplot2** 包提供二维密度图层 `geom_density_2d_filled()` 绘制热力图, [**ggdist**](https://github.com/mjskay/ggdist) [@ggdist2022] 进行了一些扩展。 - -```{r} -#| label: fig-density-2d-filled -#| fig-cap: "ggplot2 包绘制二维填充密度图" -#| fig-width: 5.5 -#| fig-height: 4 -#| fig-showtext: true - -ggplot(data = state_x77, aes(x = Income, y = `Life Exp`)) + - geom_density_2d_filled(contour_var = "count") + - theme_classic() + - labs( - x = "人均收入(美元)", y = "预期寿命(年)", - title = "1977 年各州预期寿命与人均收入的关系", - caption = "数据源:美国人口调查局" - ) -``` - -相比于 **ggplot2** 内置的二维核密度估计,[**ggdensity**](https://github.com/jamesotto852/ggdensity/) [@Otto2023] 有一些优势,根据数据密度将目标区域划分,更加突出层次和边界。[**gghdr**](https://github.com/Sayani07/gghdr) 包与 **ggdensity** 类似,展示 highest density regions (HDR) - -```{r} -#| label: fig-density-hdr -#| fig-cap: "ggdensity 包绘制二维填充密度图" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -library(ggdensity) -ggplot(data = state_x77, aes(x = Income, y = `Life Exp`)) + - geom_hdr() + - geom_point() + - theme_classic() + - labs( - x = "人均收入(美元)", y = "预期寿命(年)", - title = "1977 年各州预期寿命与人均收入的关系", - caption = "数据源:美国人口调查局" - ) -``` - -### 岭线图 {#sec-ridge-line} - -叠嶂图,还有些其它名字,如峰峦图、岭线图等,详情参考统计之都主站[《叠嶂图的前世今生》](https://cosx.org/2018/04/ridgeline-story/),主要用来描述数据的分布情况,在展示分布的对比上效果非常好。 - -@fig-ridge-line 设置窗宽为 1.5 个百分点 - -```{r} -#| label: fig-ridge-line -#| fig-cap: "描述数据分布" -#| fig-subcap: -#| - 岭线图 -#| - 岭线图和抖动图组合 -#| - 岭线图和轴须图组合 -#| layout-ncol: 2 -#| fig-width: 4.5 -#| fig-height: 3.5 -#| echo: false -#| fig-showtext: true - -library(ggridges) -ggplot(data = province_sex_ratio, aes(x = `性别比(女=100)`, y = `区域`)) + - geom_density_ridges(bandwidth = 1.5, alpha = 0.7) + - theme_classic() - -ggplot(data = province_sex_ratio, aes(x = `性别比(女=100)`, y = `区域`)) + - geom_density_ridges(bandwidth = 1.5, jittered_points = TRUE, alpha = 0.7) + - theme_classic() - -ggplot(data = province_sex_ratio, aes(x = `性别比(女=100)`, y = `区域`)) + - geom_density_ridges( - bandwidth = 1.5, - jittered_points = TRUE, - position = position_points_jitter(height = 0), - point_shape = "|", point_size = 3, - point_alpha = 1, alpha = 0.7 - ) + - theme_classic() -``` - -::: callout-tip -除了中国国家统计年鉴,各省、自治区、直辖市及各级统计局每年都会发布一些统计年鉴、公告等数据,读者可以在此基础上继续收集更多数据,来分析诸多有意思的问题: - -1. 城市、镇和乡村男女性别比呈现差异化分布的成因。 -2. 城市、镇和乡村男女年龄构成。 -3. 将上述问题从省级下钻到市、县级来分析。 -::: - -### 抖动图 {#sec-jitter} - -下面先用函数 `geom_point()` 绘制散点图展示原始数据,通过点的疏密程度暗示数据的分布。Base R 函数 `stripchart()` 可以实现类似的效果。当数据量比较大时,点相互覆盖比较严重,此时,抖动图比较适合用来展示原始数据。函数 `geom_beeswarm()` 提供了另一种散点的组织方式,按一定的规则,而不是近似随机的方式组织。 - -```{r} -#| label: fig-ggplot2-stripchart -#| fig-cap: "散点图" -#| fig-subcap: -#| - 函数 `geom_point()` -#| - 函数 `stripchart()` -#| - 函数 `geom_jitter()` -#| - 函数 `geom_beeswarm()` -#| fig-width: 5 -#| fig-height: 4.5 -#| fig-showtext: true -#| par: true -#| layout-ncol: 2 - -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_point() + - theme_classic() -stripchart( - `性别比(女=100)` ~ `区域`, vertical = TRUE, pch = 1, - data = province_sex_ratio, xlab = "区域") -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_jitter(width = 0.25) + - theme_classic() -library(ggbeeswarm) -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_beeswarm() + - theme_classic() -``` - -@SinaPlot2018 提出一种新的方式描述数据的分布,集合抖动图和小提琴图的功能,在给定的分布界限内抖动。数据点受 violin 的曲线限制,蜂群图也是某种形式的抖动图,添加 violin 作为参考边界,与 sina 图是非常类似的。 - -```{r} -#| label: fig-sina -#| fig-cap: "加强版的抖动图" -#| fig-subcap: -#| - ggforce 包的函数 `geom_sina()` -#| - 函数 `geom_sina()` 叠加函数 `geom_violin()` -#| - ggbeeswarm 包的函数 `geom_quasirandom()` -#| - 函数 `geom_quasirandom()` 叠加函数 `geom_violin()` -#| fig-width: 4.5 -#| fig-height: 3.5 -#| fig-showtext: true -#| layout-ncol: 2 - -library(ggforce) -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_sina() + - theme_classic() -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_violin() + - geom_sina() + - theme_classic() -library(ggbeeswarm) -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_quasirandom() + - theme_classic() -ggplot(data = province_sex_ratio, aes(x = `区域`, y = `性别比(女=100)`)) + - geom_violin() + - geom_quasirandom() + - theme_classic() -``` - -## 描述关系 {#sec-visualize-data-relation} - -### 散点图 {#sec-scatter} - -散点图用以描述变量之间的关系,展示原始的数据,点的形态、大小、颜色等都可以随更多变量变化。 - -中国国家统计局 2021 年发布的统计年鉴,2020 年 31 个省、直辖市、自治区的抚养比、文盲率、人口数的关系。 - -```{r} -#| label: tbl-china-raise-illiteracy-scatter -#| tbl-cap: "2020 年各省、直辖市、自治区,总抚养比和文盲率相关数据(部分)" -#| echo: false - -china_raise_illiteracy <- readRDS(file = "data/china-raise-illiteracy-2020.rds") -knitr::kable(head(china_raise_illiteracy[order(china_raise_illiteracy$`人口数`, decreasing = TRUE), ]), - col.names = c( - "地区", "人口数", "15-64岁", "抚养比", - "15岁及以上人口", "文盲人口", "文盲率" - ), - row.names = FALSE -) -``` - -其中,文盲人口是指15岁及以上不识字及识字很少人口,文盲率 = 文盲人口 / 15岁及以上人口,抚养比 = (0-14岁 + 65岁及以上) / 15-64岁人口数。 - -```{r} -#| label: fig-china-raise-illiteracy -#| fig-cap: "文盲率与抚养比的关系" -#| fig-width: 6 -#| fig-height: 4 -#| fig-showtext: true - -library(ggplot2) -ggplot(data = china_raise_illiteracy) + - geom_point(aes(x = `总抚养比`, y = `文盲人口占15岁及以上人口的比重`)) + - theme_classic() + - labs(x = "抚养比(%)", y = "文盲率(%)") -``` - -### 气泡图 {#sec-bubble} - -气泡图在散点图的基础上,添加了散点大小的视觉维度,可以在图上多展示一列数据,下 @fig-china-raise-illiteracy-bubble 新增了人口数变量。此外,在气泡旁边添加地区名称,将气泡填充的颜色也映射给了人口数变量。 - -```{r} -#| label: fig-china-raise-illiteracy-bubble -#| fig-cap: "文盲率和抚养比数据" -#| fig-width: 6 -#| fig-height: 4.5 -#| fig-showtext: true - -library(ggrepel) -library(scales) -ggplot( - data = china_raise_illiteracy, - aes(x = `总抚养比`, y = `文盲人口占15岁及以上人口的比重`) -) + - geom_point(aes(size = `人口数`, color = `人口数`), - alpha = 0.85, pch = 16, - show.legend = c(color = FALSE, size = TRUE) - ) + - scale_size(labels = label_number(scale_cut = cut_short_scale())) + - scale_color_viridis_c(option = "C") + - geom_text_repel( - aes(label = `地区`), size = 3, max.overlaps = 50, - segment.colour = "gray", seed = 2022, show.legend = FALSE - ) + - coord_cartesian(xlim = c(30, 60), ylim = c(0, 10.5), expand = FALSE) + - theme_classic() + - labs(x = "抚养比(%)", y = "文盲率(%)") -``` - -### 凹凸图 {#sec-bump} - -凹凸图描述位置排序关系随时间的变化,比如前年、去年和今年各省的 GDP 排序变化,春节各旅游景点的人流量变化。[**ggbump**](https://github.com/davidsjoberg/ggbump) 包专门用来绘制凹凸图,如 @fig-bump 所示,展示 - -```{r} -#| label: fig-bump -#| fig-cap: "凹凸图" -#| fig-width: 7 -#| fig-height: 3.5 -#| fig-showtext: true - -library(ggbump) -# 位置排序变化 -df <- data.frame( - country = c( - "印度", "印度", "印度", "瑞典", - "瑞典", "瑞典", "德国", "德国", - "德国", "芬兰", "芬兰", "芬兰" - ), - year = c( - 2018, 2019, 2020, 2018, 2019, 2020, - 2018, 2019, 2020, 2018, 2019, 2020 - ), - value = c( - 492, 246, 246, 369, 123, 492, - 246, 369, 123, 123, 492, 369 - ) -) - -library(data.table) -df <- as.data.table(df) -df[, rank := rank(value, ties.method = "random"), by = "year"] - -ggplot(df, aes(year, rank, color = country)) + - geom_point(size = 7) + - geom_text(data = df[df$year == min(df$year), ], - aes(x = year - .1, label = country), size = 5, hjust = 1) + - geom_text(data = df[df$year == max(df$year), ], - aes(x = year + .1, label = country), size = 5, hjust = 0) + - geom_bump(linewidth = 2, smooth = 8) + - scale_x_continuous(limits = c(2017.6, 2020.4), breaks = seq(2018, 2020, 1)) + - theme_minimal(base_size = 14) + - theme(legend.position = "none", panel.grid.major = element_blank()) + - labs(x = NULL, y = "排名") + - scale_y_reverse() + - coord_fixed(ratio = 0.5) -``` - -### 韦恩图 {#sec-venn-diagram} - -韦恩图描述集合、群体的交叉关系,整体和部分的包含关系,[**ggVennDiagram**](https://github.com/gaospecial/ggVennDiagram/) 包展示 A、B、C 三个集合的交叉关系,如 @fig-venn 所示 - -```{r} -#| label: fig-venn -#| fig-cap: "A、B、C 三个集合的交叉关系" -#| fig-width: 5 -#| fig-height: 4.5 -#| fig-showtext: true - -x <- list(A = 1:5, B = 2:7, C = 5:10) -ggVennDiagram::ggVennDiagram(x) + - scale_fill_gradient(low = "#F4FAFE", high = "#4981BF") -``` - -### 网络图 {#sec-network} - -[**tidygraph**](https://github.com/thomasp85/tidygraph) 包基于 igraph 包操作图数据,计算网络图中节点重要性,[**ggraph**](https://github.com/thomasp85/ggraph)包基于 ggplot2 包可视化网络关系。 - -```{r} -library(ggraph) -data("highschool") -str(highschool) -``` - -highschool 是一个数据框类型的数据,记录了1957 年和 1958 年一些高中男生之间的关系,在数据集中,这些男生被编码成数字 1-71。 - -```{r} -highschool[highschool$from == 1, ] -``` - -1 号男生在 1957 年与 14、15、21、54、55 男生关系密切,到了 1958 年,他与 15、21、22 关系比较密切。tidygraph 包在 igraph 的基础上,可以对图数据进行操作,下面先将数据框转化为图,然后计算中心度,作为高中生的受欢迎程度。 - -```{r} -graph <- tidygraph::as_tbl_graph(highschool, directed = TRUE) |> - dplyr::mutate(Popularity = tidygraph::centrality_degree(mode = 'in')) -graph -``` - -```{r} -#| label: fig-school-graph -#| fig-cap: "高中男生间关系的变化" -#| fig-width: 7 -#| fig-height: 4.5 -#| fig-showtext: true - -ggraph(graph, layout = "kk") + - geom_edge_fan(aes(alpha = after_stat(index)), show.legend = FALSE) + - geom_node_point(aes(size = Popularity)) + - facet_edges(~year) + - theme_graph(base_family = "sans", foreground = "steelblue", fg_text_colour = "white") -``` - -## 描述不确定性 {#sec-visualize-data-uncertainty} - -统计是一门研究不确定性的学科,由不确定性引出许多的基本概念,比如用置信区间描述点估计的不确定性,用覆盖概率描述区间估计方法的优劣。下面以二项分布参数的点估计与区间估计为例,通过可视化图形介绍这一系列统计概念。就点估计来说,描述不确定性可以用标准差、置信区间。 - -[**ggdist**](https://github.com/mjskay/ggdist) 包可视化分布和不确定性 [@ggdist2022] - -- Michael Friendly 2021 年的课程 [Psychology of Data Visualization](http://euclid.psych.yorku.ca/www/psy6135/) -- Claus O. Wilke 2023 年的课程 [SDS 375 Schedule Spring 2023](https://wilkelab.org/SDS375/schedule.html) - -### 置信区间 {#sec-confidence-interval} - -| 0 | 1 | 2 | $\cdots$ | n | -|:------|:------|:------|:---------|:------| -| $p_0$ | $p_1$ | $p_2$ | $\cdots$ | $p_n$ | - -: 二项分布的分布列 {#tbl-binom} - -二项分布 $\mathrm{Binomial}(n,p)$ 的参数 $p$ 的精确区间估计如下: - -$$ -\big(\mathrm{Beta}(\frac{\alpha}{2}; x, n-x+1), \mathrm{Beta}(1-\frac{\alpha}{2}; x+1, n-x)\big) -$$ {#eq-clopper-ci} - -其中, $x$ 表示成功次数,$n$ 表示实验次数,$\mathrm{Beta}(p;v,w)$ 表示形状参数为 $v$ 和 $w$ 的 Beta 贝塔分布的 $p$ 分位数,参数 $p$ 的置信区间的上下限 $P_L,P_U$ 满足 - -$$ -\begin{aligned} -\frac{\Gamma(n+1)}{\Gamma(x)\Gamma(n-x+1)}\int_{0}^{P_L}t^{x-1}(1-t)^{n-x}\mathrm{dt} &= \frac{\alpha}{2} \\ -\frac{\Gamma(n+1)}{\Gamma(x+1)\Gamma(n-x)}\int_{0}^{P_U}t^{x}(1-t)^{n-x-1}\mathrm{dt} &= 1-\frac{\alpha}{2} -\end{aligned} -$$ - -$p_x$ 表示二项分布 $\mathrm{Binomial}(n,p)$ 第 $x$ 项的概率,$x$ 的取值为 $0,1,\cdots,n$ - -$$p_x = \binom{n}{x}p^x(1-p)^{n-x}, \quad x = 0,1,\cdots,n$$ - -二项分布的累积分布函数和 $S_k$ 表示前 $k$ 项概率之和 - -$$S_k = \sum_{x=0}^{k} p_x$$ - -$S_k$ 服从形状参数为 $n-k,k+1$ 的贝塔分布 $I_x(a,b)$,对应于 R 函数 `pbeta(x,a,b)`。 $S_k$ 看作贝塔分布的随机变量 $X$ - -$$ -\begin{aligned} -B_x(a,b) &=\int_{0}^{x}t^{a-1}(1-t)^{b-1}\mathrm{dt} \\ -I_x(a,b) &= \frac{B_x(a,b)}{B(a,b)}, \quad B(a,b) = B_1(a,b) -\end{aligned} -$$ - -考虑二项总体的参数 $p=0.7$,重复模拟 50 次,每次模拟获得的比例 $\hat{p}$ 及其置信区间,区间估计方法来自 [@Clopper1934] ,函数 `binom.test()` 也是采用此方法,二者计算结果相同。如 @fig-clopper-pearson-ci 所示,置信区间覆盖真值的情况用不同颜色表示,覆盖用灰色表示,没有覆盖用黑色表示。 - -```{r} -#| label: fig-clopper-pearson-ci -#| fig-cap: "Clopper-Pearson 置信区间" -#| fig-width: 7 -#| fig-height: 4 -#| fig-showtext: true - -clopper_pearson <- function(p = 0.1, n = 10, nsim = 100) { - set.seed(2022) - nd <- rbinom(nsim, prob = p, size = n) - ll <- qbeta(p = 0.05 / 2, shape1 = nd, shape2 = n - nd + 1) - ul <- qbeta(p = 1 - 0.05 / 2, shape1 = nd + 1, shape2 = n - nd) - data.frame(nd = nd, ll = ll, ul = ul, cover = ul > p & ll < p) -} -# 二项分布的参数 p = 0.7 -dat <- clopper_pearson(p = 0.7, n = 10, nsim = 50) -# 二项分布的参数的置信区间覆盖真值的情况 -ggplot(data = dat, aes(x = 1:50, y = nd / 10, colour = cover)) + - geom_hline(yintercept = 0.7, lty = 2, linewidth = 1.2, color = "gray") + - geom_pointrange(aes(ymin = ll, ymax = ul)) + - scale_color_grey(labels = c(`TRUE` = "是", `FALSE` = "否")) + - theme_classic() + - labs(x = "n", y = "p", color = "覆盖") -``` - -图中,横坐标表示模拟次数 $n$ ,纵坐标表示对应的成功概率 $p$ ,线段端点表示置信区间上下限。 - -### 假设检验 {#sec-hypothesis-tests} - -假设检验的目的是做决策,决策是有风险的,是可能发生错误的,为了控制犯第一类错误的可能性,我们用 P 值描述检验统计假设的不确定性,用功效描述检验方法的优劣。对同一个统计假设,同一组数据,不同的检验方法有不同的 P 值,本质是检验方法的功效不同。 - -[**ggpval**](https://github.com/s6juncheng/ggpval) 在图上添加检验的 P 值结果,[**ggsignif**](https://github.com/const-ae/ggsignif) [@ggsignif2021] 在图上添加显著性注释。[**ggstatsplot**](https://github.com/IndrajeetPatil/ggstatsplot) [@Indrajeet2021] 可视化统计检验、模型的结果,描述功效变化。[**ggpubr**](https://github.com/kassambara/ggpubr) 制作出版级统计图形,两样本均值的比较。 - -```{r} -#| label: fig-plant-growth -#| echo: true -#| fig-cap: "植物生长" -#| fig-width: 5 -#| fig-height: 3.5 -#| fig-showtext: true - -with( - aggregate( - data = PlantGrowth, weight ~ group, - FUN = function(x) c(dist_mean = mean(x), dist_sd = sd(x)) - ), - cbind.data.frame(weight, group) -) |> - ggplot(aes(x = group, y = dist_mean)) + - geom_col( - position = position_dodge(0.4), width = 0.4, fill = "gray" - ) + - geom_errorbar(aes(ymin = dist_mean - dist_sd, ymax = dist_mean + dist_sd), - position = position_dodge(0.4), width = 0.2) + - theme_classic() + - labs(x = "组别", y = "植物干重") -``` - -::: callout-note -R 3.5.0 以后,函数 `aggregate()` 的参数 `drop` 默认值为 `TRUE`, 表示扔掉未用来分组的变量,聚合返回的是一个矩阵类型的数据对象。 -::: - -单因素方差分析 `oneway.test()` 检验各组的方差是否相等。 - -```{r} -oneway.test(data = PlantGrowth, weight ~ group) -``` - -结果显示方差不全部相等,因此,采用函数 `t.test(var.equal = FALSE)` 来检验数据。@fig-signif 展示假设检验的结果,分别标记了 ctrl 与 trt1、trt1 与 trt2 两组 t 检验的结果。 - -```{r} -#| label: fig-signif -#| fig-cap: "展示假设检验的结果" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -library(ggsignif) -ggplot(data = PlantGrowth, aes(x = group, y = weight)) + - geom_boxplot(width = 0.25) + - geom_jitter(width = 0.15) + - geom_signif(comparisons = list(c("ctrl", "trt1"), c("trt1", "trt2")), - map_signif_level = function(p) sprintf("p = %.2g", p), - textsize = 6, test = "t.test") + - theme_classic() + - coord_cartesian(clip = "off") -``` - -为了了解其中的原理,下面分别使用函数 `t.test()` 检验数据,结果给出的 P 值与上 @fig-signif 完全一样。 - -```{r} -t.test(data = PlantGrowth, weight ~ group, subset = group %in% c("ctrl", "trt1")) -t.test(data = PlantGrowth, weight ~ group, subset = group %in% c("trt1", "trt2")) -``` - -### 模型预测 {#sec-model-predictions} - -描述模型预测的不确定性,预测的方差、预测区间。线性回归来说,回归线及置信带。代码提交量的趋势拟合 - -```{r} -#| label: fig-smooth -#| fig-cap: "趋势拟合、预测和推断" -#| fig-width: 7 -#| fig-height: 4.5 -#| fig-showtext: true - -svn_trunk_log <- readRDS(file = "data/svn-trunk-log-2022.rds") -svn_trunk_log$year <- as.integer(format(svn_trunk_log$stamp, "%Y")) -trunk_year <- aggregate(data = svn_trunk_log, revision ~ year, FUN = length) -ggplot(data = trunk_year[trunk_year$year != 1997,], aes(x = year, y = revision)) + - geom_point() + - geom_smooth(aes(color = "LOESS", fill = "LOESS"), - method = "loess", formula = "y~x", - method.args = list( - span = 0.75, degree = 2, family = "symmetric", - control = loess.control(surface = "direct", iterations = 4) - )) + - geom_smooth(aes(color = "GAM", fill = "GAM"), - formula = y ~ s(x, k = 12), method = "gam", se = TRUE) + - geom_smooth(aes(color = "Cubic Spline", fill = "Cubic Spline"), - method = "lm", formula = y ~ splines::bs(x, 3), se = T) + - scale_color_brewer(name = "模型", palette = "Set1") + - scale_fill_brewer(name = "模型", palette = "Set1") + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") -``` - -### 模型诊断 {#sec-model-diagnostics} - -> 所有模型都是错误的,但有些是有用的。 -> -> --- 乔治·博克斯 - -描述模型的敏感性,数据中存在的离群值,变量之间的多重共线性等。引入 Cook 距离、杠杆值、VIF 等来诊断模型。 - -```{r} -#| label: fig-lm-diagnostics -#| fig-cap: "线性模型的诊断图" -#| fig-showtext: true -#| collapse: true -#| fig-width: 7 -#| fig-height: 8 - -# 准备数据 -state_x77 <- data.frame(state.x77, - state_name = rownames(state.x77), state_region = state.region, - state_abb = state.abb, check.names = FALSE -) -# 线性模型拟合 -fit <- lm(`Life Exp` ~ Income + Murder, data = state_x77) -# 模型诊断图 -library(ggfortify) -autoplot(fit, which = 1:6, label.size = 3) -``` - -对于复杂的统计模型,比如混合效应模型的诊断,[**ggPMX**](https://github.com/ggPMXdevelopment/ggPMX) 包。 - -```{r} -#| echo: false -#| eval: false - -op <- par(mfrow = c(3, 2), mar = c(4, 4, 3, 1)) -plot(fit, - ask = FALSE, which = c(1, 2, 3, 4, 5, 6), - caption = list( - "残差和拟合值", "正态 Q-Q 图", - "尺度-位置", "Cook 距离", "残差和杠杆值", - expression("Cook 距离 vs 杠杆值" * h[ii] / (1 - h[ii])) - ) -) -par(op) -``` - -### 边际效应 {#sec-marginal-effects} - -继续 state_x77 数据集,以预期寿命(1969-1971 年统计)为因变量,Income 人均收入(1974 年)和 Murder 谋杀和非过失杀人率(单位:十万分之一,1976 年统计)为自变量,建立线性模型如下: - -$$ -\text{Life Exp} = \alpha + \beta_1 \text{Income} + \beta_2 \text{Murder} + \epsilon -$$ {#eq-lm-state-x77} - -在 R 语言中,可以用函数 `lm()` 拟合上述模型, - -```{r} -fit <- lm(`Life Exp` ~ Income + Murder, data = state_x77) -``` - -模型拟合结果输出如下: - -```{r} -summary(fit) -``` - -[**ggeffects**](https://github.com/strengejacke/ggeffects) 描述单个自变量的作用,人均收入对预期寿命的边际效应 - -```{r} -#| label: fig-marginal-effects -#| fig-cap: "边际效应" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -library(ggeffects) -income_pred <- ggpredict(fit, terms = "Income") -ggplot(income_pred, aes(x, predicted)) + - geom_line() + - geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = 0.1) + - theme_classic() + - labs(x = "人均收入", y = "预期寿命") -``` diff --git a/visualization-basic.qmd b/visualization-basic.qmd deleted file mode 100755 index 34ea7d33..00000000 --- a/visualization-basic.qmd +++ /dev/null @@ -1,809 +0,0 @@ -# ggplot2 入门 {#sec-basic} - -```{r} -#| echo: false - -source("_common.R") -``` - -2006 年 Hans Rosling(汉斯·罗琳)在 TED 做了一场精彩的演讲 --- The best stats you've ever seen。演讲中展示了一系列生动形象的动画,用数据记录的事实帮助大家理解世界的变化,可谓是动态图形领域的惊世之作。时至今日,已经超过 1500 万人观看,产生了十分广泛的影响。下面从数据源头 --- 世界银行获取数据,整理后取名 `gapminder`。本节将基于 `gapminder` 数据集介绍 **ggplot2** 绘图的基础知识,包括图层、标签、刻度、配色、图例、主题、文本、分面、字体、动画和组合等 11 个方面,理解这些有助于绘制和加工各种各样的统计图形,可以覆盖日常所需。gapminder 数据集以数据框的形式存储在 R 软件运行环境中,一共 4950 行,7 列。篇幅所限,下 @tbl-gapminder 展示该数据集的部分内容,表中人均 GDP 和预期寿命两列四舍五入保留一位小数。 - -```{r} -#| echo: false -#| label: tbl-gapminder -#| tbl-cap: "gapminder 数据集(部分)" - -gapminder <- readRDS(file = "data/gapminder-2020.rds") -knitr::kable(head(gapminder), digits = 1, - col.names = c( - "年份", "国家或地区", "区域划分", "收入水平", - "人均 GDP", "预期寿命", "人口总数" - ) -) -``` - -在 R 环境中,加载 gapminder 数据集后,可以用 `str()` 函数查看数据集 gapminder 各个列的数据类型和部分属性值。 - -```{r} -#| label: load-gapminder - -# 查看数据 -str(gapminder) -``` - -其中,country(国家或地区)是字符型变量,region (区域)是因子型变量,income_level(收入水平)是有序的因子型变量,year (年份)、 pop (人口总数)、lifeExp (出生时的预期寿命,单位:岁)和 gdpPercap (人均 GDP,单位:美元)是数值型变量。 - -## 图层 {#sec-layer} - -ggplot2 绘图必须包含以下三个要素,缺少任何一个,图形都是不完整的。 - -1. 数据,前面已经重点介绍和准备了; -2. 映射,数据中的变量与几何元素的对应关系; -3. 图层,至少需要一个图层用来渲染观察值。 - -下面逐一说明三个要素的作用,为简单起见,从数据集 gapminder 中选取 2007 年的数据。 - -```{r} -#| label: fig-layer-point -#| fig-cap: "ggplot2 绘图三要素" -#| fig-subcap: -#| - "只有数据" -#| - "只有数据和坐标映射" -#| - "数据、坐标映射和点图层" -#| - "数据、坐标映射、点图层和视觉映射(可选)" -#| layout-ncol: 2 -#| layout-nrow: 2 -#| fig-width: 4 -#| fig-height: 3 -#| fig-showtext: true - -library(ggplot2) -gapminder_2007 <- gapminder[gapminder$year == 2007, ] -ggplot(data = gapminder_2007) -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point() -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point(aes(size = pop)) -``` - -@fig-layer-point-1 仅提供数据,只渲染出来一个绘图区域。 @fig-layer-point-2 仅提供数据和映射,将变量 gdpPercap 映射给横轴,变量 lifeExp 映射给纵轴,继续渲染出来横、纵坐标轴及标签。 @fig-layer-point-3 提供了数据、映射和图层三要素,观察值根据几何图层 `geom_point()` 将几何元素 「点」渲染在绘图区域上,形成散点图。函数 `ggplot()` 和函数 `geom_point()` 之间是以加号 `+` 连接的。无论最终产出的图形如何复杂,这个模式贯穿 ggplot2 绘图。 - -10 多年来,**ggplot2** 包陆续添加了很多几何图层,目前支持的有 53 个,如下: - -```{r} -#| eval: false -#| echo: false -#| label: layout-geom - -library(ggplot2) -knitr::kable(matrix(grep("^geom_*", x = ls("package:ggplot2"), value = T), ncol = 3), - col.names = c("A", "B", "C"), caption = "图层", format = "pipe" -) -``` - -| | | | -|:-----------------------|:----------------|:--------------| -| geom_abline | geom_dotplot | geom_qq_line | -| geom_area | geom_errorbar | geom_quantile | -| geom_bar | geom_errorbarh | geom_raster | -| geom_bin_2d | geom_freqpoly | geom_rect | -| geom_bin2d | geom_function | geom_ribbon | -| geom_blank | geom_hex | geom_rug | -| geom_boxplot | geom_histogram | geom_segment | -| geom_col | geom_hline | geom_sf | -| geom_contour | geom_jitter | geom_sf_label | -| geom_contour_filled | geom_label | geom_sf_text | -| geom_count | geom_line | geom_smooth | -| geom_crossbar | geom_linerange | geom_spoke | -| geom_curve | geom_map | geom_step | -| geom_density | geom_path | geom_text | -| geom_density_2d | geom_point | geom_tile | -| geom_density_2d_filled | geom_pointrange | geom_violin | -| geom_density2d | geom_polygon | geom_vline | -| geom_density2d_filled | geom_qq | | - -: **ggplot2** 包可以绘制丰富的统计图形 {#tbl-ggplot2-layers} - -也正因这些丰富多彩的图层,ggplot2 可以非常便捷地做各种数据探索和展示工作。从时间序列数据、网络社交数据到文本数据、空间数据,乃至时空数据都有它大显身手的地方。 - -## 标签 {#sec-label} - -用函数 `labs()` 可以添加横轴、纵轴、图例的标题,整个图片的标题和副标题等。下图 @fig-label-1 是默认设置下显示的标签内容,而 @fig-label-2 是用户指定标签内容后的显示效果。 - -```{r} -#| label: fig-label -#| fig-width: 7 -#| fig-height: 3.5 -#| fig-cap: "添加标签" -#| fig-subcap: -#| - "默认设置" -#| - "自定义标签" -#| layout-ncol: 1 -#| fig-showtext: true - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point(aes(color = region)) -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point(aes(color = region)) + - labs(x = "人均 GDP", y = "预期寿命", tag = "标签", - title = "这里是标题", caption = "这是图形说明", - subtitle = "这里是副标题", color = "图例标题") -``` - -## 刻度 {#sec-scale} - -```{=html} - -``` -有时候 @fig-layer-point-3 看起来不太好,收入低的国家太多,聚集在一起,重叠覆盖比较严重。而高收入国家相对较少,分布稀疏,距离低收入比较远,数据整体的分布很不平衡。此时,可以考虑对横轴标度做一些变换,常用的有以 10 为底的对数变换,如 @fig-scale-log10 。 - -```{r} -#| label: fig-scale-log10 -#| fig-showtext: true -#| fig-width: 5 -#| fig-height: 3 -#| fig-cap: "人均 GDP 做对数变换" - -library(scales) -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point() + - scale_x_log10() + - labs(x = "人均 GDP", y = "预期寿命") -``` - -为了更加醒目地展示横轴做了对数变换,需要添加对应的刻度标签。**scales** 包 [@scales2022] 提供很多刻度标签支持,比如函数 `label_log()` 默认提供以 10 为底的刻度标签,如 @fig-scale-labels 。 - -```{r} -#| label: fig-scale-labels -#| fig-showtext: true -#| fig-cap: "刻度标签随数据变换调整" -#| fig-width: 5 -#| fig-height: 3 - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point() + - scale_x_log10(labels = label_log()) + - labs(x = "人均 GDP", y = "预期寿命") -``` - -这其实还不够,有的刻度标签含义不够显然,且看 @fig-scale-labels 的横轴第一个刻度标签 $10^{2.48}$ 是用来替换 @fig-scale-log10 的横轴第一个刻度标签 300。10 的 2.48 次方可不容易看出是 300 的意思,实际上它等于 302。因此,结合人均 GDP 的实际范围,有必要适当调整横轴显示范围,这可以在函数 `scale_x_log10()` 中设置参数 `limits`,横轴刻度标签会随之适当调整,调整后的效果如 @fig-scale-limits 。 - -```{r} -#| label: fig-scale-limits -#| fig-showtext: true -#| fig-width: 5 -#| fig-height: 3 -#| fig-cap: "设置数据展示范围" - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point() + - scale_x_log10(labels = label_log(), limits = c(100, 110000)) + - labs(x = "人均 GDP", y = "预期寿命") -``` - -根据横轴所代表的人均 GDP (单位:美元)的实际含义,其实,可以进一步,添加更多的信息,即刻度标签带上数量单位,此处是美元符号。**scales** 包提供的函数 `label_dollar()` 可以实现,效果如 @fig-scale-dollar 。 - -```{r} -#| label: fig-scale-dollar -#| fig-showtext: true -#| fig-width: 5 -#| fig-height: 3 -#| fig-cap: "设置数据展示范围" - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point() + - scale_x_log10(labels = label_dollar(), limits = c(100, 110000)) + - labs(x = "人均 GDP", y = "预期寿命") -``` - -最后,有必要添加次刻度线作为辅助参考线。图中点与点之间的横向距离代表人均 GDP 差距,以 10 为底的对数变换不是线性变化的,肉眼识别起来有点困难。从 100 美元到 100000 美元,在 100 美元、1000 美元、10000 美元和 100000 美元之间均添加 10 条次刻度线,每个区间内相邻的两条次刻度线之差保持恒定。下面构造刻度线的位置,了解原值和对数变换后的对应关系。 - -```{r} -# 刻度线位置 -mb <- unique(as.numeric(1:10 %o% 10^(1:4))) -# 对数变换后 -log10(mb) -# 刻度线位置 -format(mb, big.mark = ",", scientific = 999) -``` - -函数 `scale_x_log10()` 提供参数 `minor_breaks` 设定刻度线的位置。最终效果如 @fig-scale-minor-breaks 。 - -```{r} -#| label: fig-scale-minor-breaks -#| fig-showtext: true -#| fig-width: 5 -#| fig-height: 3 -#| fig-cap: "添加次刻度线,提供更多参考" - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point() + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - labs(x = "人均 GDP", y = "预期寿命") -``` - -## 配色 {#sec-color} - -好的配色可以让图形产生眼前一亮的效果,R 语言社区在统计图形领域深耕 20 多年,陆续涌现很多专门调色的 R 包,常见的有: - -- **RColorBrewer** [@RColorBrewer2022] () -- **munsell** [@munsell2018] () -- **colorspace** [@Zeileis2020] () -- **paletteer** [@paletteer2021] () -- **scico** [@scico2022] () -- **viridis** [@viridis2021] () -- **viridisLite** [@viridis2021] () -- **colormap** [@colormap2016] () - -**ggplot2** 提供多种方式给图形配色,最常见的要数函数 `scale_color_brewer()`,它调用 RColorBrewer 包制作离散型的调色板,根据离散型变量的具体情况,可分为发散型 qualitative、对撞型 Diverging、有序型 Sequential。在图 @fig-scale-minor-breaks 的基础上,将分类型的区域变量映射给散点的颜色,即得到 @fig-color-brewer 。 - -```{r} -#| label: fig-color-brewer -#| fig-cap: "使用 RColorBrewer 包提供的 Set1 调色板" -#| fig-showtext: true -#| fig-width: 7 -#| fig-height: 3.5 - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point(aes(color = region)) + - scale_color_brewer(palette = "Set1") + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - labs(x = "人均 GDP", y = "预期寿命", color = "区域") -``` - -另一种方式是调用函数 `scale_color_manual()`,需要用户给分类变量值逐个指定颜色,即提供一个命名的向量,效果如 @fig-color-manual 。 - -```{r} -#| label: fig-color-manual -#| fig-cap: "手动挨个指定分类变量的颜色" -#| fig-showtext: true -#| fig-width: 7 -#| fig-height: 3.5 - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point(aes(color = region)) + - scale_color_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - labs(x = "人均 GDP", y = "预期寿命", color = "区域") -``` - -## 图例 {#sec-legend} - -在 @fig-color-brewer 的基础上,继续将每个国家的人口总数映射给点的大小,绘制气泡图。此时有两个视觉映射变量 --- 离散型的变量 country (国家)和连续型的变量 pop (人口总数)。不仅仅是图层函数 `geom_point()`,所有的几何图层都提供参数 `show.legend` 来控制图例的显示或隐藏。传递命名逻辑向量还可以在多个图例中选择性保留。 @fig-legend-show 在两个图例中保留一个,即人口总数。 - -```{r} -#| label: fig-legend-show -#| fig-cap: "在两个图例中保留一个" -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 3.5 - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point(aes(color = region, size = pop), - show.legend = c(color = FALSE, size = TRUE) - ) + - scale_color_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12)) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - labs(x = "人均 GDP", y = "预期寿命", size = "人口总数") -``` - -全世界各个国家的人口总数从百万级横跨到十亿级,根据此实际情况,适当调整图例刻度标签是很有必要的,可以让图例内容更具可读性。 @fig-legend-label 是修改图例刻度标签后的效果,其中 M 表示 Million(百万),B 表示 Billion (十 亿)。 - -```{r} -#| label: fig-legend-label -#| fig-cap: "修改图例刻度标签" -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 3.5 - -ggplot(data = gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + - geom_point(aes(color = region, size = pop), - show.legend = c(color = FALSE, size = TRUE) - ) + - scale_color_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12), labels = label_number(scale_cut = cut_short_scale())) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - labs(x = "人均 GDP", y = "预期寿命", size = "人口总数") -``` - -## 主题 {#sec-theme} - -主题就是一系列风格样式的集合,提前设定标题、文本、坐标轴、图例等元素的默认参数,供后续调用。10 年来,R 语言社区陆续出现很多主题包。 - -- **ggthemes** [@ggthemes2021] 收集了网站(如 Fivethirtyeight)、杂志(如《经济学家》)、软件(如 Stata)等的配色主题,打包成可供 **ggplot2** 绘图的主题,更多内容见 () -- **ggsci** [@ggsci2018] 包收集了多份期刊杂志的图形配色,将其融入 **ggplot2** 绘图主题中,更多内容见 ()。 -- **ggpubr** [@ggpubr2022] 包在 **ggplot2** 之上封装一套更加易用的函数,可以快速绘制出版级的统计图形 ()。 -- **ggcharts** [@ggcharts2020] 包类似 **ggpubr** 包,也提供一套更加快捷的函数接口,缩短数据可视化的想法与实际图形的距离,更多内容见 ()。 -- **ggthemr** [@ggthemr2020] 是比较早的 **ggplot2** 主题包,上游依赖少,更多内容见 ()。 -- **ggtech** [@ggtech2018] 包收集了许多科技公司的设计风格,将其制作成可供 ggplot2 绘图使用的主题,更多内容见 ()。 -- **bbplot** [@bbplot2022] 为 BBC 新闻定制的一套主题,更多内容见 ()。 -- **pilot** [@pilot2022] 包提供一套简洁的 **ggplot2** 主题,特别是适合展示分类、离散型数据,更多内容见 ()。 -- **ggthemeassist** [@ggThemeAssist2016] 包提供 RStudio IDE 插件,帮助用户以鼠标点击的交互方式设置 **ggplot2** 图形的主题样式,更多内容见 ()。 - -在 @fig-legend-label 的基础上,以 **ggplot2** 包内置的主题 `theme_classic()` 替换默认的主题,效果如下 @fig-theme-classic ,这是一套非常经典的主题,它去掉所有的背景色和参考系,显得非常简洁。 - -```{r} -#| label: fig-theme-classic -#| fig-cap: "ggplot2 内置的经典主题风格" -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 4.5 - -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point( - data = function(x) subset(x, year == 2007), - aes(fill = region, size = pop), shape = 21, col = "white", - show.legend = c(fill = TRUE, size = FALSE) - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12)) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - theme_classic() + - labs(x = "人均 GDP", y = "预期寿命", fill = "区域") -``` - -在已有主题的基础上,还可以进一步细微调整,比如,将图例移动至绘图区域的下方,见 @fig-theme-position 。 - -```{r} -#| label: fig-theme-position -#| fig-cap: "图例置于图形下方" -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 4.5 - -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point( - data = function(x) subset(x, year == 2007), - aes(fill = region, size = pop), shape = 21, col = "white", - show.legend = c(fill = TRUE, size = FALSE) - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12)) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - theme_classic() + - theme(legend.position = "bottom") + - labs(x = "人均 GDP", y = "预期寿命", fill = "区域") -``` - -或者用户觉得合适的任意位置。 - -```{r} -#| label: fig-theme-custom -#| fig-cap: "微调图例位置" -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 4.5 - -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point( - data = function(x) subset(x, year == 2007), - aes(fill = region, size = pop), shape = 21, col = "white", - show.legend = c(fill = TRUE, size = FALSE) - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12)) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - theme_classic() + - theme(legend.position = "inside", legend.position.inside = c(0.875, 0.3)) + - labs(x = "人均 GDP", y = "预期寿命", fill = "区域") -``` - -或者更换其它主题,比如 **ggthemes** 包内置极简主题 `theme_tufte()`,它仅保留主刻度线,更加凸显数据。 - -```{r} -#| label: fig-theme-tufte -#| fig-cap: ggthemes 的极简主题 Tufte -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 4.5 - -library(ggthemes) -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point( - data = function(x) subset(x, year == 2007), - aes(fill = region, size = pop), - show.legend = c(fill = TRUE, size = FALSE), - shape = 21, col = "white" - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12)) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - theme_tufte(base_family = "sans") + - theme( - legend.position = "inside", - legend.position.inside = c(0.875, 0.3), - legend.title = element_text(family = "Noto Sans CJK SC"), - legend.text = element_text(family = "Noto Sans CJK SC"), - axis.title = element_text(family = "Noto Sans CJK SC")) + - labs(x = "人均 GDP", y = "预期寿命", fill = "区域") -``` - -## 注释 {#sec-annotation} - -注释可以是普通文本,数学公式,还可以是图形照片、表情包。注释功能非常强大,但也是非常灵活,往往使用起来颇费功夫,需要结合数据情况,从图形所要传递的信息出发,适当添加。R 语言社区陆续出现一些扩展包,让用户使用起来更方便些。 - -- **ggrepel** [@ggrepel2021] 包可以通过添加一定距离的扰动,可以缓解文本重叠的问题,更多内容见 ()。 -- **ggtext** [@ggtext2020] 包支持以 Markdown 语法添加丰富的文本内容,更多内容见 ()。 -- **string2path** [@string2path2022] 包字体轮廓生成路径,注释文本随路径变化,更多内容见 ()。 -- **ggimage** [@ggimage2022] 包提供图像图层,实现以图片代替散点的效果,图片还可以是表情包,更多内容见 ()。 - -在 @fig-theme-tufte 的基础上,给人口总数大于 2 亿的国家添加文本注释。这可以用 **ggplot2** 包提供的文本图层函数 `geom_text()` 实现,效果如 @fig-text 。 - -```{r} -#| label: fig-text -#| fig-cap: "添加文本注释" -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 4.5 - -library(ggrepel) -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point( - data = function(x) subset(x, year == 2007), - aes(fill = region, size = pop), - show.legend = c(fill = TRUE, size = FALSE), - shape = 21, col = "white" - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - geom_text( - data = function(x) subset(x, year == 2007 & pop >= 20 * 10^7), - aes(label = country), show.legend = FALSE - ) + - scale_size(range = c(2, 12)) + - theme_tufte(base_family = "sans") + - theme( - legend.position = "inside", - legend.position.inside = c(0.9, 0.3), - legend.title = element_text(family = "Noto Sans CJK SC"), - legend.text = element_text(family = "Noto Sans CJK SC"), - axis.title = element_text(family = "Noto Sans CJK SC")) + - labs(x = "人均 GDP", y = "预期寿命", fill = "区域") -``` - -当需要给许多点添加文本注释时,就难以避免地遇到注释文本重叠的问题。比如给人口总数大于 5000 万的国家添加文本注释,此时,适合使用 **ggrepel** 包,调用函数 `geom_text_repel()` --- 这是一个新的文本图层,通过添加适当的位移缓解文本重叠问题。 - -```{r} -#| label: fig-text-ggrepel -#| fig-cap: "缓解文本注释相互覆盖的问题" -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 4.5 - -library(ggrepel) -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point(data = function(x) subset(x, year == 2007), - aes(fill = region, size = pop), - show.legend = c(fill = TRUE, size = FALSE), - shape = 21, col = "white" - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_x_log10( - labels = label_dollar(), minor_breaks = mb, limits = c(100, 110000) - ) + - geom_text_repel( - data = function(x) subset(x, year == 2007 & pop >= 5 * 10^7), - aes(label = country), size = 3, max.overlaps = 50, - segment.colour = "gray", seed = 2022, show.legend = FALSE - ) + - scale_size(range = c(2, 12)) + - theme_tufte(base_family = "sans") + - theme( - legend.position = "inside", - legend.position.inside = c(0.9, 0.3), - legend.title = element_text(family = "Noto Sans CJK SC"), - legend.text = element_text(family = "Noto Sans CJK SC"), - axis.title = element_text(family = "Noto Sans CJK SC")) + - labs(x = "人均 GDP", y = "预期寿命", fill = "区域") -``` - -## 分面 {#sec-facet} - -**ggplot2** 包有两个函数 `facet_wrap()` 和 `facet_grid()` 都可以用来实现分面操作,分面的目的是将数据切分,一块一块地展示。下面在 @fig-theme-tufte 的基础上,按收入水平变量分面,即将各个国家或地区按收入水平分开,效果如 @fig-facet-wrap 所示。`facet_grid()` 与 `facet_wrap()` 的效果是类似的,就不再赘述了。 - -```{r} -#| label: fig-facet-wrap -#| fig-cap: "按收入水平变量分面" -#| fig-showtext: true -#| fig-width: 7 -#| fig-height: 5 - -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point(data = function(x) subset(x, year == 2007), - aes(fill = region, size = pop), - show.legend = c(fill = TRUE, size = FALSE), - shape = 21, col = "white" - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12)) + - scale_x_log10(labels = label_log(), limits = c(100, 110000)) + - facet_wrap(facets = ~income_level, ncol = 2) + - theme_classic() + - labs(x = "人均 GDP", y = "预期寿命", fill = "区域") -``` - -在函数 `facet_wrap()` 内设置不同的参数值,会有不同的排列效果。设置 `ncol = 3`,意味着排成 3 列,而分类变量 continent 总共有 5 种不同的类别,因此将会是 3 列 2 行的布局,效果如下 @fig-facet-ncol 。 - -```{r} -#| label: fig-facet-ncol -#| fig-cap: "按区域变量分面" -#| fig-showtext: true -#| fig-width: 7 -#| fig-height: 6 - -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point(data = function(x) subset(x, year == 2007), - aes(fill = region, size = pop), - show.legend = c(fill = TRUE, size = FALSE), - shape = 21, col = "white" - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12)) + - scale_x_log10(labels = label_log(), limits = c(100, 110000)) + - facet_wrap(facets = ~income_level, ncol = 3) + - theme_classic() + - theme(legend.position = "inside", legend.position.inside = c(0.9, 0.2)) + - labs(x = "人均 GDP", y = "预期寿命", fill = "区域") -``` - -## 动画 {#sec-animate} - -从 1991 年至 2020 年,gapminder 数据集一共是 30 年的数据。根据 2007 年的数据绘制了 @fig-animate ,每年的数据绘制一幅图像,30 年总共可获得 30 帧图像,再以每秒播放 6 帧图像的速度将 30 帧图像合成 GIF 动画。因此,设置这个动画总共 30 帧,每秒播放的图像数为 6。 - -```{r} -options(gganimate.nframes = 30, gganimate.fps = 6) -``` - -**gganimate** 包提供一套代码风格类似 **ggplot2** 包的动态图形语法,可以非常顺滑地与之连接。在了解了 ggplot2 绘制图形的过程后,用 **gganimate** 包制作动画是非常容易的。**gganimate** 包会调用 **gifski** () 包来合成动画,因此,除了安装 **gganimate** 包,还需要安装 **gifski** 包。接着,在已有的 **ggplot2** 绘图代码基础上,再追加一个转场图层函数 `transition_time()`,这里是按年逐帧展示图像,因此,其转场的时间变量为 gapminder 数据集中的变量 `year`。 - -```{r} -#| label: fig-animate -#| fig-cap: 制作动画 -#| fig-width: 7 -#| fig-height: 5 -#| fig-show: "animate" -#| dev: "ragg_png" - -library(gganimate) -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + - geom_point(aes(fill = region, size = pop), - show.legend = c(fill = TRUE, size = FALSE), - alpha = 0.65, shape = 21, col = "white" - ) + - scale_fill_manual(values = c( - `拉丁美洲与加勒比海地区` = "#E41A1C", `撒哈拉以南非洲地区` = "#377EB8", - `欧洲与中亚地区` = "#4DAF4A", `中东与北非地区` = "#984EA3", - `东亚与太平洋地区` = "#FF7F00", `南亚` = "#FFFF33", `北美` = "#A65628" - )) + - scale_size(range = c(2, 12), labels = label_number(scale_cut = cut_short_scale())) + - scale_x_log10(labels = label_log(), limits = c(10, 130000)) + - facet_wrap(facets = ~income_level) + - theme_classic() + - labs( - title = "{frame_time} 年", x = "人均 GDP", - y = "预期寿命", size = "人口总数", fill = "区域" - ) + - transition_time(time = year) -``` - -## 组合 {#sec-combine} - -将多幅小图组合起来构成一幅大图也是常见的需求,常见于出版级、产品级的作品中。组合涉及到布局,布局涉及到层次。有的组合图是从不同角度呈现数据,有的组合图是从传递信息的主次出发,等等。**patchwork** 包是非常流行的一个基于 **ggplot2** 的用于图形组合的 R 包,下面基于 faithful 数据展示绘制组合图形的过程。 - -首先根据喷发时间将 faithful 数据分成两组。 - -```{r} -# 根据喷发时间将数据分成两组 -faithful <- transform(faithful, group = ifelse(eruptions > 3, "A", "B")) -``` - -绘制分组散点图,叠加二维核密度曲线。 - -```{r} -# 绘制分组散点图 -scatterplot <- ggplot(faithful, aes(eruptions, waiting, color = group)) + - geom_point() + - geom_density_2d() + - theme_classic() + - theme(axis.text = element_blank(), axis.title = element_blank()) -``` - -将上图中的图例单独抽取出来,作为一个子图。 - -```{r} -# https://stackoverflow.com/questions/46079033/ -# Extract legend from ggplot object -extract_legend <- function(gg) { - grobs <- ggplot_gtable(ggplot_build(gg)) - foo <- which(sapply(grobs$grobs, function(x) x$name) == "guide-box") - grobs$grobs[[foo]] -} -legend <- extract_legend(scatterplot) -``` - -获得图例后,原图中不需要图例了。 - -```{r} -scatterplot <- scatterplot + theme(legend.position = "none") -``` - -准备两个箱线图分别描述 faithful 数据集中的等待时间 waiting 和喷发时间 eruptions 。 - -```{r} -boxplot_left <- ggplot(faithful, aes(group, waiting, fill = group)) + - geom_boxplot() + - theme_classic() + - theme( - legend.position = "none", axis.ticks.x = element_blank(), - axis.text.x = element_blank(), axis.title.x = element_blank() - ) - -boxplot_bottom <- ggplot(faithful, aes(group, eruptions, fill = group)) + - geom_boxplot() + - theme_classic() + - theme( - legend.position = "none", axis.ticks.y = element_blank(), - axis.text.y = element_blank(), axis.title.y = element_blank() - ) + - coord_flip() -``` - -加载 **patchwork** 包,使用函数 `wrap_plots()` 组合 `boxplot_left` 、`scatterplot` 、`legend` 和 `boxplot_bottom` 四个子图,最终效果见下图。 - -```{r} -#| label: fig-patchwork -#| fig-width: 6 -#| fig-height: 5 -#| fig-showtext: true -#| fig-cap: patchwork 组合多幅子图 - -library(patchwork) -top <- wrap_plots(boxplot_left, scatterplot, ncol = 2, widths = c(0.2, 0.8)) -bottom <- wrap_plots(legend, boxplot_bottom, ncol = 2, widths = c(0.22, 0.8)) -final <- wrap_plots(top, bottom, nrow = 2, heights = c(0.8, 0.2)) -final -``` - -主图是占据着最大篇幅的叠加二维密度曲线的散点图,展示数据的二维分布,两个箱线图辅助展示等待时间 waiting 和喷发时间 eruptions 的分布,而左下角的图例是次要的说明。 - -## 艺术 {#sec-arts} - -[Georgios Karamanis](https://georgemsavva.github.io/creativecoding/) 基于 R 语言和扩展包 **ggforce** 制作了一系列生成艺术(Generative Arts)作品。下图是 **ggforce** 包的 4 个图层函数 `geom_regon()`、 `geom_spiro()`、 `geom_diagonal()` 和 `geom_spoke()` 分别生成的四幅图片。 - -```{r} -#| label: fig-arts -#| fig-width: 4 -#| fig-height: 4 -#| fig-cap: R 语言与生成艺术 -#| fig-subcap: -#| - 函数 `geom_regon()` -#| - 函数 `geom_spiro()` -#| - 函数 `geom_diagonal()` -#| - 函数 `geom_spoke()` -#| fig-showtext: true -#| layout-ncol: 2 -#| layout-nrow: 2 - -library(ggforce) -s <- 900 -ggplot() + - geom_regon(aes( - x0 = cos((1:s) / 57), y0 = sin((1:s) / 57), - sides = 6, r = cos((1:s) / 24), - angle = cos((1:s) / 23), color = 1:s %% 15 - ), - linewidth = 0.2, fill = NA, linetype = "twodash" - ) + - scale_color_viridis_c(option = 15, guide = "none") + - coord_fixed() + - theme_void() - -r <- seq(1, 11, 0.1) -ggplot() + - geom_spiro(aes(r = r, R = r * 20, d = r^2, outer = T, color = r %% 10), linewidth = 3) + - scale_color_viridis_c(option = "turbo") + - coord_fixed() + - theme_void() + - theme(legend.position = "none") - -s <- 1200 -ggplot() + - geom_diagonal(aes( - x = cos(seq(0, pi, length.out = s)), - y = sin(seq(0, pi, length.out = s)), - xend = cos(seq(0, 360 * pi, length.out = s)), - yend = sin(seq(0, 360 * pi, length.out = s)) - ), - linewidth = 0.1, strength = 1 - ) + - coord_fixed() + - theme_void() - -e <- 1e-3 -s <- 1e4 -t <- pi / 2 * cumsum(seq(e, -e, length.out = s))^3 -ggplot() + - geom_spoke(aes( - x = cumsum(cos(t)), y = cumsum(sin(t)), - angle = t, color = t, radius = 1:s %% 500 - ), alpha = 0.5) + - scale_color_distiller(palette = 15, guide = "none") + - coord_fixed() + - theme_void() -``` - -需要充满想象,或借助数学、物理方程,或借助算法、数据生成。好看,但没什么用的生成艺术作品。 - -- -- -- -- -- diff --git a/visualization-graphics.qmd b/visualization-graphics.qmd deleted file mode 100644 index b7d69a16..00000000 --- a/visualization-graphics.qmd +++ /dev/null @@ -1,685 +0,0 @@ -# graphics 入门 {#sec-basic-graphics} - -```{r} -#| echo: false - -source("_common.R") -``` - -不是把每个绘图函数都挨个讲一遍,也不是把它们统统归纳总结,而是比较深入地介绍一、两种图形,一、两个例子,重点阐述 Base R 的绘图特点,使用图形时,注意图形本身的作用,最终,希望读者能够达到举一反三的效果。 - -基础绘图系统。相比于 **ggplot2** 和 **lattice**,**graphics** 制作示意图是优势。 - -## 绘图基础 {#sec-graphics-elements} - -利用点、线等基础元素从零开始绘图。 - -### `plot()` {#sec-elements-plot} - -本节将主要基于鸢尾花数据集介绍 R 语言基础绘图系统,该数据集最早来自埃德加·安德森,后来,被罗纳德·费希尔在介绍判别分析的论文中用到,从而,流行于机器学习社区。鸢尾花是非常漂亮的一种花,在统计和机器学习社区家喻户晓,更别提在植物界的名声。其实,远不止于此,在绘画艺术界也是如雷贯耳,印象派大师文森特·梵高画了一系列鸢尾花作品。万紫千红,但能入画的不多,故而,鸢尾花更显高雅。在生命最后的一段日子里,梵高受精神病折磨,在法国普罗旺斯的圣·雷米医院里,唯有盛开的鸢尾花陪着他,最著名的《星月夜》就是在这时候创作出来的。下面先让我们一睹鸢尾花芳容,图片来自维基百科鸢尾花词条。 - -::: {#fig-iris layout-ncol="3" layout="[30,40,30]" layout-valign="bottom"} -![versicolor 杂色鸢尾](images/iris-versicolor.jpeg){#fig-iris-versicolor width="70%"} - -![setosa 山鸢尾](images/iris-setosa.jpeg){#fig-iris-setosa width="80%"} - -![virginica 弗吉尼亚鸢尾](images/iris-virginica.jpeg){#fig-iris-virginica width="70%"} - -三种鸢尾花 -::: - -鸢尾花数据集已经打包在 R 软件中,而且默认已经加载到命名空间,下面用函数 `summary()` 查看其概况。 - -```{r} -summary(iris) -``` - -函数 `plot()` 采用公式语法可以快速作图。 - -```{r} -#| label: fig-iris-plot -#| fig-cap: 快速作图函数 `plot()` -#| fig-width: 4 -#| fig-height: 4 -#| fig-showtext: true -#| par: true -#| fig-subcap: -#| - 公式语法绘制散点图 -#| - 带背景参考线的散点图 -#| layout-ncol: 2 - -plot(Sepal.Length ~ Sepal.Width, data = iris) -plot(iris$Sepal.Width, iris$Sepal.Length, panel.first = grid()) -``` - -函数 `plot()` 是一个泛型函数,传递不同类型的参数值会调用不同的绘图方法,而不同的绘图方法的参数是不同的。当采用公式语法绘图时,会自动调用函数 `plot.formula()` ,此时,参数 `panel.first` 就不起作用。当不使用公式语法时,会调用函数 `plot.default()` ,此时,参数 `panel.first` 就起作用,利用该参数可以添加背景参考线。 - -### 标签 {#sec-elements-label} - -函数 `plot()` 的参数 `xlab` 、`ylab` 和 `main` 可以分别设置坐标轴横、纵标签和图主标题。 - -```{r} -#| label: fig-iris-label -#| fig-cap: 标签 -#| fig-width: 5 -#| fig-height: 5 -#| fig-showtext: true - -plot( - Sepal.Length ~ Sepal.Width, data = iris, - xlab = "Sepal Width", ylab = "Sepal Length", - main = "Edgar Anderson's Iris Data" -) -``` - -### 字体 {#sec-elements-fonts} - -作图函数 `plot()` 和 `title()` 都有参数 `family` ,设置该参数可以调整图形中的字体。下 @fig-iris-fonts 的横纵坐标轴标签和图标题设为宋体,坐标轴刻度标签设为无衬线字体。 - -```{r} -#| label: fig-iris-fonts -#| fig-cap: 字体 -#| fig-width: 5 -#| fig-height: 5 -#| fig-showtext: true - -plot(Sepal.Length ~ Sepal.Width, data = iris, ann = FALSE, family = "sans") -title( - xlab = "萼片宽度", ylab = "萼片长度", - main = "埃德加·安德森的鸢尾花数据", family = "Noto Serif CJK SC" -) -``` - -### 分组 {#sec-elements-group} - -分组有两种方式,其一按照数据中的分类变量分组,其二按照一定的规则分组。而图形表达的方式可以借助颜色或图形元素的样式。 - -函数 `plot()` 的参数 `col` 和 `pch` 都可以用来分组,前者通过颜色,后者通过点的类型。简单起见,将数据集 `iris` 中的 `Species` 列传递给参数 `col` ,实现不同种类的鸢尾花配以不同的颜色。 - -```{r} -#| label: fig-iris-group1 -#| fig-cap: 分组 -#| fig-width: 4 -#| fig-height: 4 -#| fig-showtext: true -#| par: true - -plot(Sepal.Length ~ Sepal.Width, data = iris, col = Species, pch = 16) -``` - -下面采用一个简单规则将数据分成两组,将鸢尾花中 setosa 山毛榉类型且 Sepal.Length 萼片长度大于 5 厘米的分成一组,以红色填充散点代表这部分数据,与余下的散点形成对比,达到区分的目的。 - -```{r} -#| label: fig-iris-group2 -#| fig-cap: 分组 -#| fig-width: 4 -#| fig-height: 4 -#| fig-showtext: true -#| par: true - -plot(Sepal.Length ~ Sepal.Width, data = iris) -points(Sepal.Length ~ Sepal.Width, data = iris, - col = "#EA4335", pch = 16, - subset = Species == "setosa" & Sepal.Length > 5 -) -``` - -### 配色 {#sec-elements-color} - -经过探查,知道数据集 `iris` 中的 `Species` 列有三种取值。调用函数 `palette()` 设置一个超过 3 种颜色的调色板可以实现自定义配色。首先来看看当前调色板的颜色。 - -```{r} -palette() -``` - -一共是 8 种颜色,效果预览见 @fig-graphics-palette 。 - -```{r} -#| label: fig-graphics-palette -#| fig-width: 3 -#| fig-height: 3 -#| fig-cap: 默认调色板 -#| fig-showtext: true -#| echo: false - -scales::show_col(colours = palette()) -``` - -设置新的调色板也是用函数 `palette()` ,参数 `value` 设置新的颜色值向量,下面依次是红、蓝、绿、黄四种颜色。 - -```{r} -palette(value = c("#EA4335", "#4285f4", "#34A853", "#FBBC05")) -``` - -函数 `plot()` 的调色板默认来自函数 `palette()` ,经过上面的调整,同一行绘图代码出来不同的效果,即 @fig-iris-group1 变成 @fig-iris-color 。 - -```{r} -#| label: fig-iris-color -#| fig-cap: 配色 -#| fig-width: 4 -#| fig-height: 4 -#| fig-showtext: true -#| par: true - -plot(Sepal.Length ~ Sepal.Width, data = iris, col = Species, pch = 16) -``` - -### 注释 {#sec-elements-annotation} - -函数 `text()` 可以在图上任意位置添加文本或公式。下图在位置 (4,6.5) 处添加红色的文字 flower。 - -```{r} -#| label: fig-iris-text -#| fig-cap: 注释 -#| fig-width: 4 -#| fig-height: 4 -#| fig-showtext: true -#| par: true - -plot(Sepal.Length ~ Sepal.Width, data = iris) -text(x = 4, y = 6.5, labels = "flower", col = "#EA4335") -``` - -### 图例 {#sec-elements-legend} - -函数 `plot()` 不会自动添加图例,需要使用函数 `legend()` 添加图例。 - -```{r} -#| label: fig-iris-legend1 -#| fig-cap: 图例 -#| fig-width: 5 -#| fig-height: 4.5 -#| fig-showtext: true -#| par: true - -plot(Sepal.Length ~ Sepal.Width, data = iris, col = Species, pch = 16) -legend(x = "topright", title = "Species", - legend = unique(iris$Species), box.col = NA, bg = NA, - pch = 16, col = c("#EA4335", "#4285f4", "#34A853") -) -``` - -图例放置在绘图区域以外,比如右边空区域。此时,通过点和文本构造图例。 - -```{r} -#| label: fig-iris-legend2 -#| fig-cap: 图例 -#| fig-width: 6 -#| fig-height: 5 -#| fig-showtext: true - -op <- par(mar = c(4, 4, 3, 6)) -plot( - Sepal.Length ~ Sepal.Width, data = iris, - col = Species, pch = 16, main = "Edgar Anderson's Iris Data" -) -text(x = 4.7, y = 6.75, labels = "Species", pos = 4, offset = .5, xpd = T) -points(x = 4.7, y = 6.5, pch = 16, cex = 1, col = "#EA4335", xpd = T) -text(x = 4.7, y = 6.5, labels = "setosa", pos = 4, col = "#EA4335", xpd = T) -points(x = 4.7, y = 6.3, pch = 16, cex = 1, col = "#4285f4", xpd = T) -text(x = 4.7, y = 6.3, labels = "versicolor", pos = 4, col = "#4285f4", xpd = T) -points(x = 4.7, y = 6.1, pch = 16, cex = 1, col = "#34A853", xpd = T) -text(x = 4.7, y = 6.1, labels = "virginica", pos = 4, col = "#34A853", xpd = T) -on.exit(par(op), add = TRUE) -``` - -在函数 `plot()` 内设置较宽的坐标轴范围,获得一个较宽的绘图区域,再用函数 `points()` 添加数据点,最后,使用函数 `legend()` 添加图例。 - -```{r} -#| label: fig-iris-legend3 -#| fig-cap: 图例 -#| fig-width: 5 -#| fig-height: 5 -#| fig-showtext: true - -plot( - x = c(2, 6), y = range(iris$Sepal.Length), type = "n", - xlab = "Sepal Width", ylab = "Sepal Length", - main = "Edgar Anderson's Iris Data" -) -points(Sepal.Length ~ Sepal.Width, - col = Species, pch = 16, data = iris -) -legend(x = "right", title = "Species", - legend = unique(iris$Species), box.col = NA, bg = NA, - pch = 16, col = c("#EA4335", "#4285f4", "#34A853") -) -``` - -### 统计 {#sec-elements-reg} - -添加分组线性回归线。按鸢尾花种类分组,线性回归模型拟合数据,抽取回归系数。首先,使用函数 `split()` 将数据集 iris 按变量 Species 分组拆分,得到一个列表,每个元素都是数据框。接着,调用函数 `lapply()` 将函数 `lm()` 作用到列表的每个元素上,得到一个列表,每个元素都是线性拟合对象。最后,再调函数 `lapply()` 将函数 `coef()` 应用到列表的每个元素上,得到回归模型的系数向量。 - -```{r} -lapply( - lapply( - split(iris, ~Species), lm, - formula = Sepal.Length ~ Sepal.Width - ), - coef -) -``` - -走到绘图这一步,往往是画什么内容比较清楚,分类数量、调色板都确定下来了。大致来说分 6 步:第一步,实现分组线性回归拟合;第二步,绘制分组散点图;第三步,添加分组回归线;第四步,添加图例并调整图例的位置;第五步,设置图形边界等绘图参数;第六步,添加背景网格线。输入线性拟合对象给函数 `abline()` 可以直接绘制回归线,不需要从拟合对象中提取回归系数。调用函数 `par()` 设置图形边界,特别是增加图形右侧边界以容纳图例,再调用函数 `legend()` 要设置 `xpd = TRUE` 以允许图例超出绘图区域。 - -```{r} -#| label: fig-iris-lm -#| fig-cap: 分组线性回归 -#| fig-width: 6 -#| fig-height: 5 -#| fig-showtext: true - -# 分组线性拟合 -iris_lm <- lapply( - split(iris, ~Species), lm, formula = Sepal.Length ~ Sepal.Width -) -# 将分组变量和颜色映射 -cols <- c("setosa" = "#EA4335", "versicolor" = "#4285f4", "virginica" = "#34A853") -# 设置图形边界以容纳标签和图例 -op <- par(mar = c(4, 4, 3, 8)) -# 绘制分组散点图 -plot( - Sepal.Length ~ Sepal.Width, - data = iris, col = Species, pch = 16, - xlab = "Sepal Width", ylab = "Sepal Length", - main = "Edgar Anderson's Iris Data" -) -# 添加背景参考线 -grid() -# 添加回归线 -for (species in c("setosa", "versicolor", "virginica")) { - abline(iris_lm[[species]], col = cols[species], lwd = 2) -} -# 添加图例 -legend( - x = "right", title = "Species", inset = -0.4, xpd = TRUE, - legend = unique(iris$Species), box.col = NA, bg = NA, lty = 1, lwd = 2, - pch = 16, col = c("#EA4335", "#4285f4", "#34A853") -) -# 恢复图形参数设置 -on.exit(par(op), add = TRUE) -``` - -## 绘图进阶 {#sec-graphics-advanced} - -### 组合图形 {#sec-graphics-composite} - -点、线、多边形组合 - -```{r} -#| label: fig-math-annotation -#| fig-cap: 正态总体下两样本均值之差的检验 -#| fig-width: 7 -#| fig-height: 5 -#| fig-showtext: true - -x <- seq(-10, 10, length = 400) -y1 <- dnorm(x) -y2 <- dnorm(x, m = 3) -op <- par(mar = c(5, 4, 2, 1)) -plot(x, y2, - xlim = c(-3, 8), type = "n", - xlab = quote(Z == frac(mu[1] - mu[2], sigma / sqrt(n))), - ylab = "Density" -) -polygon(c(1.96, 1.96, x[240:400], 10), - c(0, dnorm(1.96, m = 3), y2[240:400], 0), - col = "grey80", lty = 0 -) -lines(x, y2) -lines(x, y1) -polygon(c(-1.96, -1.96, x[161:1], -10), - c(0, dnorm(-1.96, m = 0), y1[161:1], 0), - col = "grey30", lty = 0 -) -polygon(c(1.96, 1.96, x[240:400], 10), - c(0, dnorm(1.96, m = 0), y1[240:400], 0), - col = "grey30" -) -legend(x = 4.2, y = .4, - fill = c("grey80", "grey30"), - legend = expression( - P(abs(Z) > 1.96, H[1]) == 0.85, - P(abs(Z) > 1.96, H[0]) == 0.05 - ), bty = "n" -) -text(0, .2, quote(H[0]:~ ~ mu[1] == mu[2])) -text(3, .2, quote(H[1]:~ ~ mu[1] == mu[2] + delta)) -on.exit(par(op), add = TRUE) -``` - -### 多图布局 {#sec-graphics-layout} - -布局函数 `layout()` 和图形参数设置函数 `par()` - -```{r} -#| label: fig-anscombe -#| fig-cap: 数据可视化很重要 -#| fig-width: 6 -#| fig-height: 6 -#| fig-showtext: true - -data(anscombe) -form <- sprintf("y%d ~ x%d", 1:4, 1:4) -fit <- lapply(form, lm, data = anscombe) -op <- par(mfrow = c(2, 2), mgp = c(2, 0.7, 0), - mar = c(3, 3, 1, 1) + 0.1, oma = c(0, 0, 2, 0)) -for (i in 1:4) { - plot(as.formula(form[i]), - data = anscombe, col = "black", - pch = 20, xlim = c(3, 19), ylim = c(3, 13), - xlab = as.expression(substitute(x[i], list(i = i))), - ylab = as.expression(substitute(y[i], list(i = i))), - family = "sans" - ) - abline(fit[[i]], col = "black") - text( - x = 7, y = 12, family = "sans", - labels = bquote(R^2 == .(round(summary(fit[[i]])$r.squared, 3))) - ) -} -mtext("数据集的四重奏", outer = TRUE) -on.exit(par(op), add = TRUE) -``` - -## 图形选择 {#sec-graphics-choose} - -以不同的二维或三维图形可视化同一份多元数据。颜色图、透视图、等值线图和填充等值线图存在某种相似性,又有区别。 - -### 颜色图 {#sec-color-image} - -$$ -f(x,y) = -\begin{cases} -\frac{\sin(\sqrt{x^2 + y^2})}{\sqrt{x^2 + y^2}}, & (x,y) \neq (0,0)\\ -1, & (x,y) = (0,0) -\end{cases} -$$ - -```{r} -y <- x <- seq(from = -8, to = 8, length.out = 51) -z <- outer(x, y, FUN = function(x, y) sin(sqrt(x^2 + y^2)) / sqrt(x^2 + y^2)) -z[26, 26] <- 1 -``` - -将绘图区域划分成网格,每个小网格对应一个颜色值。函数 `image()` 绘制颜色图 - -```{r} -#| label: fig-image -#| fig-cap: 颜色图 -#| fig-width: 4.5 -#| fig-height: 4.5 -#| dev: 'tikz' -#| fig-process: !expr to_png -#| par: true - -image(x = x, y = y, z = z, xlab = "$x$", ylab = "$y$") -``` - -### 透视图 {#sec-graphics-persp} - -函数 `persp()` 绘制透视图 - -```{r} -#| label: fig-persp -#| fig-cap: 透视图 -#| fig-width: 5.5 -#| fig-height: 4 -#| dev: 'tikz' -#| fig-process: !expr to_png - -op <- par(mar = c(0, 1, 2, 1)) -persp( - x = x, y = y, z = z, main = "二维函数的透视图", - theta = 30, phi = 30, expand = 0.5, col = "lightblue", - xlab = "$x$", ylab = "$y$", zlab = "$f(x,y)$" -) -on.exit(par(op), add = TRUE) -``` - -### 等值线图 {#sec-graphics-contour} - -地理上,常用等高线图描述地形,等高线图和等值线图其实是一个意思。函数 `contour()` 绘制等值线图。 - -```{r} -#| label: fig-contour -#| fig-cap: 等值线图 -#| fig-width: 4.5 -#| fig-height: 4.5 -#| dev: 'tikz' -#| fig-process: !expr to_png -#| par: true - -contour(x = x, y = y, z = z, xlab = "$x$", ylab = "$y$") -``` - -### 填充等值线图 {#sec-graphics-filled-contour} - -函数 `filled.contour()` 绘制填充等值线图。 - -```{r} -#| label: fig-filled-contour -#| fig-cap: 填充等值线图 -#| fig-width: 5 -#| fig-height: 4.5 -#| dev: 'tikz' -#| fig-process: !expr to_png - -filled.contour( - x = x, y = y, z = z, asp = 1, - color.palette = hcl.colors, - plot.title = { - title( - main = "二维函数的填充等值线图", - xlab = "$x$", ylab = "$y$" - ) - }, - plot.axes = { - grid(col = "gray") - axis(1, at = 2 * -4:4, labels = 2 * -4:4) - axis(2, at = 2 * -4:4, labels = 2 * -4:4) - points(0, 0, col = "blue", pch = 16) - }, - key.axes = { - axis(4, seq(-0.2, 1, length.out = 9)) - } -) -``` - -## 总结 {#sec-graphics-summary} - -### tinyplot 包 {#sec-graphics-plot2} - -[tinyplot](https://github.com/grantmcdermott/tinyplot) 包扩展 Base R 函数 `plot()` 的功能,在公式语法方面和 lattice 包很接近。另一个值得一提的 R 包是 [**basetheme**](https://github.com/karoliskoncevicius/basetheme) ,用来设置 Base R 绘图主题。 - -```{r} -#| label: fig-tinyplot-iris -#| fig-cap: tinyplot 包绘制分组散点图 -#| fig-width: 6 -#| fig-height: 4 -#| fig-showtext: true -#| par: true - -library(tinyplot) -tinyplot(Sepal.Length ~ Sepal.Width | Species, data = iris, - palette = "Tableau 10", pch = 16) -``` - -或者使用参数 `by` 指定分组变量,效果和上图一样。 - -```{r} -#| eval: false - -with(iris, { - tinyplot(y = Sepal.Length, x = Sepal.Width, by = Species, - palette = "Tableau 10", pch = 16) -}) -``` - -还可以使用参数 `legend` 调整图例的位置,比如放置在绘图区域下方。 - -```{r} -#| label: fig-tinyplot-legend -#| fig-cap: tinyplot 包调整图例位置 -#| fig-width: 5 -#| fig-height: 5 -#| fig-showtext: true - -op <- par(mar = c(5, 4, .5, .5)) -tinyplot(Sepal.Length ~ Sepal.Width | Species, - data = iris, palette = "Tableau 10", pch = 16, - legend = legend("bottom!", title = "Species of iris", bty = "o") -) -on.exit(par(op), add = TRUE) -``` - -还可以绘制其它类型的图形,如分组密度曲线图等。 - -```{r} -#| label: fig-tinyplot-density -#| fig-cap: tinyplot 包绘制密度曲线图 -#| fig-width: 5 -#| fig-height: 5 -#| fig-showtext: true - -with(iris, tinyplot( - density(Sepal.Length), by = Species, - bg = "by", # 分组填充 - grid = TRUE, # 背景网格 - palette = "Tableau 10", - legend = list("topright", bty = "o") # 右上角图例 -)) -``` - -### plot3D 包 {#sec-graphics-plot3D} - -虽然不提倡大量使用三维图形,但如何绘制三维图形却是生生不息的命题,以下仅是 R 语言社区的冰山一角。 - -- **plotrix** [@Lemon2006] 一个坐落于 R 的红灯区的 R 包。基于 Base R 各类绘图函数。 -- **scatterplot3d** [@Uwe2003] 基于 Base R 绘制三维散点图。 -- **misc3d** [@misc3d2008] 绘制三维图形的杂项,支持通过 Base R、 **tcltk** 包和 **rgl** 包渲染图形。 -- **plot3D** [@plot3D2021] 依赖 **misc3d** 包,加强 Base R 在制作三维图形方面的能力。 - -举个比较新颖的一个例子,**plot3D 包**的函数 `image2D()` 绘制二维颜色图,细看又和 `image()` 函数不同,渲染出来的图形有三维的立体感。归根结底,很多时候束缚住自己的不是工具,而是视野和思维。以奥克兰 Maunga Whau 火山地形数据 `volcano` 为例。 - -```{r} -#| label: fig-volcano-plot3d -#| fig-cap: 奥克兰火山地形图 -#| fig-subcap: -#| - 函数 `image2D()` 二维颜色图 -#| - 函数 `persp3D()` 三维透视图 -#| fig-width: 6.25 -#| fig-height: 5 -#| fig-showtext: true -#| warning: false -#| layout-ncol: 1 -#| out-width: 70% - -library(plot3D) -image2D(volcano, - shade = 0.2, rasterImage = TRUE, asp = 0.7, - xlab = "南北方向", ylab = "东西方向", - main = "奥克兰 Maunga Whau 地形图", clab = "高度", - contour = FALSE, col = hcl.colors(100), - colkey = list( - at = 90 + 20 * 0:5, labels = 90 + 20 * 0:5, - length = 1, width = 1 - ) -) -op <- par(mar = c(1, 1.5, 0, 0)) -persp3D( - x = 1:87, y = 1:61, z = volcano, col = hcl.colors(100), - ticktype = "detailed", colkey = FALSE, expand = 1, - phi = 35, theta = 125, bty = "b2", shade = TRUE, - ltheta = 100, lphi = 45, - xlab = "\n南北方向", ylab = "\n东西方向", zlab = "\n高度" -) -on.exit(par(op), add = TRUE) -``` - -值得一提,Python 社区的绘图模块 matplotlib 同样具有强大的绘图能力,三维图形也不在话下。不过,不同的绘图系统所采用的透视法不同,如下图所示。 - -```{r} -#| eval: false -#| echo: false - -# 保存数据 -write.table(volcano, - file = "data/volcano.csv", sep = ",", - row.names = FALSE, col.names = F, quote = F -) -``` - -```{python} -#| label: fig-volcano-plt -#| fig-cap: matplotlib 绘制三维透视图 -#| fig-width: 5.5 -#| fig-height: 5 -#| code-fold: true -#| echo: !expr knitr::is_html_output() - -from matplotlib import cm -from matplotlib.colors import LightSource -import matplotlib.pyplot as plt -import numpy as np -import pandas as pd - -# 设置 PGF 后端渲染图形 -import matplotlib as mpl -mpl.use("pgf") -# XeLaTeX 编译图形 -plt.rcParams.update({ - "text.usetex": True, - "pgf.texsystem": "xelatex", - "pgf.rcfonts": False, # don't setup fonts from rc parameters - "pgf.preamble": "\n".join([ - r"\usepackage[fontset=fandol,UTF8]{ctex}", - ]), -}) -# 读取数据 -volcano = pd.read_csv("data/volcano.csv", header=None) -# DataFrame 转 Array -z = volcano.to_numpy() -# 数据行、列数 -nrows, ncols = z.shape -# 线性序列 -x = np.linspace(1, 87, ncols) -y = np.linspace(1, 61, nrows) -# 类似 R 语言函数 expand.grid() -xv, yv = np.meshgrid(x, y) -# 设置主题 -fig, ax = plt.subplots(subplot_kw=dict(projection="3d")) -# 观察视角 -ax.view_init(azim=30, elev=30) -# 设置坐标轴标签 -ax.set_xlabel(r"南北方向", rotation=45) -ax.set_ylabel(r"东西方向", rotation=-15) -ax.set_zlabel(r"高度", rotation=90) -# 去掉多余的边空 -fig.set_tight_layout(True) -# 光源照射的角度 -ls = LightSource(270, 45) -# 自定义调色板 -rgb = ls.shade(z, cmap=cm.viridis, vert_exag=0.1, blend_mode="soft") -# 三维透视图 -surf = ax.plot_surface( - xv, yv, z, rstride=1, cstride=1, facecolors=rgb, - linewidth=0, antialiased=False, shade=False -) -# 渲染 -plt.show() -``` - -::: content-hidden -``` python -import matplotlib.font_manager as fm -fm.get_font_names() # 查看可供 matplotlib 使用的字体名称 - -from matplotlib import rcParams -rcParams.keys() # 查看可配置的选项 - -import matplotlib.pyplot as plt -plt.savefig('demo.pdf', backend='pgf') # 保存图片 -# https://matplotlib.org/stable/tutorials/text/pgf.html -``` -::: diff --git a/visualization-intermediate.qmd b/visualization-intermediate.qmd deleted file mode 100755 index d645ae15..00000000 --- a/visualization-intermediate.qmd +++ /dev/null @@ -1,1371 +0,0 @@ -# 基础图形 {#sec-intermediate} - -```{r} -#| echo: false - -source("_common.R") -``` - -本章按照图形作用分类介绍各种各样的统计图形,每个小节包含 5-8 个常用的图形,每个图形会结合数据说明其作用、绘制代码。希望借助真实的数据引发读者兴趣,提出问题,探案数据,讲故事,将其应用于其它场景,举一反三。除了数据获取、清理和预处理的工作外,从原始数据出发,还将穿插介绍图形绘制相关的数据操作,比如适当的分组计算、数据重塑等操作。当然,不可能逐行给出代码的说明和使用,因为这会显得非常累赘。探索数据和绘制图形的过程中,会有很多的中间代码,这些也不再展示了,仅给出最终展示图,但会做适当说明。 - -- @sec-visualize-data-trend 探索、展示数据中隐含的趋势信息,具体有折线图、瀑布图、曲线图、曲面图、热力图、日历图、棋盘图和时间线图。 -- @sec-visualize-data-comparisons 以图形展示数据对比,达到更加突出、显著的效果,让差异给人留下印象,具体有柱形图、条形图、点线图(也叫克利夫兰点图)、雷达图和词云图。 -- @sec-visualize-data-proportion 探索、展示数据中隐含的比例信息,以突出重点,具体有简单饼图、环形饼图、扇形饼图、帕累托图、马赛克图和矩阵树图。 - -## 描述趋势 {#sec-visualize-data-trend} - -GNU R 是一个自由的统计计算和统计绘图环境,最初由新西兰奥克兰大学统计系的 Ross Ihaka 和 Robert Gentleman 共同开发。1997 年之后,成立了一个 R Core Team(R 语言核心团队),他们在版本控制系统 [Apache Subversion](https://subversion.apache.org/)上一起协作开发至今。25 年---四分之一个世纪过去了,下面分析他们留下的一份开发日志,了解一段不轻易为人所知的故事。 - -首先,下载 1997 年至今约 25 年的原始代码提交日志数据。下载数据的代码如下,它是一行 Shell 命令,可在 MacOS 或 Ubuntu 等 Linux 系统的终端里运行,借助 Apache Subversion 软件,将提交日志导出为 [XML 格式](https://www.w3.org/standards/xml/core) 的数据文件,保存在目录 `data-raw/` 下,文件名为 `svn_trunk_log_2022.xml`,本书网页版随附。 - -```{bash} -#| eval: false - -svn log --xml --verbose -r 6:83528 \ - https://svn.r-project.org/R/trunk > data-raw/svn_trunk_log_2022.xml -``` - -去掉没什么信息的前5次代码提交记录:初始化仓库,上传原始的 R 软件源码等。 从 Ross Ihaka 在 1997-09-18 提交第 1 次代码改动开始,下载所有的提交日志。截至 2022-12-31,代码最新版本号为 83528,意味着代码仓库已存在 8 万多次提交。 - -下载数据后,借助 [**xml2**](https://github.com/r-lib/xml2/) 包预处理这份 XML 格式数据,提取最重要的信息,谁在什么时间做了什么改动。经过一番操作后,将清洗干净的数据保存到目录 `data/` 下,以 R 软件特有的文件格式保存为 `svn-trunk-log-2022.rds`,同样与书随附。这样下来,原 XML 格式保存的 35 M 文件减少为 1 M 多,极大地减少存储空间,方便后续的数据探索和可视化。下面是这份日志数据最初的两行: - -```{r} -svn_trunk_log <- readRDS(file = "data/svn-trunk-log-2022.rds") -head(svn_trunk_log, 2) -``` - -一共是四个字段,分别是代码提交时记录的版本号 revision,提交代码的人 author,提交代码的时间 stamp 和提交代码时伴随的说明 msg。接下来,带着问题一起探索开源自由的统计软件 R 过去 25 年波澜壮阔的历史! - -### 折线图 {#sec-line} - -```{=html} - -``` -::: callout-tip -不再介绍每个函数、每个参数和每行代码的作用,而是重点阐述折线图的作用,以及如何解读数据,阐述解读的思路和方向,建立起数据分析的思维。将重点放在这些方面,有助于书籍存在的长远意义,又结合了最真实的背景和原始数据,相信对实际工作的帮助会更大。而对于使用到统计方法的函数,则详加介绍,展示背后的实现细节,而不是调用函数做调包侠。 -::: - -折线图的意义是什么?在表达趋势变化,趋势的解读很重要。先来了解一下总体趋势,即过去 25 年里代码提交次数的变化情况。数据集 `svn_trunk_log` 没有年份字段,但时间字段 stamp 隐含了年份信息,因此,新生成一个字段 year 将年份信息从 stamp 提取出来。 - -```{r} -svn_trunk_log <- within(svn_trunk_log, { - # 提取日期、月份、年份、星期、第几周、第几天等时间成分 - year <- as.integer(format(stamp, "%Y")) - date <- format(stamp, format = "%Y-%m-%d", tz = "UTC") - month <- format(stamp, format = "%m", tz = "UTC") - hour <- format(stamp, format = "%H", tz = "UTC") - week <- format(stamp, format = "%U", tz = "UTC") - wday <- format(stamp, format = "%a", tz = "UTC") - nday <- format(stamp, format = "%j", tz = "UTC") -}) -# 代码维护者 ID 和姓名对应 -ctb_map <- c( - "bates" = "Douglas Bates", "deepayan" = "Deepayan Sarkar", - "duncan" = "Duncan Temple Lang", "falcon" = "Seth Falcon", - "guido" = "Guido Masarotto", "hornik" = "Kurt Hornik", - "iacus" = "Stefano M. Iacus", "ihaka" = "Ross Ihaka", - "jmc" = "John Chambers", "kalibera" = "Tomas Kalibera", - "lawrence" = "Michael Lawrence", "leisch" = "Friedrich Leisch", - "ligges" = "Uwe Ligges", "luke" = "Luke Tierney", - "lyndon" = "Others", "maechler" = "Martin Maechler", - "mike" = "Others", "morgan" = "Martin Morgan", - "murdoch" = "Duncan Murdoch", "murrell" = "Paul Murrell", - "pd" = "Peter Dalgaard", "plummer" = "Martyn Plummer", - "rgentlem" = "Robert Gentleman", "ripley" = "Brian Ripley", - "smeyer" = "Sebastian Meyer", "system" = "Others", - "tlumley" = "Thomas Lumley", "urbaneks" = "Simon Urbanek" -) -svn_trunk_log$author <- ctb_map[svn_trunk_log$author] -``` - -接着,调用分组聚合函数 `aggregate()` 统计各年的代码提交量。 - -```{r} -trunk_year <- aggregate(data = svn_trunk_log, revision ~ year, FUN = length) -``` - -然后,将数据集 trunk_year 以折线图展示,如 @fig-trunk-year-line 所示。 - -```{r} -#| label: fig-trunk-year-line -#| fig-cap: "过去 25 年代码提交次数的变化情况" -#| fig-showtext: true - -library(ggplot2) -ggplot(data = trunk_year, aes(x = year, y = revision)) + - geom_point() + - geom_line() + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") -``` - -为什么呈现这样的变化趋势?我最初想到的是先逐步增加,然后下降一会儿,再趋于平稳。这比较符合软件从快速迭代开发期,过渡到成熟稳定期的生命周期。接着,从小时趋势图观察代码提交量的变化,发现有高峰有低谷,上午高峰,晚上低峰,但也并不是所有年份都一致,这是因为开发者来自世界各地,位于不同的时区。 - -```{r} -#| label: fig-trunk-hour-line -#| fig-cap: "提交代码的时段分布" -#| fig-showtext: true -#| fig-width: 7 -#| fig-height: 5 - -aggregate(data = svn_trunk_log, revision ~ year + hour, length) |> - ggplot(aes(x = hour, y = revision, group = year)) + - geom_line() + - geom_line(data = function(x) subset(x, year < 2006), - aes(color = as.character(year))) + - theme_classic() + - labs(x = "时段", y = "提交量", color = "年份") -``` - -最后,观察代码提交量的月趋势图,12月和次年1月、7-8 月份提交量迎来小高峰,应该是教授们放寒暑假。 - -```{r} -#| label: fig-trunk-month-line -#| fig-cap: "提交代码的月份分布" -#| fig-showtext: true -#| fig-width: 7 -#| fig-height: 5 - -aggregate(data = svn_trunk_log, revision ~ year + month, length) |> - transform(date = as.Date(paste(year, month, "01", sep = "-"))) |> - ggplot(aes(x = date, y = revision)) + - geom_point(aes(color = factor(year)), show.legend = F, size = 0.75) + - geom_line(aes(color = factor(year)), show.legend = F) + - scale_x_date(date_minor_breaks = "1 year") + - theme_classic() + - theme(panel.grid.minor.x = element_line()) + - labs(x = "时间(月粒度)", y = "提交量") -``` - -### 瀑布图 {#sec-waterfall} - -相比于折线图,瀑布图将变化趋势和增减量都展示了,如 @fig-waterfall 所示,每年的提交量就好像瀑布上的水,图中每一段水柱表示当期相对于上一期的增减量。瀑布图是用矩形图层 `geom_rect()` 构造的,数据点作为矩形对角点,对撞型的颜色表示增减。 - -```{r} -#| label: fig-waterfall -#| fig-cap: "25 年代码逐年提交量的变化趋势" -#| fig-showtext: true - -trunk_year <- trunk_year[order(trunk_year$year), ] - -trunk_year_tmp <- data.frame( - xmin = trunk_year$year[-length(trunk_year$year)], - ymin = trunk_year$revision[-length(trunk_year$revision)], - xmax = trunk_year$year[-1], - ymax = trunk_year$revision[-1], - fill = trunk_year$revision[-1] - trunk_year$revision[-length(trunk_year$revision)] > 0 -) - -ggplot() + - geom_rect( - data = trunk_year_tmp, - aes(xmin = xmin, ymin = ymin, xmax = xmax, ymax = ymax, fill = fill -), - show.legend = FALSE - ) + - geom_point( - data = trunk_year, aes(x = year, y = revision), size = 0.75 - ) + - scale_fill_brewer(palette = "Set2") + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") -``` - -**ggTimeSeries** 包 [@ggTimeSeries2022] () 提供统计图层 `stat_waterfall()` 实现类似的瀑布图,如 @fig-waterfall-ggTimeSeries 所示。 - -```{r} -#| label: fig-waterfall-ggTimeSeries -#| fig-cap: "矩形图层构造瀑布图" -#| fig-showtext: true - -library(ggTimeSeries) -ggplot(data = trunk_year, aes(x = year, y = revision)) + - stat_waterfall() + - scale_fill_brewer(palette = "Set2") + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") -``` - -### 曲线图 {#sec-smooth} - -```{=html} - -``` -将散点以线段逐个连接起来,形成折线图,刻画原始的变化,而曲线图的目标是刻画潜在趋势。有两种画法,其一从代数的角度出发,做插值平滑,在相邻两点之间以一条平滑的曲线连接起来;其二从统计的角度出发,做趋势拟合,通过线性或非线性回归,获得变化趋势,以图呈现,使得散点之中隐藏的趋势更加清晰。 - -**ggplot2** [@Hadley2016] 包提供函数 `geom_smooth()` 拟合散点图中隐含的趋势,通过查看函数 `geom_smooth()` 的帮助文档,可以了解其内部调用的统计方法。默认情况下,采用局部多项式回归拟合方法,内部调用了函数 `loess()` 来拟合趋势,如 @fig-trunk-year-smooth 所示。 - -```{r} -#| label: fig-trunk-year-smooth -#| fig-cap: "过去 25 年代码提交次数的变化情况" -#| fig-showtext: true - -ggplot(data = trunk_year, aes(x = year, y = revision)) + - geom_point() + - geom_smooth(data = subset(trunk_year, year != 1997)) + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") -``` - -类似大家熟悉的线性回归拟合函数 `lm()`,函数 `loess()` 也是基于类似的使用语法。下面继续以此数据为例,了解该函数的使用,继而了解 ggplot2 绘制平滑曲线图背后的统计方法。1997 年是不完整的,不参与模型参数的估计。 - -```{r} -trunk_year_loess <- loess(revision ~ year, - data = subset(trunk_year, year != 1997), - span = 0.75, degree = 2, method = "loess", - family = "symmetric", - control = loess.control(surface = "direct", iterations = 4) -) -``` - -下面通过设定函数 `geom_smooth()` 的参数,可以达到一样的效果,见下 @fig-trunk-year-loess - -```{r} -#| label: fig-trunk-year-loess -#| fig-cap: "过去 25 年代码提交次数的变化情况" -#| fig-showtext: true - -ggplot(data = trunk_year, aes(x = year, y = revision)) + - geom_point() + - geom_smooth(method = "loess", formula = "y~x", - method.args = list( - span = 0.75, degree = 2, family = "symmetric", - control = loess.control(surface = "direct", iterations = 4) - ), data = subset(trunk_year, year != 1997)) + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") -``` - -`method = "loess"` 意味着调用了一种非参数的回归方法,即局部估计散点平滑 (locally estimated scatterplot smoothing),另一个与之类似的回归方法是局部加权散点平滑 (locally weighted scatterplot smoothing),简称 lowess 。1991 年 [Jerome Friedman](https://statweb.stanford.edu/~jhf/) 提出多元适应性回归样条(**M**ultivariate **A**daptive **R**egression **S**plines),R 语言社区对应功能的扩展包是 **earth** 。 - -除了 `method = "loess"`,函数 `geom_smooth()` 支持的统计方法还有很多,比如非线性回归拟合 `nls()` - -```{r} -trunk_year_nls <- nls(revision ~ a * (year - 1996)^2 + b, - data = subset(trunk_year, year != 1997), - start = list(a = -0.1, b = 1000) -) -``` - -采用一元二次非线性回归拟合方法,效果如 @fig-trunk-year-nls 所示。 - -```{r} -#| label: fig-trunk-year-nls -#| fig-cap: "过去 25 年代码提交次数的变化情况" -#| fig-showtext: true - -ggplot(data = trunk_year, aes(x = year, y = revision)) + - geom_point() + - geom_smooth( - method = "nls", - formula = "y ~ a * (x - 1996)^2 + b", - method.args = list( - start = list(a = -0.1, b = 1000) - ), se = FALSE, - data = subset(trunk_year, year != 1997), - ) + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") -``` - -::: callout-caution -在函数 `geom_smooth()` 内调用非线性回归拟合方法时,暂不支持提供置信区间。 -::: - -即便在不清楚统计原理的情况下,也不难看出 @fig-trunk-year-loess 和 @fig-trunk-year-nls 的差异,局部多项式回归捕捉到了更多的信息,特别是起步阶段的上升趋势,以及 2000-2005 年的高峰特点。 - -```{r} -summary(trunk_year_loess) -``` - -```{r} -summary(trunk_year_nls) -``` - -非线性回归模型带有 2 个参数,一共 26 个观察值,因此,自由度为 26 - 2 = 24。 RSE 残差平方和的标准差为 - -```{r} -# 非线性回归的残差平方和的标准差 -sqrt(sum(residuals(trunk_year_nls)^2)/24) -``` - -```{r} -#| eval: false -#| echo: false - -trunk_year_fit <- within(trunk_year, { - nls_fitted = fitted(trunk_year_nls) - loess_fitted = fitted(trunk_year_loess) -}) -``` - -以平滑曲线连接相邻的散点,可以构造一个插值方法给函数 `geom_smooth()`,如下示例基于样条插值函数 `spline()`。样条源于德国宝马工程师,车辆外壳弧线,那些拥有非常漂亮的弧线,越光滑,与空气的摩擦阻力越小,车辆的气动外形更加符合流体力学的要求,加工打磨更加困难,往往价值不菲。美感是相通的,即使不懂车标,通过气动外形,也能识别出车辆的档次。 - -**ggplot2** 包支持的平滑方法有很多,如借助函数 `splinefun()` 构造样条插值获得平滑曲线,调用 **mgcv** 包的函数 `gam()` ,调用 **ggalt** 包的函数 `geom_xspline()` 。 - -```{r} -#| label: fig-trunk-year-xxspline -#| fig-cap: "过去 25 年代码提交次数的变化情况" -#| fig-subcap: -#| - 自定义样条插值 spline -#| - 广义可加模型样条拟合 -#| - 自由度为 3 的正交多项式拟合 -#| fig-showtext: true -#| layout-ncol: 2 -#| fig-width: 4.5 -#| fig-height: 4 - -xxspline <- function(formula, data, ...) { - dat <- model.frame(formula, data) - res <- splinefun(dat[[2]], dat[[1]]) - class(res) <- "xxspline" - res -} - -predict.xxspline <- function(object, newdata, ...) { - object(newdata[[1]]) -} - -ggplot(data = trunk_year, aes(x = year, y = revision)) + - geom_point() + - geom_smooth( - formula = "y~x", - method = xxspline, se = FALSE, - data = subset(trunk_year, year != 1997) - ) + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") - -ggplot(data = trunk_year, aes(x = year, y = revision)) + - geom_point() + - geom_smooth( - formula = y ~ s(x, k = 12), - method = "gam", se = FALSE, - data = subset(trunk_year, year != 1997) - ) + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") - -ggplot(data = trunk_year, aes(x = year, y = revision)) + - geom_point() + - geom_smooth( - method = "lm", - formula = "y ~ poly((x - 1996), 3)", - se = FALSE, - data = subset(trunk_year, year != 1997), - ) + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray90")) + - labs(x = "年份", y = "提交量") -``` - -数学公式表达的统计模型与 R 语言表达的计算公式的对应关系见下 @tbl-formula ,更多详情见帮助文档 `?formula`。 - -| 数学公式 | R 语言计算公式 | -|:------------------------------|:----------------------------------------| -| $y = \beta_0$ | `y ~ 1` | -| $y = \beta_0 + \beta_1 x_1$ | `y ~ 1 + x1` 或 `y ~ x1` 或 `y ~ x1 + x1^2` | -| $y = \beta_1 x_1$ | `y ~ 0 + x1` 或 `y ~ -1 + x1` | -| $y = \beta_0 + \beta_1 x_1 + \beta_2 x_2$ | `y ~ x1 + x2` | -| $y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \beta_3 x_1 x_2$ | `y ~ x1 * x2` | -| $y = \beta_0 + \beta_1 x_1 x_2$ | `y ~ x1:x2` | -| $y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \beta_3 x_1 x_2$ | `y ~ x1 + x2 + x1:x2` | -| $y = \beta_0 + \sum_{i=1}^{999}\beta_i x_i$ | `y ~ .` | -| $y = \beta_0 + \beta_1 x + \beta_2 x^5$ | `y ~ x + I(x^5)` | -| $y = \beta_0 + \beta_1 x + \beta_2 x^2$ | `y ~ x + I(x^2)` | -| $y = \beta_0 + \beta_1 x + \beta_2 x^2$ | `y ~ poly(x, degree = 2, raw = TRUE)` | - -: 数学公式与 R 语言表示的计算公式 {#tbl-formula} - -### 流线图 {#sec-streamgraph} - -流线图(Stream Graph)是堆积面积图(Stacked Area Graph)的一种变体,适合描述时间序列数据的趋势。**ggplot2** 扩展包 [ggstream](https://github.com/davidsjoberg/ggstream) 可以制作流线图,如下图所示。 - -```{r} -#| label: fig-streamgraph -#| fig-width: 7 -#| fig-height: 6 -#| fig-showtext: true -#| fig-cap: 各开发者的提交量趋势 - -library(ggstream) -trunk_year_author <- aggregate(data = svn_trunk_log, revision ~ year + author, FUN = length) -ggplot(trunk_year_author, aes(x = year, y = revision, fill = author)) + - geom_stream() + - theme_classic() + - theme(legend.position = "bottom") + - labs(x = "年份", y = "提交量", fill = "贡献者") -``` - -### 曲面图 {#sec-wireframe} - -**ggplot2** 包暂不支持绘制三维曲面图,而 **lattice** 包支持,但也是非常有限的支持。**lattice 包**和 **ggplot2** 包都是基于图形语法的,层层叠加就必然会出现覆盖,只有在绘制函数型数据的图像时是合适的,因为覆盖少,即使覆盖也不妨碍趋势的表达。根据不同的使用场景有两个更好的选择,基于 OpenGL 的真三维图形可以用 [rayrender](https://github.com/tylermorganwall/rayrender) 和 [rayshader](https://github.com/tylermorganwall/rayshader) 包绘制,而基于 JavaScripts 的交互式三维图形可以用 [rgl](https://github.com/dmurdoch/rgl) 或 [plotly](https://github.com/plotly/plotly.R) 包绘制。 - -下 @fig-trunk-year-wireframe 是用 **lattice** 包的 `wireframe()` 函数绘制的,这是一个三维曲面透视图,三维图形有时候并不能很好地表达数据,或者数据并不适合用三维图形表示。数据本身并没有那么明显的趋势规律,同样也会体现不出三维图形的表达能力。大部分情况下,我们应当避免使用静态的三维图形,但函数型数据是适合用三维图形来表达的。 - -```{r} -#| label: fig-trunk-year-wireframe -#| fig-cap: "25 年代码提交量变化趋势图" -#| fig-width: 7 -#| fig-height: 6 -#| echo: !expr knitr::is_html_output() -#| fig-showtext: true -#| code-fold: true - -trunk_year_week <- aggregate(data = svn_trunk_log, revision ~ year + week, FUN = length) -library(lattice) -wireframe( - data = trunk_year_week, revision ~ year * as.integer(week), - shade = TRUE, drape = FALSE, - xlab = "年份", - ylab = "第几周", - zlab = list("提交量", rot = 90), - scales = list( - arrows = FALSE, col = "black" - ), - # 减少三维图形的边空 - lattice.options = list( - layout.widths = list( - left.padding = list(x = -.6, units = "inches"), - right.padding = list(x = -1.0, units = "inches") - ), - layout.heights = list( - bottom.padding = list(x = -.8, units = "inches"), - top.padding = list(x = -1.0, units = "inches") - ) - ), - par.settings = list(axis.line = list(col = "transparent")), - screen = list(z = -60, x = -70, y = 0) -) -``` - -每周的代码提交量受影响因素多,不确定性多,波动表现尖锐高频,上图反而对整体趋势的表达不够简洁清晰。按年、月统计提交量平均掉了每日的波动,反而可以体现更大的周期性和趋势性。下面绘制三维柱形图,三维图形天然给人有更加直观的感觉,毕竟立体。**latticeExtra** 包提供三维柱形图图层 `panel.3dbars()`,如 @fig-trunk-year-3dbarplot 所示。 - -```{r} -#| label: fig-trunk-year-3dbarplot -#| fig-cap: "25 年代码提交量变化趋势图" -#| fig-width: 7 -#| fig-height: 6 -#| echo: !expr knitr::is_html_output() -#| fig-showtext: true -#| code-fold: true - -# 按年、月分组统计代码提交量 -trunk_year_month <- aggregate( - data = svn_trunk_log, - revision ~ year + month, FUN = length -) -# 数据转化为矩阵类型 -trunk_year_month_m <- matrix( - data = trunk_year_month[trunk_year_month$year > 1998, "revision"], - ncol = 12, nrow = 24, byrow = FALSE, - dimnames = list( - 1999:2022, # 行 - 1:12 # 列 - ) -) -# 绘制三维柱形图 -cloud(trunk_year_month_m, - panel.3d.cloud = latticeExtra::panel.3dbars, - col.facet = "red", # 柱子的颜色 - col = "gray90", - xbase = 0.5, ybase = 0.5, # 柱子的大小 - scales = list( - arrows = FALSE, col = "black", - # tck 刻度线的长度 - tck = c(0.7, 1.5, 1), - # distance 控制标签到轴的距离 - distance = c(1.2, 0.6, 0.8) - ), - # rot 旋转轴标签 - xlab = list("年份", rot = -45), ylab = list("月份", rot = 45), - zlab = list("提交量", rot = 90), - # 减少三维图形的边空 - lattice.options = list( - layout.widths = list( - left.padding = list(x = -.6, units = "inches"), - right.padding = list(x = -1.0, units = "inches") - ), - layout.heights = list( - bottom.padding = list(x = -.8, units = "inches"), - top.padding = list(x = -1.0, units = "inches") - ) - ), - # 去掉边框 - par.settings = list( - axis.line = list(col = "transparent"), - layout.widths = list(ylab.axis.padding = 0) - ), - screen = list(z = -45, x = -30, y = 0) -) -``` - -### 热力图 {#sec-heatmap} - -@fig-trunk-year-heatmap 提交量变化趋势 - -```{r} -#| label: fig-trunk-year-heatmap -#| fig-cap: "25 年代码提交量变化热力图" -#| fig-width: 7 -#| fig-height: 4 -#| fig-showtext: true - -ggplot(data = trunk_year_week, aes(x = as.integer(week) , y = year, fill = revision)) + - geom_tile(linewidth = 0.4) + - scale_fill_viridis_c(option = "C") + - scale_x_continuous(expand = c(0, 0)) + - scale_y_continuous(expand = c(0, 0)) + - theme_classic() + - labs(x = "第几周", y = "年份", fill = "提交量") -``` - -图层 `scale_x_continuous()` 中设置 `expand = c(0, 0)` 可以去掉数据与 x 轴之间的空隙。 或者添加坐标参考系图层 `coord_cartesian()`,设置参数 `expand = FALSE` 同时去掉横纵轴与数据之间的空隙。 - -```{r} -#| label: fig-trunk-month-heatmap -#| fig-cap: "25 年代码提交量变化热力图" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -aggregate(data = svn_trunk_log, revision ~ year + month, length) |> - ggplot(aes(x = month, y = year, fill = revision)) + - geom_tile(linewidth = 0.4) + - scale_fill_viridis_c(option = "C") + - coord_cartesian(expand = FALSE) + - theme_classic() + - labs(x = "月份", y = "年份", fill = "提交量") -``` - -### 日历图 {#sec-calendar} - -更加直观地展示出节假日、休息工作日、寒暑假,比如描述学生学习规律、需求的季节性变化、周期性变化。 - -```{r} -# 星期、月份缩写 -week.abb <- c("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") -month.abb <- c( - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" -) -# 按年、星期、第几周聚合统计提交量数据 -svn_trunk_year <- aggregate( - revision ~ year + wday + week, FUN = length, - data = svn_trunk_log, subset = year %in% 2018:2022 -) -# 第几周转为整型数据 -# 周几转为因子型数据 -svn_trunk_year <- within(svn_trunk_year, { - week = as.integer(week) - wday = factor(wday, labels = week.abb) -}) -``` - -```{r} -#| label: fig-calendar -#| fig-cap: "最近 5 年休息和工作日打码活跃度" -#| fig-width: 8 -#| fig-height: 7 -#| fig-showtext: true - -ggplot(data = svn_trunk_year, aes( - x = week, y = wday, fill = cut(revision, breaks = 5 * 0:5) -)) + - geom_tile(color = "white", linewidth = 0.5) + - scale_fill_brewer(palette = "Greens") + - scale_x_continuous( - expand = c(0, 0), breaks = seq(1, 52, length = 12), labels = month.abb - ) + - facet_wrap(~year, ncol = 1) + - theme_minimal() + - labs(x = "月份", y = "星期", fill = "提交量") -``` - -经过了解 svn_trunk_year 2018 - 2022 年每天提交量的范围是 0 次到 21 次,0 次表示当天没有提交代码,SVN 上也不会有日志记录。因此,将提交量划分为 5 档 - -### 棋盘图 {#sec-chess} - -棋盘图一般可以放所有时间节点的聚合信息,格点处为落的子 - -```{r} -#| echo: false -#| label: rversion-raw-data - -rversion <- readRDS(file = "data/rversion-2022.rds") -``` - -该数据集的存储结构很简单,是一个两列的数据框,它的一些属性如下: - -```{r} -str(rversion) -``` - -做一点数据处理,将 date 字段转为日期类型,并从日期中提取年、月信息。 - -```{r} -rversion$date <- as.Date(rversion$date, format = "%Y-%m-%d", tz = "UTC") -rversion$year <- format(rversion$date, "%Y") -rversion$month <- format(rversion$date, "%m") -``` - -统计过去 25 年里每月的发版次数,如图 @fig-rversion-chess - -```{r} -#| label: fig-rversion-chess -#| fig-cap: "25 年 R 软件发版情况" -#| fig-showtext: true -#| fig-width: 6 -#| fig-height: 8 - -aggregate(data = rversion, version ~ year + month, length) |> - ggplot(aes(x = month, y = year)) + - geom_label(aes(label = version, fill = version), - show.legend = F, color = "white") + - scale_fill_viridis_c(option = "D", begin = 0.2, end = 0.8) + - theme_classic() + - theme(panel.grid.major.y = element_line(colour = "gray95")) + - labs(x = "月份", y = "年份") -``` - -### 时间线图 {#sec-timeline} - -时间线图非常适合回顾过去,展望未来,讲故事 - -时间线图展示信息的层次和密度一般由时间跨度决定。时间跨度大时,展示重点节点信息,时间跨度小时,重点和次重点信息都可以放。从更加宏观的视角,厘清发展脉络,比如近两年的 R 软件发版情况。 - -本节用到一个数据集 rversion,记录了历次 R 软件发版时间及版本号,见 @tbl-rversion - -```{r} -#| echo: false -#| label: tbl-rversion -#| tbl-cap: "R 软件发版数据集(部分)" - -knitr::kable(head(rversion), col.names = c("版本号", "发版日期", "发版年份", "发版月份")) -``` - -```{r} -rversion_tl <- within(rversion, { - # 版本号为 x.0.0 为重大版本 big - # 版本号为 x.1.0 x.12.0 x.20.0 为主要版本 major - # 版本号为 x.0.1 为次要版本 minor - status <- ifelse(grepl(pattern = "*\\.0\\.0", x = version), "big", version) - status <- ifelse(grepl(pattern = "*\\.[1-9]{1,2}\\.0$", x = status), "major", status) - status <- ifelse(!status %in% c("big", "major"), "minor", status) -}) -positions <- c(0.5, -0.5, 1.0, -1.0, 1.5, -1.5) -directions <- c(1, -1) -# 位置 -rversion_pos <- data.frame( - # 只要不是同一天发布的版本,方向相对 - date = unique(rversion_tl$date), - position = rep_len(positions, length.out = length(unique(rversion_tl$date))), - direction = rep_len(directions, length.out = length(unique(rversion_tl$date))) -) -# 原始数据上添加方向和位置信息 -rversion_df <- merge(x = rversion_tl, y = rversion_pos, by = "date", all = TRUE) -# 最重要的状态放在最后绘制到图上 -rversion_df <- rversion_df[with(rversion_df, order(date, status)), ] -``` - -选取一小段时间内的发版情况,比如最近的三年 --- 2020 - 2022 年 - -```{r} -# 选取 2020 - 2022 年的数据 -sub_rversion_df<- rversion_df[rversion_df$year %in% 2020:2022, ] -# 月份注释 -month_dat <- data.frame( - date = seq(from = as.Date('2020-01-01'), to = as.Date('2022-12-31'), by = "3 month") -) -month_dat <- within(month_dat, { - month = format(date, "%b") -}) -# 年份注释 -year_dat <- data.frame( - date = seq(from = as.Date('2020-01-01'), to = as.Date('2022-12-31'), by = "1 year") -) -year_dat <- within(year_dat, { - year = format(date, "%Y") -}) -``` - -@fig-rversion-timeline 展示 2020-2022 年 R 软件发版情况 - -```{r} -#| label: fig-rversion-timeline -#| fig-cap: "2020-2022 年 R 软件发版情况" -#| fig-width: 8 -#| fig-height: 4 -#| fig-showtext: true - -ggplot(data = sub_rversion_df) + - geom_segment(aes(x = date, y = 0, xend = date, yend = position)) + - geom_hline(yintercept = 0, color = "black", linewidth = 1) + - geom_label( - aes(x = date, y = position, label = version, color = status), - show.legend = FALSE - ) + - geom_point(aes(x = date, y = 0, color = status), - size = 3, show.legend = FALSE - ) + - geom_text( - data = month_dat, aes(x = date, y = 0, label = month), vjust = 1.5 - ) + - geom_text( - data = year_dat, aes(x = date, y = 0, label = year), vjust = -0.5 - ) + - theme_void() -``` - -图中红色标注的是里程碑式的重大版本,绿色标注的是主要版本,蓝色标注的次要版本,小修小补,小版本更新。 - -当时间跨度非常大时,比如过去 25 年,那就只能放重大版本和主要版本信息了,时间上月份信息就不能用名称简写,而用数字更加合适。而且还得竖着放,同时添加那个版本最有影响力的改动。相比于,棋盘图,这是时间线图的优势。 - -```{r} -#| label: fig-rversion-major -#| fig-cap: "25 年里 R 软件重大及主要版本发布情况" -#| fig-width: 6 -#| fig-height: 8 -#| fig-showtext: true - -sub_rversion_df2 <- rversion_df[rversion_df$status %in% c("big", "major"), ] -ggplot(data = sub_rversion_df2) + - geom_segment(aes(x = 0, y = date, xend = position, yend = date, color = status), - show.legend = F - ) + - geom_vline(xintercept = 0, color = "black", linewidth = 1) + - geom_label( - aes(x = position, y = date, label = version, color = status), - show.legend = FALSE - ) + - geom_point(aes(x = 0, y = date, color = status), size = 3, show.legend = FALSE) + - geom_text( - aes(x = 0, y = as.Date(format(date, "%Y-01-01")), label = year), - hjust = -0.1 - ) + - theme_void() -``` - -在 R 语言诞生的前 5 年里,每年发布 3 个主要版本,这 5 年是 R 软件活跃开发的时期。而 2003-2012 年的这 10 年,基本上每年发布 2 个主要版本。2013-2022 年的这 10 年,基本上每年发布 1 个主要版本。 - -[timevis](https://github.com/daattali/timevis) 包基于 JavaScript 库 [Vis](https://visjs.org/) 的 [vis-timeline](https://github.com/visjs/vis-timeline) 模块,可以 创建交互式的时间线图,支持与 Shiny 应用集成。 - -## 描述对比 {#sec-visualize-data-comparisons} - -数据来自中国国家统计局发布的2021年统计年鉴, - -```{r} -#| label: tbl-china-age-sex -#| tbl-cap: "中国各年龄段的性别比数据(部分)" -#| echo: false - -china_age_sex = readRDS(file = "data/china-age-sex-2020.rds") -knitr::kable(head(china_age_sex)) -``` - -对比的是什么?城市、镇和乡村的性别分布,是否失衡?在哪个年龄段表现很失衡? - -### 柱形图 {#sec-column} - -分年龄段比较城市、镇和乡村的性别比数据 - -```{r} -#| label: fig-column -#| fig-cap: "分年龄段比较城市、镇和乡村的性别比数据" -#| fig-width: 7.5 -#| fig-height: 4.5 -#| fig-showtext: true - -ggplot(data = china_age_sex, aes(x = `年龄`, y = `性别比(女=100)`, fill = `区域`)) + - geom_hline(yintercept = 100, color = "gray", lty = 2, linewidth = 1) + - geom_col(position = "dodge2", width = 0.75) + - theme_bw() -``` - -考虑到数据本身的含义,一般来说,性别比不可能从 0 开始,除非现实中出现了《西游记》里的女儿国。因此,将纵轴的范围,稍加限制,从 性别比为 70 开始,目的是突出城市、镇和乡村的差异。 - -```{r} -#| label: fig-column-better -#| fig-cap: "分年龄段比较城市、镇和乡村的性别比数据" -#| fig-width: 7.5 -#| fig-height: 4.5 -#| fig-showtext: true - -ggplot(data = china_age_sex, aes(x = `年龄`, y = `性别比(女=100)`, fill = `区域`)) + - geom_hline(yintercept = 100, color = "gray", lty = 2, linewidth = 1) + - geom_col(position = "dodge2", width = 0.75) + - coord_cartesian(ylim = c(70, 130)) + - theme_bw() -``` - -### 条形图 {#sec-barchart} - -将柱形图横过来即可得到条形图,横过来的好处主要体现在分类很多的时候,留足空间给年龄分组的分类标签,从左到右,从上往下也十分符合大众的阅读习惯 - -```{r} -#| label: fig-barchart -#| fig-cap: "分年龄段比较城市、镇和乡村的性别比数据" -#| fig-width: 6 -#| fig-height: 5.5 -#| fig-showtext: true - -ggplot(data = china_age_sex, aes(x = `性别比(女=100)`, y = `年龄`, fill = `区域`)) + - geom_vline(xintercept = 100, color = "gray", lty = 2, linewidth = 1) + - geom_col(position = "dodge2", width = 0.75) + - coord_cartesian(xlim = c(70, 130)) + - theme_bw() -``` - -### 点线图 {#sec-cleveland} - -克利夫兰点图 `dotchart()` 在条形图的基础上,省略了条形图的宽度,可以容纳更多的数据点。 - -```{r} -#| label: fig-dotchart -#| fig-cap: "分年龄段比较城市、镇和乡村的性别比数据" -#| fig-width: 5.5 -#| fig-height: 5.5 -#| fig-showtext: true - -ggplot(data = china_age_sex, aes(x = `性别比(女=100)`, y = `年龄`, color = `区域`)) + - geom_vline(xintercept = 100, color = "lightgray", lty = 2, linewidth = 1) + - geom_point() + - theme_bw() -``` - -### 词云图 {#sec-wordcloud} - -[**ggwordcloud**](https://github.com/lepennec/ggwordcloud) 包提供词云图层 `geom_text_wordcloud()` 根据代码提交的说明制作词云图。 - -```{r} -#| label: fig-wordcloud -#| fig-cap: "词云图" -#| fig-width: 7 -#| fig-showtext: true -#| fig-asp: 0.618 -#| fig-dpi: 96 - -library(ggwordcloud) -aggregate(data = svn_trunk_log, revision ~ author, FUN = length) |> - ggplot(aes(label = author, size = revision)) + - geom_text_wordcloud(seed = 2022, grid_size = 10, max_grid_size = 24) + - scale_size_area(max_size = 20) -``` - -词云图也可以是条形图或柱形图的一种替代,词云图不用担心数目多少,而条形图不适合太多的分类情形。 - -```{r} -#| label: fig-trunk-author -#| fig-cap: "开发者提交量排行榜" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -aggregate(data = svn_trunk_log, revision ~ author, FUN = length) |> - subset(subset = revision >= 100) |> - ggplot(aes(x = revision, y = reorder(author, revision))) + - geom_col() + - theme_classic() + - coord_cartesian(expand = FALSE) + - labs(x = "提交量", y = "维护者") -``` - -## 描述占比 {#sec-visualize-data-proportion} - -### 简单饼图 {#sec-naive-pie} - -提交量小于 2000 次的贡献者合并为一类 Others,按贡献者分组统计提交量及其占比,如 @fig-pie 所示。 - -```{r} -#| label: fig-pie -#| fig-cap: "维护者提交量占比" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -aggregate(data = svn_trunk_log, revision ~ author, FUN = length) |> - transform(author2 = ifelse(revision < 2000, "Others", author)) |> - aggregate(revision ~ author2, FUN = sum) |> - transform(label = paste0(round(revision / sum(revision), digits = 4) * 100, "%")) |> - ggplot(aes(x = 1, fill = reorder(author2, revision), y = revision)) + - geom_col(position = "fill", show.legend = FALSE, color = "white") + - scale_y_continuous(labels = scales::label_percent()) + - coord_polar(theta = "y") + - geom_text(aes(x = 1.2, label = author2), - position = position_fill(vjust = 0.5), color = "black" - ) + - geom_text(aes(x = 1.65, label = label), - position = position_fill(vjust = 0.5), color = "black" - ) + - theme_void() + - labs(x = NULL, y = NULL) -``` - -当把提交量小于 1000 次的贡献者合并为 Others,则分类较多,占比小的也有一席之地,饼图上显得十分拥挤。 - -```{r} -#| label: fig-pie-bad -#| fig-cap: "维护者提交量占比" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -aggregate(data = svn_trunk_log, revision ~ author, FUN = length) |> - transform(author2 = ifelse(revision < 1000, "Others", author)) |> - aggregate(revision ~ author2, FUN = sum) |> - transform(label = paste0(round(revision / sum(revision), digits = 4) * 100, "%")) |> - ggplot(aes(x = 1, fill = reorder(author2, revision) , y = revision)) + - geom_col(position = "fill", show.legend = FALSE, color = "white") + - scale_y_continuous(labels = scales::label_percent()) + - coord_polar(theta = "y") + - geom_text(aes(x = 1.2, label = author2), - position = position_fill(vjust = 0.5), color = "black" - ) + - geom_text(aes(x = 1.6, label = label), - position = position_fill(vjust = 0.5), color = "black" - ) + - theme_void() + - labs(x = NULL, y = NULL) -``` - -一种缓解拥挤的办法是通过 ggrepel 包在扇形区域旁边添加注释 - -```{r} -#| label: fig-pie-repel -#| fig-cap: "维护者提交量占比" -#| fig-width: 6.5 -#| fig-height: 5 -#| fig-showtext: true - -library(ggrepel) -dat1 <- aggregate(data = svn_trunk_log, revision ~ author, FUN = length) |> - transform(author2 = ifelse(revision < 1000, "Others", author)) |> - aggregate(revision ~ author2, FUN = sum) - -dat2 <- within(dat1, { - value <- 100 * revision / sum(revision) - csum <- rev(cumsum(rev(value))) - pos <- value / 1.5 + c(csum[-1], NA) - pos <- ifelse(is.na(pos), value / 2, pos) - label <- paste(author2, paste0(round(value, 2), "%"), sep = "\n") -}) - -ggplot(data = dat2, aes(x = 1, fill = author2, y = value)) + - geom_col(show.legend = FALSE, color = "white") + - coord_polar(theta = "y") + - geom_label_repel(aes(y = pos, label = label), - size = 4.5, nudge_x = 0.75, show.legend = FALSE - ) + - theme_void() + - labs(x = NULL, y = NULL) -``` - -但是数量很多的情况下,也是无能为力的,当然,是否需要显示那么多,是否可以合并占比小的部分,也是值得考虑的问题。 - -```{r} -#| echo: false -#| label: tbl-ctb-list -#| tbl-cap: "SVN 日志中的贡献者(部分)" - -# SVN 开发日志中的贡献者名字及其真实姓名(部分) -ctb_info <- tibble::tribble( - ~svn_name, ~ctb_name, ~comment, - "rgentlem", "Robert Gentleman", "R 语言创始人", - "ihaka", "Ross Ihaka", "R 语言创始人", - "ripley", "Brian Ripley", "R Core Team 中的核心", - "murrell", "Paul Murrell", "grid 包及栅格绘图系统", - "maechler", "Martin Maechler", "cluster / Matrix 包维护者", - "hornik", "Kurt Hornik", "R FAQ 和 CRAN 维护者", - "jmc", "John Chambers", "S 语言的创始人之一", - "bates", "Douglas Bates", "nlme / lme4 包核心开发者", - "pd", "Peter Dalgaard", "《统计导论与 R 语言》作者", - "ligges", "Uwe Ligges", "让 BUGS 与 R 同在", - "plummer", "Martyn Plummer", "让 JAGS 与 R 携手", - "luke", "Luke Tierney", "compiler 包核心开发者", - "iacus", "Stefano M. Iacus", "让 CRAN 拥抱 Fedora 系统", - "kalibera", "Tomas Kalibera", "编码问题终结者", - "deepayan", "Deepayan Sarkar", "lattice 包维护者", - "murdoch", "Duncan Murdoch", "R 软件的 Windows 版本维护者", - "duncan", "Duncan Temple Lang", "XML / RCurl 包开发者", - "urbaneks", "Simon Urbanek", "rJava / Rserve 包维护者" -) - -knitr::kable(ctb_info, col.names = c("SVN 花名", "真实名字", "主要贡献")) -``` - -### 环形饼图 {#sec-ring-pie} - -中间空了一块 - -```{r} -#| label: fig-ring-pie -#| fig-cap: "维护者提交量占比" -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -aggregate(data = svn_trunk_log, revision ~ author, FUN = length) |> - transform(author2 = ifelse(revision < 2000, "Others", author)) |> - aggregate(revision ~ author2, FUN = sum) |> - transform(label = paste0(round(revision / sum(revision), digits = 4) * 100, "%")) |> - ggplot(aes(x = 1, fill = author2, y = revision)) + - geom_col(position = "fill", show.legend = FALSE, color = "white") + - scale_y_continuous(labels = scales::label_percent()) + - coord_polar(theta = "y") + - geom_text(aes(x = 1.2, label = author2), - position = position_fill(vjust = 0.5), color = "black" - ) + - geom_text(aes(x = 1.7, label = label), - position = position_fill(vjust = 0.5), color = "black" - ) + - theme_void() + - labs(x = NULL, y = NULL) + - xlim(c(0.2, 1.7)) -``` - -### 扇形饼图 {#sec-sector-pie} - -扇形饼图又叫风玫瑰图或南丁格尔图 - -```{r} -#| label: fig-wind-rose -#| fig-cap: "维护者提交量分布" -#| fig-width: 5 -#| fig-height: 4.5 -#| fig-showtext: true - -aggregate(data = svn_trunk_log, revision ~ author, FUN = length) |> - transform(author2 = ifelse(revision < 2000, "Others", author)) |> - aggregate(revision ~ author2, FUN = sum) |> - ggplot(aes(x = reorder(author2, revision), y = revision)) + - geom_col(aes(fill = author2), show.legend = FALSE) + - coord_polar() + - theme_minimal() + - theme(axis.text.y = element_blank()) + - labs(x = NULL, y = NULL) -``` - -### 帕累托图 {#sec-pareto} - -```{=html} - -``` -除了饼图,还常用堆积柱形图描述各个部分的数量,柱形图的优势在于简洁,准确,兼顾对比和趋势。下 @fig-pareto-stack 描述各年开发者们的贡献量及其变化趋势,饼图无法表达数量的变化趋势。 - -```{r} -#| label: fig-pareto-stack -#| fig-cap: "代码提交量的比例趋势" -#| fig-showtext: true -#| fig-width: 7 -#| fig-height: 5 - -aggregate(data = svn_trunk_log, revision ~ year + author, FUN = length) |> - ggplot(aes(x = year, y = revision, fill = author)) + - geom_col() + - theme_classic() + - coord_cartesian(expand = FALSE) + - theme(legend.position = "bottom") + - labs(x = "年份", y = "提交量", fill = "开发者") -``` - -百分比堆积柱形图在数量堆积柱形图的基础上,将纵坐标的数量转化为百分比,下 @fig-pareto-fill 展示各年开发者代码提交比例的变化趋势。 - -```{r} -#| label: fig-pareto-fill -#| fig-cap: "代码提交量的比例趋势" -#| fig-showtext: true -#| fig-width: 7 -#| fig-height: 5 - -aggregate(data = svn_trunk_log, revision ~ year + author, FUN = length) |> - ggplot(aes(x = year, y = revision, fill = author)) + - geom_col(position = "fill") + - scale_y_continuous(labels = scales::label_percent()) + - theme_classic() + - coord_cartesian(expand = FALSE) + - theme(legend.position = "bottom") + - labs(x = "年份", y = "提交量", fill = "开发者") -``` - -帕累托图描述各个部分的占比,特别是突出关键要素的占比。收入常服从帕累托分布,这是一个幂率分布,比如 80% 的财富集中在 20% 的人的手中。下 @fig-pareto 展示过去 25 年各位开发者的代码累计提交量,提交量小于 1000 的已经合并为一类。不难看出,Ripley 的提交量远高于其他开发者。 - -```{r} -#| label: fig-pareto -#| fig-cap: "代码提交量的比例分布" -#| fig-showtext: true - -dat <- aggregate(data = svn_trunk_log, revision ~ author, FUN = length) |> - transform(author = ifelse(revision < 1000, "Others", author)) |> - aggregate(revision ~ author, FUN = sum) -dat <- dat[order(-dat$revision), ] - -ggplot(data = dat, aes(x = reorder(author, revision, decreasing = T), y = revision)) + - geom_col(width = 0.75) + - geom_line(aes(y = cumsum(revision), group = 1)) + - geom_point(aes(y = cumsum(revision))) + - theme_classic() + - theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + - labs(x = "维护者", y = "累计提交量") -``` - -### 马赛克图 {#sec-mosic} - -马赛克图常用于展示多个分类数据,如 @fig-mosaic 所示,展示加州伯克利分校院系录取情况。 - -```{r} -#| label: fig-mosaic -#| fig-cap: "加州伯克利分校院系录取情况" -#| fig-width: 7 -#| fig-height: 5 -#| fig-showtext: true -#| warning: false - -library(ggmosaic) -ggplot(data = as.data.frame(UCBAdmissions)) + - geom_mosaic(aes(x = product(Dept, Gender), weight = Freq, fill = Admit)) + - theme_minimal() -``` - -::: callout-tip -Base R 提供函数 `plot()` 和 `mosaicplot()` 对 `table` 表格类型的数据可视化,提供一套公式绘图语法,可以绘制类似的马赛克图。 - -```{r} -#| label: fig-mosaic-base -#| fig-width: 7 -#| fig-height: 5 -#| fig-cap: "加州伯克利分校院系录取情况" -#| fig-showtext: true -#| echo: true -#| par: true -#| eval: false - -mosaicplot(~ Gender + Dept + Admit, - data = UCBAdmissions, color = TRUE, - main = "", xlab = "性别", ylab = "院系" -) -``` - -对于多维列联表数据,Base R 提供函数 `loglin()` 拟合对数线性模型,以获取更加定量的结果。更进一步,**MASS** 包在函数 `loglin()` 的基础上,打包了另一个函数 `loglm()` ,它提供与函数 `lm()` 和 `glm()` 相一致的公式语法,使用起来更加方便。当然,函数 `glm()` 本身也是可以拟合对数线性模型的,毕竟它也是一种特殊的广义线性模型。 -::: - -### 矩阵树图 {#sec-treemap} - -矩阵树图展示有层次的占比,比如 G20 国家的 GDP 按半球、地域分组。**treemapify** 包专门绘制矩阵树图,下 @fig-treemap 展示南北半球,各地域内各个国家 GDP 的占比。 - -```{r} -#| eval: true -#| echo: false -#| label: tbl-g20 -#| tbl-cap: "G20 国家经济水平:GDP 总量、人类发展指数等" - -library(treemapify) -data("G20") -knitr::kable(head(G20), col.names = c( - "区域", "国家", "GDP", - "人类发展指数", "经济水平", "所属半球" -)) -``` - -每个瓦片的大小代表国家的 GDP 在所属半球里的比重。 - -```{r} -#| label: fig-treemap -#| fig-cap: "G20 主要经济体的 GDP 占比" -#| fig-width: 7 -#| fig-height: 6 -#| fig-showtext: true - -ggplot(G20, aes(area = gdp_mil_usd, fill = region, label = country, subgroup = region)) + - geom_treemap() + - geom_treemap_text(grow = T, reflow = T, colour = "black") + - facet_wrap(~hemisphere) + - scale_fill_brewer(palette = "Set1") + - theme(legend.position = "bottom") + - labs(title = "G20 主要经济体", fill = "区域") -``` - -### 量表图 {#sec-likert-scale} - -展示调查研究中的用户态度。量表在市场调查,问卷调查,App 用户体验反馈等方面应用十分广泛,已经成为调查研究中的金标准。量表由心理学家 Rensis Likert 于 1932 年提出 [@Likert1932],[Likert Scale](https://en.wikipedia.org/wiki/Likert_scale) 就是以他的名字命名的。 - -量表在互联网产品中应用非常广泛,比如美团App里消息页面中的反馈框,用以收集用户使用产品的体验情况,如 @tbl-info-feedback 所示,从极其困难到极其方便,将用户反馈分成7个等级,目的是收集用户的反馈,以期改善产品的体验。 - -| 1 | 2 | 3 | 4 | 5 | 6 | 7 | -|:---------|:---------|:---------|:-----|:---------|:---------|:---------| -| 极其困难 | 非常困难 | 比较困难 | 一般 | 比较方便 | 非常方便 | 极其方便 | - -: 您觉得在本页面,找想看的消息方便吗? {#tbl-info-feedback} - -量表中的问题、观点的描述极其简单明了,对回答、表明态度的任何人都不会造成歧义,以确保不受文化差异、学历差异等的影响,受调查的人只需在待选的几个选项中圈选即可。候选项一般为 5-7 个,下面是一组典型的选项: - -1. Strongly disagree (强烈反对), -2. Disagree(反对), -3. Neither agree nor disagree(中立), -4. Agree(同意), -5. Strongly agree(强烈同意)。 - -Jason M. Bryer 开发了一个 R 包 [**likert**](https://github.com/jbryer/likert),特别适合调查研究数据可视化,将研究对象的态度以直观有效的方式展示出来,内置多个数据集,其中 @tbl-math-anxiety 是一个数学焦虑量表调查的结果,调查数据来自统计课上的 20 个学生。 - -调查对象是 78 个来自不同学科的本科生,样本含有 36 个男性和 42 个女性,64% 的样本的年龄在 18 至 24 岁,36% 的样本年龄 25 岁及以上。更多数据背景信息 [@Bai2009]。 - -| 观点 | 强烈反对 | 反对 | 中立 | 同意 | 强烈同意 | -|:-----------------------|---------:|---------:|---------:|---------:|---------:| -| I find math interesting. | 10 | 15 | 10 | 35 | 30 | -| I get uptight during math tests. | 10 | 20 | 20 | 25 | 25 | -| I think that I will use math in the future. | 0 | 0 | 20 | 25 | 55 | -| Mind goes blank and I am unable to think clearly when doing my math test. | 30 | 30 | 15 | 10 | 15 | -| Math relates to my life. | 5 | 20 | 10 | 40 | 25 | -| I worry about my ability to solve math problems. | 20 | 20 | 20 | 30 | 10 | -| I get a sinking feeling when I try to do math problems. | 35 | 10 | 15 | 35 | 5 | -| I find math challenging. | 5 | 10 | 15 | 45 | 25 | -| Mathematics makes me feel nervous. | 20 | 25 | 15 | 25 | 15 | -| I would like to take more math classes. | 20 | 25 | 30 | 20 | 5 | -| Mathematics makes me feel uneasy. | 25 | 15 | 20 | 25 | 15 | -| Math is one of my favorite subjects. | 35 | 15 | 25 | 20 | 5 | -| I enjoy learning with mathematics. | 15 | 25 | 30 | 20 | 10 | -| Mathematics makes me feel confused. | 15 | 20 | 15 | 35 | 15 | - -: 你对数学感到焦虑吗? {#tbl-math-anxiety tbl-colwidths="\[40,15,10,10,10,15\]"} - -相比于 **ggplot2** 绘制的普通条形图, @fig-likert-scale 有一些独特之处:对立型的渐变色表示两个不同方向的态度,左右两侧以中立态度为中间位置,非常形象,并且按照其中一个方向的态度数据排序,显得比较整齐有序,便于理解。 - -```{r} -#| label: fig-likert-scale -#| fig-cap: 你喜欢数学吗 -#| fig-width: 8.5 -#| fig-height: 5 -#| fig-showtext: true - -# 数据来自 likert 包 -MathAnxiety <- readRDS(file = "data/MathAnxiety.rds") -# 宽转长格式 -MathAnxiety_df <- reshape(data = MathAnxiety, - varying = c("Strongly Disagree", "Disagree", "Neutral", "Agree", "Strongly Agree"), - times = c("Strongly Disagree", "Disagree", "Neutral", "Agree", "Strongly Agree"), - timevar = "Attitude", v.names = "Numbers", idvar = "Item", - new.row.names = 1:(5 * 14), direction = "long" - ) - -MathAnxiety_df$Attitude <- factor(MathAnxiety_df$Attitude, levels = c( - "Strongly Agree", "Agree", "Neutral", "Disagree", "Strongly Disagree" -), labels = c( - "强烈同意", "同意", "中立", "反对", "强烈反对" -), ordered = TRUE) - -ggplot(data = MathAnxiety_df, aes(x = Numbers, y = Item)) + - geom_col(aes(fill = Attitude), position = "fill") + - scale_x_continuous(labels = scales::label_percent()) + - scale_y_discrete(labels = scales::label_wrap(25)) + - scale_fill_brewer(palette = "BrBG", direction = -1) + - theme_classic() + - guides(fill = guide_legend(reverse = TRUE)) + - coord_cartesian(expand = FALSE) + - labs(x = "占比", y = "问题", fill = "态度") -``` - -[**likert**](http://github.com/jbryer/likert) 包的函数 `likert()` 适合对聚合的调查数据绘图。 - -```{r} -#| label: fig-likert-math -#| fig-width: 7 -#| fig-height: 5 -#| eval: false -#| echo: true -#| fig-cap: Likert 图 - -library(likert) -lmath <- likert(summary = MathAnxiety) -plot(lmath) -``` - -而 [**ggstats**](https://github.com/larmarange/ggstats/) 包的函数 `gglikert()` 适合对明细的调查数据绘图。下面模拟一次调查收集到的数据,共计 150 人回答 6 个问题,每个问题都有 5 个候选项构成。 - -```{r} -library(ggstats) -likert_levels <- c("强烈反对", "反对", "中立", "同意", "强烈同意") -set.seed(2023) -library(data.table) -df <- data.table( - q1 = sample(likert_levels, 150, replace = TRUE), - q2 = sample(likert_levels, 150, replace = TRUE, prob = 5:1), - q3 = sample(likert_levels, 150, replace = TRUE, prob = 1:5), - q4 = sample(likert_levels, 150, replace = TRUE, prob = 1:5), - q5 = sample(c(likert_levels, NA), 150, replace = TRUE), - q6 = sample(likert_levels, 150, replace = TRUE, prob = c(1, 0, 1, 1, 0)) -) -fkt <- paste0("q", 1:6) -df[, (fkt) := lapply(.SD, factor, levels = likert_levels), .SDcols = fkt] -``` - -一个调查问卷共有 6 个题目,150 个人对 6 个问题的回答构成一个数据框 `df` 。 - -```{r} -#| label: fig-likert-fake -#| fig-cap: Likert 图 -#| fig-width: 5 -#| fig-height: 4 -#| fig-showtext: true - -gglikert(df) -``` - -## 习题 {#sec-visualization-intermediate-exercise} - -1. 根据 Github 代码提交量数据制作日历图。 - - ```{r} - #| label: fig-github-profile - #| fig-cap: Github 打卡日历图 - #| fig-width: 8 - #| fig-height: 4 - #| fig-showtext: true - #| echo: !expr knitr::is_html_output() - - github_ctb <- jsonlite::read_json(path = "data/contributions.json") - github_df <- data.frame( - date = unlist(lapply(github_ctb$contributions, "[[", "date")), - count = unlist(lapply(github_ctb$contributions, "[[", "count")), - color = unlist(lapply(github_ctb$contributions, "[[", "color")), - intensity = unlist(lapply(github_ctb$contributions, "[[", "intensity")) - ) - week.abb <- c("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") - github_df <- within(github_df, { - date <- as.Date(date) - year <- format(date, format = "%Y", tz = "UTC") - month <- format(date, format = "%m", tz = "UTC") - week <- format(date, format = "%U", tz = "UTC") - wday <- format(date, format = "%a", tz = "UTC") - nday <- format(date, format = "%j", tz = "UTC") - week <- as.integer(week) - wday <- factor(wday, labels = week.abb) - }) - ggplot( - data = subset(github_df, subset = year %in% 2020:2022), - aes(x = week, y = wday, fill = count) - ) + - geom_tile(color = "white", linewidth = 0.5) + - scale_fill_distiller(palette = "Greens", direction = 1) + - scale_x_continuous( - expand = c(0, 0), breaks = seq(1, 52, length = 12), labels = month.abb - ) + - facet_wrap(~year, ncol = 1) + - theme_minimal() + - labs(x = "月份", y = "星期", fill = "提交量") - ``` diff --git a/visualization-lattice.qmd b/visualization-lattice.qmd deleted file mode 100644 index 563cb345..00000000 --- a/visualization-lattice.qmd +++ /dev/null @@ -1,843 +0,0 @@ -# lattice 入门 {#sec-basic-lattice} - -```{r} -#| echo: false - -source("_common.R") -``` - -> If you imagine that this pen is Trellis, then Lattice is not this pen. -> -> --- Paul Murrell [^visualization-lattice-1] - -[^visualization-lattice-1]: Paul 在 DSC 2001 大会上的[幻灯片](https://www.stat.auckland.ac.nz/~paul/Talks/dsc2001.pdf)。 - -**lattice** 最初是受到商业统计软件 S/S-Plus 中的 Trellis 组件启发,打算在 R 软件中重新实现一套新的绘图系统,在使用接口上保持与 Trellis 兼容,Trellis 使用文档也同样适用于 **lattice**。 - -本章主要介绍 **lattice** 包 [@Deepayan2008] 及其相关的 **latticeExtra** 包。 - -```{r} -#| message: false - -library(lattice) -library(latticeExtra) -library(splines) -library(nlme) -library(mgcv) -library(maps) -library(sf) -library(RColorBrewer) -``` - -## 分组散点图 {#sec-lattice-xyplot} - -函数 `xyplot()` 在 lattice 包中非常具有代表性,掌握此函数的作图规律,其它函数学起来也就不难了。分组散点图是一个非常常见的、用来描述变量之间关系的图形,下面就以绘制一个分组散点图来介绍函数 `xyplot()` 的用法。 - -```{r} -#| label: fig-lattice-xyplot-1 -#| fig-width: 4.5 -#| fig-height: 4 -#| fig-showtext: true -#| fig-cap: 分组散点图 - -library(lattice) -xyplot( - x = Sepal.Length ~ Petal.Length, groups = Species, scales = "free", - data = iris, grid = TRUE, xlab = "萼片长度", ylab = "花瓣长度", - auto.key = list(space = "top", columns = 3) -) -``` - -- 参数 `x` 需要传递 R 语言中的表达式,这是一种被广泛使用的公式语法,示例中为 `Sepal.Length ~ Petal.Length` ,表示横坐标为 `Petal.Length`, 纵坐标为 `Sepal.Length` 。 -- 参数 `groups` 指定分组变量,此处为 `Species` 变量,表示鸢尾花种类。 -- 参数 `scales` 设置坐标轴刻度, `scales = "free"` 表示去掉边框上面和右面的刻度线。 -- 参数 `data` 指定绘图数据,此处为 `iris` 数据集。 -- 参数 `grid` 控制是否添加背景网格线,此处为 `TRUE` 表示添加背景网格线。 -- 参数 `xlab` 和参数 `ylab` 分别指定横、纵坐标轴标签。 -- 参数 `auto.key` 设置图例,示例中设置 `space = "top"` 将图例置于图形上方,设置 `columns = 3` 使条目排成 3 列,此外,设置 `reverse.rows = TRUE` 还可以使图例中的条目顺序反向。 - -除了通过 `space` 参数设置图例的位置,还可以通过坐标设置图例的位置,比如下 @fig-lattice-xyplot-key-2 中设置图例的位置坐标为 `x = 1, y = 0` 使得图例位于图的右下角。图例坐标的参考点是原点 `x = 0, y = 0` 就是左下角的位置,而右上角的位置为 `x = 1, y = 1` 。 - -```{r} -#| label: fig-lattice-xyplot-key -#| fig-width: 5.5 -#| fig-height: 4 -#| layout-ncol: 1 -#| fig-showtext: true -#| fig-cap: 调整图例位置 -#| fig-subcap: -#| - 图例位于图右侧 -#| - 图例位于内内部 - -xyplot( - Sepal.Length ~ Petal.Length, groups = Species, data = iris, - scales = "free", grid = TRUE, xlab = "萼片长度", ylab = "花瓣长度", - auto.key = list(space = "right", columns = 1) -) -xyplot( - Sepal.Length ~ Petal.Length, groups = Species, data = iris, - scales = "free", grid = TRUE, xlab = "萼片长度", ylab = "花瓣长度", - auto.key = list(corner = c(1, 0)) -) -``` - -除了上面介绍的几个参数,还有许多其它参数,其中一部分会在后续介绍其它种类的图形时顺带介绍,剩余的部分请感兴趣的读者查看函数 `xyplot()` 的帮助文档。 - -## 图形参数 {#sec-lattice-par} - -类似 Base R 绘图系统中的图形参数设置函数 `par()`和 **ggplot2** 包中的主题设置函数 `theme()`, **lattice** 包也有图形参数设置函数 `trellis.par.set()` ,而图形参数查询函数为 `trellis.par.get()` 。可设置的图形参数非常多,仅常用的也不少。首先来看看有哪些图形参数可以设置。 - -```{r} -tp <- trellis.par.get() -names(tp) -``` - -可以看到,图形参数着实非常多,知道了这么多图形参数,而每个参数又有哪些选项可取呢?不忙,再看看图形参数的结构,比如 `superpose.symbol` 。 - -```{r} -tp$superpose.symbol -``` - -这是一个列表,有 6 个元素,每个元素设置符号的不同属性,依次是透明度 `alpha`、大小 `cex`、颜色 `col`、填充色 `fill`、字型 `font` 和类型 `pch` ,这些属性的含义与函数 `par()` 是一致的。下 @fig-lattice-par 展示所有的常用图形参数及其可设置的选项。 - -```{r} -#| label: fig-lattice-par -#| fig-cap: 常用图形参数 -#| fig-width: 6 -#| fig-height: 8 -#| echo: false -#| fig-showtext: true - -# 修改自帮助文档 ?trellis.par.get() -tp <- trellis.par.get() -# 去掉不常用的参数设置选项 -unusual <- c( - "grid.pars", "fontsize", "clip", "axis.components", - "layout.heights", "layout.widths" -) -tp[names(tp) %in% unusual] <- NULL -# 抽取 pars 中的参数名称 -extract_names <- function(name, pars) { - expand.grid(x = name, y = names(`[[`(pars, name)), z1 = 1) -} -# 抽取结果保存为 data.frame -dat1 <- do.call("rbind", lapply(names(tp), FUN = extract_names, pars = tp)) -# 初始化数据框 -dat2 <- data.frame( - expand.grid(x = levels(dat1$x), y = levels(dat1$y)), - z2 = 0 -) -# 填充数据框 -dat <- merge(x = dat2, y = dat1, by = c("x", "y"), all.x = T) -dat <- within(dat, { - z <- z1 | z2 -}) - -# 绘图 -levelplot(z ~ y * x, - data = dat, scales = list( - draw = T, - # 去掉图形上边、右边多余的刻度线 - x = list(rot = 45, alternating = 1, tck = c(1, 0)), - y = list(alternating = 1, tck = c(1, 0)) - ), - xlab = "参数值名称", ylab = "图形参数", colorkey = FALSE, - panel = function(x, y, z, ...) { - panel.abline( - v = unique(as.numeric(x)), - h = unique(as.numeric(y)), - col = "grey" - ) - panel.xyplot(x, y, pch = 16 * z, ...) - } -) -``` - -现在,知道了图形设置参数及其结构,还需要知道它们究竟在绘图时起什么作用,也就是说它们控制图形中的哪部分元素及效果。下 @fig-lattice-settings 展示 **lattice** 包图形参数效果。由图可知,图形参数 `superpose.symbol` 是控制散点图中的点,点可以是普通的点,也可以是任意的字母符号。 - -```{r} -#| label: fig-lattice-settings -#| fig-cap: 图形参数效果预览 -#| echo: false -#| fig-width: 6.5 -#| fig-height: 6.5 -#| fig-showtext: true - -show.settings(x = trellis.par.set(list( - axis.text = list(fontfamily = "sans"), # 轴标签字体 - add.text = list(fontfamily = "mono"), # 注释文本字体 - par.main.text = list(fontfamily = "sans"), # 主标题字体 - par.sub.text = list(fontfamily = "serif") # 副标题字体 -))) -``` - -在之前的 @fig-lattice-xyplot-1 的基础上,设置 `type = c("p", "r")` 添加回归线。通过图形参数 `par.settings` 设置各类绘图元素的符号类型和大小,该参数接受一个列表类型的数据,列表的元素还是列表,列表的层层嵌套实现图中元素的精细控制。列表元素 `superpose.symbol` 控制点的符号,`pch = 16` 设置为 16,相比于默认的点要大一号。列表元素 `superpose.line` 控制线,`lwd = 2` 设置宽度为 2,比默认的宽度大一倍,`lty = 3` 设置线的类型为 3,表示虚线。通过参数 `auto.key` 设置图例位置,图例位于图形上方,图例中的条目排成3列。 - -```{r} -#| label: fig-lattice-xyplot-2 -#| fig-width: 5.5 -#| fig-height: 4.5 -#| fig-showtext: true -#| fig-cap: 调整点、线、图例元素 - -xyplot( - Sepal.Length ~ Petal.Length, groups = Species, data = iris, - scales = "free", grid = TRUE, type = c("p", "r"), - xlab = "萼片长度", ylab = "花瓣长度", - auto.key = list(columns = 3, space = "top"), - par.settings = list( - superpose.symbol = list(pch = 16), - superpose.line = list(lwd = 2, lty = 3) - ) -) -``` - -**latticeExtra** 包有两个函数专门用来设置图形风格,分别是 `theEconomist.theme()` 和 `ggplot2like()` ,这两个主题函数提供一系列预设的图形参数,前者来自《经济学人》杂志的图形主题,后者来自 **ggplot2** 包的默认绘图主题。 - -```{r} -#| label: fig-lattice-extra-themes -#| fig-width: 5.5 -#| fig-height: 4 -#| fig-showtext: true -#| fig-cap: latticeExtra 内置的两个主题 -#| layout-ncol: 1 -#| fig-subcap: -#| - ggplot2 包默认的绘图主题 -#| - 《经济学人》杂志的绘图主题 - -library(latticeExtra) -xyplot( - Sepal.Length ~ Petal.Length, groups = Species, data = iris, - scales = "free", grid = TRUE, xlab = "萼片长度", ylab = "花瓣长度", - auto.key = list(space = "top", columns = 3), - par.settings = ggplot2like() -) -xyplot( - Sepal.Length ~ Petal.Length, groups = Species, data = iris, - scales = "free", grid = TRUE, xlab = "萼片长度", ylab = "花瓣长度", - auto.key = list(space = "top", columns = 3), - par.settings = theEconomist.theme(with.bg = TRUE, box = "transparent") -) -``` - -```{r} -#| eval: false -#| echo: false -# 等价的 ggplot2 表示 -library(ggplot2) -ggplot(data = iris, aes(x = Sepal.Length, y = Petal.Length)) + - geom_point(aes(color = Species)) + - scale_color_brewer(palette = "Set1", name = "") + - theme(legend.position = "top") -``` - -## 常见图形 {#sec-common-lattice} - -### 分组柱形图 {#sec-lattice-barchart} - -本节所用数据集 `Insurance` 来自 **MASS** 包,记录一家保险公司面临风险的投保人数量,以及在 1973 年第 3 季度他们提出汽车理赔的数量。数据类型、各个变量的类型及部分预览数据如下: - -```{r} -data(Insurance, package = "MASS") -str(Insurance) -``` - -其中,District 表示投保人居住的地区,因子型变量。Group 汽车按油箱大小分组的变量,有序的因子型变量。Age 投保人的年龄段标签,有序的因子型变量。Holders 投保人数量,整型变量。Claims 理赔数量,整型变量。下 @fig-lattice-barchart 先按投保人的汽车类型分面,再按投保人所在地区分组,展示理赔频度与投保人年龄的关系。 - -```{r} -#| label: fig-lattice-barchart -#| fig-width: 6 -#| fig-height: 6 -#| fig-cap: 分组柱形图 -#| fig-showtext: true - -barchart( - Claims / Holders ~ Age | Group, groups = District, - data = Insurance, xlab = "年龄段", ylab = "理赔频度", - auto.key = list(space = "top", columns = 4, title = "地区", cex.title = 1) -) -``` - -函数 `barchart()` 中的公式 `Claims / Holders ~ Age | Group` ,斜杠 `/` 表示除法,波浪线 `~` 表示响应变量与自变量的分界,竖线 `|` 表示分面。 - -### 分组箱线图 {#sec-lattice-boxplot} - -```{r} -#| label: fig-lattice-bwplot -#| fig-width: 4.5 -#| fig-height: 4 -#| fig-cap: 分组箱线图 -#| fig-showtext: true - -bwplot(Petal.Length ~ Species, data = iris, scales = "free", - xlab = "鸢尾花种类", ylab = "花瓣长度") -``` - -### 经验分布图 {#sec-lattice-step} - -用阶梯图表示累积经验分布图,纵轴表示累积概率,不同种类的鸢尾花,花瓣长度的分布明显不同。根据 Glivenko--Cantelli 定理,经验分布函数以概率 1 收敛至累积分布函数。 - -```{r} -#| label: fig-lattice-ecdfplot -#| fig-showtext: true -#| fig-cap: 经验分布图 -#| fig-width: 6 -#| fig-height: 4 - -library(latticeExtra) -ecdfplot(~ Petal.Length | Species, data = iris, scales = "free", - xlab = "花瓣长度", ylab = "累积概率") -``` - -### 回归曲线图 {#sec-lattice-smoother} - -- **splines** 自然立方样条 `ns()` -- **mgcv** 广义可加模型 `s()` - -```{r} -#| label: fig-lattice-colours -#| fig-width: 3 -#| fig-height: 3 -#| fig-cap: 调色板 -#| fig-showtext: true -#| echo: false - -scales::show_col(colours = c("#4285f4", "#34A853", "#FBBC05", "#EA4335")) -``` - -@fig-lattice-smoother 中用不同的回归模型拟合数据中的趋势。1920s 汽车行驶距离和速度的关系图。函数 `panel.smoother()` 来自 **latticeExtra** 包 - -```{r} -#| label: fig-lattice-smoother -#| fig-width: 4.5 -#| fig-height: 4 -#| layout-ncol: 2 -#| layout-nrow: 2 -#| fig-cap: 回归曲线图 -#| fig-subcap: -#| - 线性回归 -#| - 局部多项式回归 -#| - 自然样条回归 -#| - 广义可加回归 -#| fig-showtext: true -#| message: false - -library(splines) -library(nlme) -library(mgcv) -xyplot(dist ~ speed, - data = cars, scales = "free", xlab = "速度", ylab = "距离", - panel = function(x, y, ...) { - panel.xyplot(x, y, ...) - panel.smoother(y ~ x, - col.line = "#EA4335", method = "lm", ... - ) - } -) -xyplot(dist ~ speed, - data = cars, scales = "free", xlab = "速度", ylab = "距离", - panel = function(x, y, ...) { - panel.xyplot(x, y, ...) - panel.smoother(y ~ x, - col.line = "#4285f4", method = "loess", span = 0.9, ... - ) - } -) -xyplot(dist ~ speed, - data = cars, scales = "free", xlab = "速度", ylab = "距离", - panel = function(x, y, ...) { - panel.xyplot(x, y, ...) - panel.smoother(y ~ ns(x, 5), - col.line = "#34A853", method = "lm", ... - ) - } -) -xyplot(dist ~ speed, - data = cars, scales = "free", xlab = "速度", ylab = "距离", - panel = function(x, y, ...) { - panel.xyplot(x, y, ...) - panel.smoother(y ~ s(x), - col.line = "#FBBC05", method = "gam", ... - ) - } -) -``` - -### 置信区间图 {#sec-lattice-segplot} - -各个郡县每 10 万人当中因癌症死亡的人数。`USCancerRates` 数据集来自 **latticeExtra** 包,记录各个郡县的癌症死亡率及其置信区间,下图展示新泽西州各个郡县的癌症死亡率及其置信区间。 - -```{r} -#| label: fig-lattice-segplot -#| fig-width: 6 -#| fig-height: 5 -#| fig-cap: 置信区间图 -#| fig-showtext: true - -segplot(reorder(county, rate.male) ~ LCL95.male + UCL95.male, - data = subset(USCancerRates, state == "New Jersey"), - draw.bands = FALSE, centers = rate.male, - scales = list(x = list(alternating = 1, tck = c(1, 0))), - xlab = "癌症死亡率", ylab = "郡县" -) -``` - -### 置信椭圆图 {#sec-lattice-ellipse} - -**latticeExtra** 包的函数 `panel.ellipse()` 可以绘制置信椭圆。二维数据,置信水平为 0.95 时,置信椭圆。 - -```{r} -#| label: fig-lattice-ellipse -#| fig-width: 4.5 -#| fig-height: 4 -#| fig-showtext: true -#| fig-cap: 分组置信椭圆图 - -xyplot(Sepal.Length ~ Petal.Length, - groups = Species, data = iris, scales = "free", - xlab = "萼片长度", ylab = "花瓣长度", - par.settings = list( - superpose.symbol = list(pch = 16), - superpose.line = list(lwd = 2, lty = 3) - ), - panel = function(x, y, ...) { - panel.xyplot(x, y, ...) - panel.ellipse(x, y, level = 0.85, ...) - }, - auto.key = list(space = "top", columns = 3) -) -``` - -### 切片水平图 {#sec-lattice-facet} - -按照深度降序排列,根据震级 mag 划分 4 个区间,每个区间内数据点的数量比较平衡,相邻区间之间有重叠部分。对数据进行切片,观察连续的切片数据,增加一个维度。 - -对震深排序的目的是让数据点按照一定的顺序绘制在图上,数据点相距较近容易互相覆盖。使得在二维平面上,通过对数据点的染色,也能体现地震深度在空间中的层次变化。 - -不同的震级下,地震深度在空间中的变化是一致的。 - -```{r} -# 震级区间 -quakes$Magnitude <- equal.count(quakes$mag, number = 4) -# 震深 -depth.ord <- rev(order(quakes$depth)) -quakes.ordered <- quakes[depth.ord, ] -``` - -``` -Intervals: - min max count -1 3.95 4.55 484 -2 4.25 4.75 492 -3 4.45 4.95 425 -4 4.65 6.45 415 - -Overlap between adjacent intervals: -[1] 293 306 217 -``` - -函数 `equal.count()` 内部调用函数 `co.intervals()` ,还有两个参数 `number` 和 `overlap`。如果要没有重叠的话,得设置 `overlap = 0` 。 - -```{r} -#| eval: false - -quakes$Magnitude <- equal.count(quakes$mag, number = 4, overlap = 0) -``` - -```{r} -#| label: fig-lattice-levelplot -#| fig-cap: 分面水平图 -#| fig-width: 6.5 -#| fig-height: 6 -#| fig-showtext: true - -levelplot(depth ~ long + lat | Magnitude, - data = quakes.ordered, scales = "free", - panel = panel.levelplot.points, - prepanel = prepanel.default.xyplot, - type = c("p", "g"), layout = c(2, 2) -) -``` - -### 三维散点图 {#sec-lattice-cloud} - -**lattice** 包的函数 `cloud()` 三维散点图 - -```{r} -#| label: fig-lattice-cloud -#| fig-cap: 三维散点图 -#| fig-width: 4.5 -#| fig-height: 4.5 -#| fig-showtext: true - -cloud(Sepal.Length ~ Sepal.Width + Petal.Length, - groups = Species, data = iris, - # 去掉方向箭头 - scales = list(arrows = FALSE, col = "black"), - xlab = list("萼片宽度", rot = 30), - ylab = list("花瓣长度", rot = -35), - zlab = list("萼片长度", rot = 90), - # 减少三维图形的边空 - lattice.options = list( - layout.widths = list( - left.padding = list(x = -0.5, units = "inches"), - right.padding = list(x = -1.0, units = "inches") - ), - layout.heights = list( - bottom.padding = list(x = -1.5, units = "inches"), - top.padding = list(x = -1.5, units = "inches") - ) - ), - par.settings = list( - # 点的类型 - superpose.symbol = list(pch = 16), - # 去掉外框线 - axis.line = list(col = "transparent") - ) -) -``` - -下面是一个示例,自定义面板函数 `panel.3d.cloud` 。 - -::: callout-note -图底部的网格待改进,生成网格线的代码太死板。 -::: - -```{r} -#| label: fig-lattice-rongelap -#| fig-cap: 添加三维网格参考线和透视曲线 -#| fig-showtext: true -#| fig-width: 5.2 -#| fig-height: 3.5 - -# 加载数据 -rongelap <- readRDS(file = "data/rongelap.rds") -rongelap_coastline <- readRDS(file = "data/rongelap_coastline.rds") - -library(lattice) -# 参考 lattice 书籍的图 6.5 的绘图代码 -panel.3dcoastline <- function(..., rot.mat, distance, xlim, ylim, zlim, - xlim.scaled, ylim.scaled, zlim.scaled) { - scale.vals <- function(x, original, scaled) { - scaled[1] + (x - original[1]) * diff(scaled) / diff(original) - } - scaled.map <- rbind( - scale.vals(rongelap_coastline$cX, xlim, xlim.scaled), - scale.vals(rongelap_coastline$cY, ylim, ylim.scaled), - zlim.scaled[1] - ) - m <- ltransform3dto3d(scaled.map, rot.mat, distance) - panel.lines(m[1, ], m[2, ], col = "black") -} - -rongelap_grid_line <- rbind.data.frame( - data.frame(x = 1000 * -6:0, y = -3500), - data.frame(x = 1000 * 0:-6, y = -3000), - data.frame(x = 1000 * -6:0, y = -2500), - data.frame(x = 1000 * 0:-6, y = -2000), - data.frame(x = 1000 * -6:0, y = -1500), - data.frame(x = 1000 * 0:-6, y = -1000), - data.frame(x = 1000 * -6:0, y = -500), - data.frame(x = 1000 * 0:-6, y = 0), - data.frame(x = -6000, y = -500 * 7:0), - data.frame(x = -5000, y = -500 * 0:7), - data.frame(x = -4000, y = -500 * 7:0), - data.frame(x = -3000, y = -500 * 0:7), - data.frame(x = -2000, y = -500 * 7:0), - data.frame(x = -1000, y = -500 * 0:7), - data.frame(x = 0, y = -500 * 7:0) -) - -panel.3dgridline <- function(..., rot.mat, distance, xlim, ylim, zlim, - xlim.scaled, ylim.scaled, zlim.scaled) { - scale.vals <- function(x, original, scaled) { - scaled[1] + (x - original[1]) * diff(scaled) / diff(original) - } - scaled.map <- rbind( - scale.vals(rongelap_grid_line$x, xlim, xlim.scaled), - scale.vals(rongelap_grid_line$y, ylim, ylim.scaled), - zlim.scaled[1] - ) - m <- ltransform3dto3d(scaled.map, rot.mat, distance) - panel.lines(x = m[1,], y = m[2,], col = "gray", lty = 2) -} - -cloud(counts / time ~ cX * cY, - data = rongelap, col = "black", - xlim = c(-6500, 100), ylim = c(-3800, 150), - scales = list(arrows = FALSE, col = "black"), - aspect = c(0.75, 0.5), - xlab = list("横坐标(米)", rot = 20), - ylab = list("纵坐标(米)", rot = -50), - zlab = list("辐射强度", rot = 90), - type = c("p", "h"), pch = 16, lwd = 0.5, - panel.3d.cloud = function(...) { - panel.3dgridline(...) - panel.3dcoastline(...) # 海岸线 - panel.3dscatter(...) - }, - # 减少三维图形的边空 - lattice.options = list( - layout.widths = list( - left.padding = list(x = -0.5, units = "inches"), - right.padding = list(x = -1.0, units = "inches") - ), - layout.heights = list( - bottom.padding = list(x = -1.5, units = "inches"), - top.padding = list(x = -1.5, units = "inches") - ) - ), - par.settings = list( - # 移除几条内框线 - # box.3d = list(col = c(1, 1, NA, NA, 1, NA, 1, 1, 1)), - # 刻度标签字体大小 - axis.text = list(cex = 0.8), - # 去掉外框线 - axis.line = list(col = "transparent") - ), - # 设置三维图的观察方位 - screen = list(z = 30, x = -65, y = 0) -) -``` - -### 三维透视图 {#sec-lattice-wireframe} - -有如下参数方程 - -$$ -\begin{aligned} -\left\{ - \begin{array}{l} -x(u,v) = \cos(u)\big(r + \cos(u / 2)\big) \\ -y(u,v) = \sin(u)\big(r + \cos(u / 2)\sin(tv) - \sin(u / 2)\sin(2tv)\big)\sin(tv) - - \sin(u / 2)\sin(2tv) \\ -z(u,v) = \sin(u / 2) \sin(tv) + \cos(u / 2) \sin(tv) -\end{array} \right. -\end{aligned} -$$ - -其中,$u$ 和 $v$ 是参数,$\frac{u}{2\pi} \in [0.3,1.25], \frac{v}{2\pi} \in [0,1]$,$r$ 和 $t$ 是常量,不妨设 $r = 2$ 和 $t=1$ 。 - -```{r} -#| label: fig-lattice-wireframe -#| fig-cap: 三维透视图 -#| fig-width: 4.5 -#| fig-height: 4.5 -#| fig-showtext: true - -# lattice 书 6.3.1 节 参数 -kx <- function(u, v) cos(u) * (r + cos(u / 2)) -ky <- function(u, v) { - sin(u) * (r + cos(u / 2) * sin(t * v) - - sin(u / 2) * sin(2 * t * v)) * sin(t * v) - - sin(u / 2) * sin(2 * t * v) -} -kz <- function(u, v) sin(u / 2) * sin(t * v) + cos(u / 2) * sin(t * v) -n <- 50 -u <- seq(0.3, 1.25, length = n) * 2 * pi -v <- seq(0, 1, length = n) * 2 * pi -um <- matrix(u, length(u), length(u)) -vm <- matrix(v, length(v), length(v), byrow = TRUE) -r <- 2 -t <- 1 - -wireframe(kz(um, vm) ~ kx(um, vm) + ky(um, vm), - shade = TRUE, drape = FALSE, - xlab = expression(x[1]), ylab = expression(x[2]), - zlab = list(expression( - italic(f) ~ group("(", list(x[1], x[2]), ")") - ), rot = 90), alpha = 0.75, - scales = list(arrows = FALSE, col = "black"), - # 减少三维图形的边空 - lattice.options = list( - layout.widths = list( - left.padding = list(x = -0.5, units = "inches"), - right.padding = list(x = -1.0, units = "inches") - ), - layout.heights = list( - bottom.padding = list(x = -1.5, units = "inches"), - top.padding = list(x = -1.5, units = "inches") - ) - ), - par.settings = list(axis.line = list(col = "transparent")), - screen = list(z = 30, x = -65, y = 0) -) -``` - -绘图函数 `wireframe()` 支持使用公式语法,也支持矩阵类型的数据绘制透视图。 - -```{r} -#| label: fig-wireframe-volcano -#| fig-cap: 奥克兰火山地形图 -#| fig-width: 6 -#| fig-height: 5.5 -#| fig-showtext: true - -wireframe(volcano, - drape = TRUE, colorkey = FALSE, shade = TRUE, - xlab = list("南北方向", rot = -40), - ylab = list("东西方向", rot = 45), - zlab = list("高度", rot = 90), - # 减少三维图形的边空 - lattice.options = list( - layout.widths = list( - left.padding = list(x = -.6, units = "inches"), - right.padding = list(x = -1.0, units = "inches") - ), - layout.heights = list( - bottom.padding = list(x = -.8, units = "inches"), - top.padding = list(x = -1.0, units = "inches") - ) - ), - # 设置坐标轴字体大小 - par.settings = list( - axis.line = list(col = "transparent"), - fontsize = list(text = 12, points = 10) - ), - scales = list(arrows = FALSE, col = "black"), - screen = list(z = -45, x = -50, y = 0) -) -``` - -### 地形轮廓图 {#sec-lattice-contour} - -绘图函数 `levelplot()` 支持使用公式语法,也支持矩阵类型的数据绘制轮廓图。基于奥克兰火山地形数据 volcano 绘制轮廓图,volcano 是矩阵类型的数据。 - -```{r} -#| label: fig-levelplot-volcano -#| fig-cap: 奥克兰火山的地形轮廓图 -#| fig-width: 6 -#| fig-height: 4 -#| fig-showtext: true - -levelplot(volcano, useRaster = TRUE, - # 去掉图形上、右边多余的刻度线 - scales = list( - x = list(alternating = 1, tck = c(1, 0)), - y = list(alternating = 1, tck = c(1, 0)) - ), - par.settings = list( - # x/y 轴标签字体,刻度标签字体 - par.xlab.text = list(fontfamily = "Noto Serif CJK SC"), - par.ylab.text = list(fontfamily = "Noto Serif CJK SC"), - axis.text = list(fontfamily = "sans") - ), - xlab = "南北方向", ylab = "东西方向" -) -``` - -函数 `levelplot()` 的参数 `col.regions` 需要传递一个函数,示例中使用的默认设置。常见的函数有 `hcl.colors()` 、 `gray.colors()` 、`terrain.colors()` 、`cm.colors()` 和 `topo.colors()` 等,函数 `hcl.colors()` 默认使用 `viridis` 调色板,还可以用函数 `colorRampPalette()` 构造调色板函数。 - -```{r} -#| label: fig-levelplot-topo -#| fig-width: 4.5 -#| fig-height: 4 -#| fig-showtext: true -#| fig-cap: 奥克兰火山的地形轮廓图 - -data(topo, package = "MASS") -levelplot(z ~ x * y, data = topo, scales = "free", - panel = panel.2dsmoother, contour = TRUE, - form = z ~ s(x, y, bs = "gp", k = 50), method = "gam", - xlab = "水平方向", ylab = "垂直方向" -) -``` - -函数 `panel.2dsmoother()` 来自 **latticeExtra** 包,数据的二维分布,默认采用 `tp` - -- `tp` thin plate regression spline 回归样条方法平滑。 -- `cr` Cubic regression spline 立方回归样条。 -- `gp` Gaussian process smooths 高斯过程平滑,默认为全秩 Full Rank,指定 k 低秩近似 Low Rank。 - -### 地区分布图 {#sec-lattice-mapplot} - -最后一个想要介绍的是地区分布图,也叫面量图、围栏图,描述空间栅格数据的分布,常见的一种情况是展示各个地区的人口、社会、经济指标。下面通过 **tigris** 包可以下载美国人口调查局发布的数据,本想下载与观测数据年份最近的地图数据,但是 2009 年及以前的地图数据缺失,因此,笔者下载了 2010 年的地图数据,它与得票率数据最近。 - -```{r} -#| eval: false -#| echo: true - -library(tigris) -us_state_map <- states(cb = TRUE, year = 2010, resolution = "20m", class = "sf") -us_state_map <- shift_geometry(us_state_map, geoid_column = "STATE", position = "below") -``` - -第一行代码用 **tigris** 包的函数 `states()` 下载 2010 年比例尺为 1:20000000 的多边形州边界矢量地图数据,返回一个 simple feature 类型的空间数据类型。第二行代码用该包的另一个函数 `shift_geometry()` 移动离岸的州和领地,将它们移动到主体部分的下方。 - -```{r} -#| message: false - -library(sf) -us_state_sf <- readRDS("data/us-state-map-2010.rds") -# sf 转 sp -us_state_sp <- as(us_state_sf, "Spatial") -library(maps) -# sp 转 map -us_state_map <- SpatialPolygons2map(us_state_sp, namefield = "NAME") -# 准备观测数据 -data(votes.repub) -# 转为 data.frame 类型 -votes_repub <- as.data.frame(votes.repub) -``` - -数据集 `votes.repub` 记录 1856-1976 年美国历届大选中共和党在各州的得票率。图中以由红到蓝的颜色变化表示由低到高的得票率,1964 年共和党在东南一隅得票率较高,在其它地方得票率普遍较低,形成一边倒的情况,最终由民主党的林登·约翰逊当选美国第36任总统。1968 年共和党在东南部得票率最低,与 1964 年相比,整个反过来了,最终由共和党的理查德·尼克松当选美国第37任总统。 - -```{r} -#| label: fig-lattice-choropleth -#| fig-showtext: true -#| fig-width: 5 -#| fig-height: 5 -#| fig-cap: 共和党在各州的得票率 - -library(RColorBrewer) -rdbu_pal <- colorRampPalette(colors = brewer.pal(n = 11, name = "RdBu")) -mapplot(rownames(votes_repub) ~ `1964` + `1968`, data = votes_repub, - border = NA, map = us_state_map, colramp = rdbu_pal, layout = c(1, 2), - scales = list(draw = FALSE), xlab = "", ylab = "" -) -``` - -参数 `border` 设置州边界线的颜色,NA 表示去掉边界线。参数 `map` 设置州边界地图数据。参数 `colramp` 设置一个调色板,用于将得票率与调色板上的颜色映射起来。美国历届大选,共和党和民主党竞争总统职位,最终由得票率决定,用红蓝对抗型调色板表现竞争关系。基于 **RColorBrewer** 包的 `RdBu` 调色板,用函数 `colorRampPalette()` 构造一个新的红蓝调色板。参数 `layout` 将多个子图按照一定顺序排列,图中设置 2 行 1 列的多图布局。参数 `scales` 用来调整刻度,设置 `list(draw = FALSE)` 将图中的刻度去掉了。参数 `xlab` 设置一个空字符,即 `xlab = ""` 可去掉横坐标轴标签,参数 `ylab` 应用于设置纵坐标,用法与参数 `xlab` 一样。图中,主要表现得票率在各州的分布,因此,坐标轴刻度和标签都不太重要,可以去掉。 - -## 总结 {#sec-basic-lattice-summary} - -现在回过头来看,无论是图形样式还是绘图语法, **lattice** 可以看作是介于 Base R 和 **ggplot2** 之间的一种绘图风格。举例来说,下面比较 Base R 和 **lattice** 的图形样式。 - -```{r} -#| label: fig-lattice-vs-base -#| fig-width: 4 -#| fig-height: 4 -#| fig-showtext: true -#| fig-cap: 对比 Base R 和 lattice 制作的分组散点图 -#| layout-ncol: 2 -#| par: true -#| fig-subcap: -#| - Base R 图形 -#| - lattice 图形 - -plot(Sepal.Length ~ Petal.Length, col = Species, data = iris, - xlab = "萼片长度", ylab = "花瓣长度") -xyplot(Sepal.Length ~ Petal.Length, groups = Species, data = iris, - scales = "free", xlab = "萼片长度", ylab = "花瓣长度") -``` - -与函数 `plot()` 对应的是函数 `xyplot()` ,它们共用一套公式语法,参数 `data` 的含义也是一样的。与参数 `col` 对应的是参数 `groups` ,作用是添加数据分组标识。在两个函数中,添加横纵坐标轴标签都是用参数 `xlab` 和 `ylab` 。函数 `xyplot()` 中参数 `scales` 的作用是对坐标轴刻度的调整,参数值 `"free"` 表示去掉图形上边和右边的刻度线,默认情况下是有刻度线的。 - -在高级的绘图函数方面,Base R 和 **lattice** 基本都有功能对应的函数,在低水平的绘图函数方面,二者截然不同,主要是因为后者基于另一套绘图系统 --- **grid** 绘图系统。Base R 作图常常需要一个函数一个函数地不断叠加,在图中画上点、线、轴、标签等元素,而 **lattice** 主要通过面板函数,层层叠加的方式,每一个面板函数实现一个功能,整合一系列绘图操作。本章主要介绍 **lattice** 包和 **latticeExtra** 包,用到的高级绘图函数如下表。 - -| R 包 | 函数 | 图形 | 作用 | -|------------------|----------------------|----------------|--------------| -| **lattice** | `xyplot()` | (分组)散点图 | 描述关系 | -| **lattice** | `bwplot()` | (分组)箱线图 | 描述分布 | -| **lattice** | `barchart()` | (分组)柱形图 | 描述对比 | -| **lattice** | `levelplot()` | 切片水平图 | 描述趋势 | -| **lattice** | `wireframe()` | 三维透视图 | 描述趋势 | -| **lattice** | `cloud()` | 三维散点图 | 描述分布 | -| **latticeExtra** | `panel.smoother()` | 回归曲线图 | 描述趋势 | -| **latticeExtra** | `panel.2dsmoother()` | 地形轮廓图 | 描述趋势 | -| **latticeExtra** | `ecdfplot()` | 经验分布图 | 描述分布 | -| **latticeExtra** | `segplot()` | 置信区间图 | 描述不确定性 | -| **latticeExtra** | `panel.ellipse()` | 置信椭圆图 | 描述不确定性 | -| **latticeExtra** | `mapplot()` | 地区分布图 | 描述分布 | - -: lattice 和 latticeExtra 包的部分函数 {#tbl-lattice-extra} diff --git a/visualization-practice.qmd b/visualization-practice.qmd deleted file mode 100755 index 60f5b528..00000000 --- a/visualization-practice.qmd +++ /dev/null @@ -1,576 +0,0 @@ -# 探索实践 {#sec-visualization-practice} - -```{r} -#| echo: false - -source("_common.R") -``` - -## 分析老忠实间歇泉喷发规律 {#sec-faithful} - -@fig-faithful-bkde2d 展示美国怀俄明州黄石国家公园[老忠实间歇泉](https://en.wikipedia.org/wiki/Old_Faithful)喷发规律,横轴表示喷发持续时间(以分钟计),纵轴表示等待时间(以分钟计),点的亮暗程度(白到黑)代表附近点密度的高低,亮度值通过二维核密度估计方法得到,具体实现借助了 **KernSmooth** [@KernSmooth1995] 包提供的 `bkde2D()` 函数,设置了喷发时间的窗宽为 0.7 分钟,等待时间的窗宽为 7分钟。不难看出,每等待 55 分钟左右间歇泉喷发约 2 分钟,或者每等待 80 分钟左右间歇泉喷发 4.5 约分钟,非常守时,表现得很老实,故而得名。说实话,二维核密度估计在这里有点大材小用了,因为数据点比较少,肉眼也能分辨出来哪里聚集的点多,哪里聚集的点少。 - -```{r} -#| label: fig-faithful-bkde2d -#| echo: !expr knitr::is_html_output() -#| code-fold: true -#| par: true -#| fig-cap: "二维核密度估计" -#| fig-subcap: -#| - "faithful 数据集的散点图" -#| - "点的亮暗表示核密度估计值的大小" -#| - "等高线表示核密度估计值" -#| - "等高线表示核密度估计值" -#| fig-width: 4.5 -#| fig-height: 4.5 -#| fig-showtext: true -#| message: false -#| layout-ncol: 2 - -# faithful 添加二维核密度估计 density 列 -library(KernSmooth) -den <- bkde2D(x = faithful, bandwidth = c(0.7, 7), gridsize = c(51L, 51L)) -faithful2d <- expand.grid(eruptions = den$x1, waiting = den$x2) |> - transform(density = as.vector(den$fhat)) - -plot(faithful, - pch = 20, panel.first = grid(), cex = 1, ann = FALSE, - xlim = c(0.5, 6.5), - ylim = c(35, 100) -) -title(xlab = "喷发时间", ylab = "等待时间", family = "Noto Serif CJK SC") - -plot(faithful, - pch = 20, panel.first = grid(), cex = 1, ann = FALSE, - xlim = c(0.5, 6.5), - ylim = c(35, 100), - col = densCols(faithful, - bandwidth = c(0.7, 7), - nbin = c(51L, 51L), colramp = hcl.colors - ) -) -title(xlab = "喷发时间", ylab = "等待时间", family = "Noto Serif CJK SC") - -plot(faithful, - pch = 20, panel.first = grid(), cex = 1, ann = FALSE, - xlim = c(0.5, 6.5), - ylim = c(35, 100), - col = densCols(faithful, - bandwidth = c(0.7, 7), - nbin = c(51L, 51L), colramp = hcl.colors - ) -) -contour(den$x1, den$x2, den$fhat, nlevels = 10, add = TRUE, family = "sans") -title(xlab = "喷发时间", ylab = "等待时间", family = "Noto Serif CJK SC") - -# 散点添加颜色 -mkBreaks <- function(u) u - diff(range(u)) / (length(u) - 1) / 2 -# faithful 划入网格内 -xbin <- cut(faithful[, 1], mkBreaks(den$x1), labels = FALSE) -ybin <- cut(faithful[, 2], mkBreaks(den$x2), labels = FALSE) -# 网格对应的核密度估计值即为 faithful 对应的核密度估计值 -faithful$dens <- den$fhat[cbind(xbin, ybin)] -# 若是 faithful 数据点没有划分,则置为 0 -faithful$dens[is.na(faithful$dens)] <- 0 - -library(ggplot2) -library(ggnewscale) -ggplot() + - geom_point( - data = faithful, aes(x = eruptions, y = waiting, color = dens), - shape = 20, size = 2, show.legend = FALSE - ) + - scale_colour_viridis_c(option = "D") + - new_scale_color() + - geom_contour(data = faithful2d, aes( - x = eruptions, y = waiting, - z = density, colour = after_stat(level) - ), bins = 14, linewidth = 0.45, show.legend = FALSE) + - scale_colour_viridis_c(option = "C", direction = -1, begin = 0.2, end = 0.8) + - # colorspace::scale_color_continuous_sequential(palette = "Grays") + - scale_x_continuous(breaks = 1:6) + - scale_y_continuous(breaks = 10 * 4:10) + - coord_cartesian(xlim = c(0.5, 6.5), ylim = c(35, 100)) + - labs(x = "喷发时间", y = "等待时间", colour = "密度") + - theme_bw(base_size = 13) + - theme( - legend.title = element_text(family = "Noto Serif CJK SC"), - axis.title = element_text(family = "Noto Serif CJK SC"), - axis.title.x = element_text( - margin = margin(b = 0, l = 0, t = 20, r = 0) - ), - axis.title.y = element_text( - margin = margin(b = 0, l = 0, t = 0, r = 20) - ), - panel.border = element_rect(color = "black"), - panel.grid = element_blank(), - panel.grid.major = element_line( - color = "lightgray", - linetype = 3, linewidth = 0.5 - ), - axis.ticks.length = unit(0.25, "cm"), - axis.text.x = element_text( - family = "sans", color = "black", - vjust = -1.5, size = rel(1.25) - ), - axis.text.y = element_text( - family = "sans", color = "black", - angle = 90, vjust = 1.5, hjust = 0.5, - size = rel(1.25) - ) - ) -``` - -::: callout-tip -函数 `bkde2D()` 实现二维带窗宽的核密度估计(2D Binned Kernel Density Estimate),R 语言存在多个版本,**grDevices** 包的函数 `densCols()` 直接调用 **KernSmooth** 包的函数 `bkde2D()`,**graphics** 包的函数 `smoothScatter()` 与函数 `densCols()` 一样,内部也是调用 `bkde2D()` 函数,**ggplot2** 包的图层 `geom_density_2d()` 采用 **MASS** 包的函数 `kde2d()`,在算法实现上,`MASS::kde2d()` 与 `KernSmooth::bkde2D()` 不同,前者是二维核密度估计(Two-Dimensional Kernel Density Estimation)。Tarn Duong 的著作 [《Multivariate Kernel Smoothing and Its Applications 》](https://www.mvstat.net/mvksa/) [@Chacon2018] 对多元核平滑方法及其应用作了专门的论述,相关实现见书籍配套的 **ks** 包。 -::: - -```{r} -#| eval: false -#| echo: false - -# 三维交互式图形 -dens <- with(faithful, MASS::kde2d(x = waiting, y = eruptions)) -library(plotly) -with(dens, plot_ly(x = x, y = y, z = z, type = "surface")) -``` - -## 中国地区级男女性别比分布 {#sec-china-household-sex} - -@fig-china-household-sex-1 展示 2020 年中国各省、自治区和直辖市分城市、镇和乡村的性别比数据。数据来自中国国家统计局发布的 2021 年统计年鉴,在数据量不太大的情况下,尽可能展示原始数据,可以捕捉到更加细致的差异。社会经济相关的数据常常显示有马太效应,对原始数据适当做一些变换有利于比较和展示数据,@fig-china-household-sex-2 展示对数变换后的性别比数据的分布。大部分地区的性别比数据都在 100:100 左右,流动人口的性别比波动大很多。 - -```{r} -#| label: fig-china-household-sex -#| echo: !expr knitr::is_html_output() -#| code-fold: true -#| fig-cap: "2020 年中国地区级男女性别比分布" -#| fig-subcap: -#| - 原始性别比数据 -#| - 对数变换后的性别比数据 -#| fig-width: 7 -#| fig-height: 4.5 -#| fig-showtext: true - -china_household_sex <- readRDS(file = "data/china-household-sex-2020.rds") -ggplot(data = china_household_sex, aes(x = `户口登记状况`, y = `男性` / `女性`)) + - geom_jitter(aes(color = `区域`), width = 0.3) + - theme_classic() - -ggplot(data = china_household_sex, aes(x = `户口登记状况`, y = `男性` / `女性`)) + - geom_jitter(aes(color = `区域`), width = 0.3) + - scale_y_continuous(trans = "log10") + - theme_classic() -``` - -- 「住本乡、镇、街道,户口在本乡、镇、街道」土著和已获得当地户口的。性别比分布有明显的层次差异,性别比均值从大到小依次是城市、乡村、镇。城市里,男性略多于女性,镇里,男性明显少于女性,乡村里,男性略低于女性。 -- 「住本乡、镇、街道,户口待定」黑户或其它。性别比分布有明显的层次差异。同上。 -- 「住本乡、镇、街道,户口在外乡、镇、街道,离开户口登记地半年以上」流出人口,流出乡、镇、街道。城市、镇、乡村的性别比数据充分混合了,性别比分布没有明显的层次差异。 -- 「居住在港澳台或国外,户口在本乡、镇、街道」流出人口,流出国。同上。 - -## 美国历年各年龄死亡率变化 {#sec-usa-mortality} - - - -@fig-usa-mortality 展示美国 1933-2020 年男性分年龄的死亡率数据[^visualization-practice-1]。图分上下两部分,上半部分展示死亡率原值随年龄的变化情况,以 ggplot2 默认的调色板给各个年份配色,下半部分展示死亡率对数变换后随年龄的变化情况,并以红、橙、黄、绿、青、蓝、紫构造彩虹式的调色板给各个年份配色。作图过程中,使用对数变换和调用彩虹式的调色板,帮助我们观察到更多的细节、层次。对数变换后,更加清晰地展示死亡率的变化,尤其是 0-20 岁之间的死亡率起伏变化。调用彩虹式的调色板后,约 20 年为一个阶段,每个阶段内呈现梯度变化,多个阶段体现层次性,更加清晰地展示死亡率曲线的变动趋势。透过层次看到 80 多年来,美国在医疗和公共卫生方面取得的显著改善。 - -[^visualization-practice-1]: 数据来自德国马克斯普朗克人口研究所、美国加州大学伯克利分校、法国人口研究所共同建立的人类死亡率数据库 ()。 - -```{r} -#| label: fig-usa-mortality -#| fig-cap: "1933-2020 年美国男性死亡率曲线" -#| fig-width: 6 -#| fig-height: 6 -#| echo: !expr knitr::is_html_output() -#| fig-showtext: true -#| code-fold: true - -usa_mortality <- readRDS(file = "data/usa-mortality-2020.rds") -library(patchwork) -p1 <- ggplot(data = usa_mortality, aes(x = Age, y = Male, group = Year)) + - geom_vline(xintercept = "100", colour = "gray", lty = 2) + - geom_line(aes(color = Year), linewidth = 0.25) + - scale_x_discrete( - breaks = as.character(20 * 0:5), - labels = as.character(20 * 0:5) - ) + - theme_classic() -p2 <- p1 + - labs(x = "年龄", y = "死亡率", color = "年份") -p3 <- p1 + - scale_y_log10(labels = scales::label_log()) + - scale_colour_gradientn(colors = RColorBrewer::brewer.pal(name = "Spectral", n = 11)) + - labs(x = "年龄", y = "死亡率(对数尺度)", color = "年份") -p2 / p3 -``` - -@fig-usa-mortality 也展示了很多基础信息,出生时有很高的死亡率,出生后死亡率迅速下降,一直到10岁,死亡率才又开始回升,直到 20 岁,死亡率才回到出生时的水平。之后,在青年阶段死亡率缓慢增加,直至老年阶段达到很高的死亡率水平。相比于老年阶段,医疗水平的改善作用主要体现在婴儿、儿童、青少年阶段。 - -@fig-usa-mortality 还展示了一个潜在的数据质量问题,在 100 岁之后,死亡率波动程度明显在变大,这是因为高龄人数变得很少,即死亡率的分母变得很小,分子的细小波动会被放大,也因为同样的原因,100 岁以上的死亡率主要依赖模型估计,甚至出现死亡率大于 1 的罕见情况。因此,就对比医疗和公共卫生水平的变化而言,从数据的实际情况出发,100 岁以上的情况可以不参与比较。 - -@fig-usa-mortality-heatmap 以年份为横轴,以年龄为纵轴绘制网格,网格内部根据男性死亡率数据填充颜色制作热力图,死亡率数据是对数尺度,颜色的变化和死亡率的变化关系同前,采用了相同的调色板。更加深入的分析和建模,详见 @Marron2022 的第一章。 - -```{r} -#| label: fig-usa-mortality-heatmap -#| fig-cap: "1933-2020 年美国男性死亡率热力图" -#| fig-width: 6.5 -#| fig-height: 4.5 -#| echo: !expr knitr::is_html_output() -#| fig-showtext: true -#| code-fold: true - -ggplot(data = usa_mortality, aes(x = Year, y = Age, fill = Male)) + - scale_fill_gradientn( - colors = RColorBrewer::brewer.pal(name = "Spectral", n = 11), - trans = "log10", labels = scales::percent_format() - ) + - geom_tile(linewidth = 0.4) + - scale_y_discrete( - breaks = as.character(10 * 0:10), - labels = as.character(10 * 0:10), - expand = c(0, 0) - ) + - scale_x_continuous( - breaks = 1940 + 10 * 0:8, - labels = 1940 + 10 * 0:8, - expand = c(0, 0) - ) + - theme_classic() + - labs(x = "年份", y = "年龄", fill = "死亡率") -``` - -## 美国弗吉尼亚州城乡死亡率 {#sec-virginia-deaths} - -VADeaths 数据来自 Base R 内置的 datasets 包,记录 1940 年美国弗吉尼亚州死亡率,如下表。 - -```{r} -#| label: tbl-virginia-deaths -#| tbl-cap: 1940 年美国弗吉尼亚州死亡率 -#| echo: false - -knitr::kable(VADeaths, row.names = TRUE, - col.names = c("农村男", "农村女", "城市男", "城市女")) -``` - -死亡率数据是按年龄段、城乡、性别分组统计的,这是一个三因素交叉统计表,表格中第1行第1列的数据表示 50-54 岁乡村男性的死亡率为 11.7 ‰ ,即在 50-54 岁乡村男性群体中,1000 个人中死亡 11.7 个,这是抽样调查出来的数字。下图分年龄段、城乡、性别展示弗吉尼亚州死亡率数据,从图例来看,突出的是各年龄段的对比,图主要传递的信息是各年龄段的死亡率差异。无论城市还是乡村,也无论男性还是女性,年龄越大死亡率越高,这完全是一个符合生物规律的客观事实,这是众人皆知的,算不上洞见。 - -```{r} -#| label: fig-virginia-age-group -#| fig-cap: 弗吉尼亚州各年龄段死亡率的对比 -#| fig-width: 6 -#| fig-height: 5 -#| fig-showtext: true -#| echo: !expr knitr::is_html_output() -#| code-fold: true - -dat <- transform(expand.grid( - site = c("乡村", "城镇"), sex = c("男", "女"), - age = ordered(c("50-54", "55-59", "60-64", "65-69", "70-74")) -), deaths = as.vector(t(VADeaths)) / 1000) - -library(ggplot2) -# (\u2030) 表示千分号 -ggplot(data = dat, aes(x = sex, y = deaths, fill = age)) + - geom_col(position = "dodge2") + - scale_y_continuous(labels = scales::label_percent(scale = 1000, suffix = "\u2030")) + - scale_fill_brewer(palette = "Spectral") + - facet_wrap(~site, ncol = 1) + - theme_bw(base_size = 13) + - labs(x = "性别", y = "死亡率", fill = "年龄") -``` - -将对比对象从年龄段转变为城乡,描述城乡差距在死亡率上的体现,是不是一下子更深刻了呢?城市降低各个年龄段的死亡率,暗示着城市的居住条件、医疗水平比乡村好,提高城市化率增加全民的寿命。严格来说,就这个粗糙的数据集不能如此快地下这个结论,但是,它暗示这个信息,同样也符合人们的常识。 - -```{r} -#| label: fig-virginia-population-group -#| fig-cap: 弗吉尼亚州城乡死亡率的对比 -#| fig-width: 6 -#| fig-height: 5 -#| fig-showtext: true -#| echo: !expr knitr::is_html_output() -#| code-fold: true - -ggplot(data = dat, aes(x = age, y = deaths, fill = site)) + - geom_col(position = "dodge2") + - scale_y_continuous(labels = scales::label_percent(scale = 1000, suffix = "\u2030")) + - scale_fill_brewer(palette = "Spectral") + - facet_wrap(~sex, ncol = 1) + - theme_bw(base_size = 13) + - labs(x = "年龄", y = "死亡率", fill = "城乡") -``` - -## 如何用图表示累积概率分布 {#sec-diamonds-distr} - -不失一般性,考虑连续随机变量的条件分布和累积分布。不妨设随机变量 $x$ 的概率分布函数和概率密度函数分别是 $F(x)$ 和 $f(x)$ 。已知概率分布函数和概率密度函数之间有如下关系。 - -$$ -F(x) = \int_{-\infty}^{x} f(t) \mathrm{dt} -$$ - -diamonds 数据来自 ggplot2 包,记录了约 54000 颗钻石的价格、重量、切工、颜色、纯净度、尺寸等属性信息。@fig-diamonds-distr 展示这批不同切工的钻石随价格的分布,在这个示例中,如何表达累积分布?概率分布的密度曲线是根据直方图估计得来的,根据不同价格区间内钻石的数量占总钻石的比例估计概率。固定窗宽,即在同一价格区间内累积不同切工的钻石数量,得到累积概率,最后获得累积概率密度曲线,更多理论细节见数据可视化陷阱 [@pu2020] 。 - -```{r} -#| label: fig-diamonds-distr -#| fig-cap: 不同切工的钻石随价格的分布 -#| fig-width: 6 -#| fig-height: 5 -#| echo: !expr knitr::is_html_output() -#| fig-showtext: true -#| code-fold: true - -library(ggplot2) -library(patchwork) -p1 <- ggplot(diamonds, aes(x = price, y = after_stat(density), fill = cut)) + - geom_density(position = "stack", colour = "white") + - scale_fill_brewer(palette = "Spectral") + - scale_y_continuous( - labels = expression(0, 5~"·"~10^-4, 10 ~ "·" ~ 10^-4, 15 ~ "·" ~ 10^-4), - breaks = c(0, 5, 10, 15) * 10^(-4) - ) + - theme_bw(base_family = "Noto Serif CJK SC") + - labs(x = "价格", y = "概率密度", fill = "切工", tag = "坏") + - theme( - axis.text.x = element_text(family = "sans", color = "black"), - axis.text.y = element_text( - family = "sans", color = "black", - angle = 90, vjust = 1.5, hjust = 0.5 - ), - legend.text = element_text(family = "sans"), - plot.tag = element_text(family = "Noto Serif CJK SC", color = "red"), - plot.tag.position = "topright" - ) - -p2 <- ggplot(diamonds, aes(x = price, y = after_stat(density * n), fill = cut)) + - geom_density(position = "stack", colour = "white") + - scale_fill_brewer(palette = "Spectral") + - theme_bw(base_family = "Noto Serif CJK SC") + - labs(x = "价格", y = "概率质量", fill = "切工", tag = "好") + - theme( - axis.text.x = element_text(family = "sans", color = "black"), - axis.text.y = element_text( - family = "sans", color = "black", - angle = 90, vjust = 1.5, hjust = 0.5 - ), - legend.text = element_text(family = "sans"), - plot.tag = element_text(family = "Noto Serif CJK SC", color = "black"), - plot.tag.position = "topright" - ) - -p1 / p2 -``` - -## 解释二项总体参数的置信带 {#sec-confidence-belt} - -0 和 1 是世界的原点,蕴含大道真意,从 0-1 分布也叫伯努利分布,独立同 0-1分布之和可以衍生出二项分布。在一定条件下,可以用泊松分布近似二项分布。根据中心极限定理,独立同二项分布的极限和与正态分布可以发生关系。在二项分布、正态分布的基础上,可以衍生出超几何分布、贝塔分布等等。本书多个地方以二项分布为例介绍基本统计概念和模型。 - -在给定置信水平为 0.95,即 $\alpha = 0.05$,固定样本量 $n = 10$,观测到的成功次数 $x$ 可能为 $0,1,\cdots,10$。对于给定的 $p$,不同 $x$ 值出现的机率 $P(X = x)$ 由 $(p + q)^{10}$ 二项展开式的项给出,这里 $q = 1-p$,即: - -$$ -P(X = x) = \binom{n}{x}p^x(1-p)^{n-x} -$$ {#eq-binom-probability} - -在给定 $p = 0.1$ 的情况下,求二项分布的上 $\alpha/2 = 0.025$ 分位点,尾项之和不应超过 $\alpha/2$,最大的 $x$ 值可有如下方程给出: - -$$ -\sum_{r = x}^{n}\binom{n}{x}p^x(1-p)^{n-x} = \frac{\alpha}{2} -$$ {#eq-binom-quantile} - -在 R 语言中,函数 `qbinom()` 可以计算上述二项分布的上分位点 $x = 3$,即 - -```{r} -qbinom(0.025, size = 10, prob = 0.1, lower.tail = F) -``` - -反过来,若已知上分位点为 $x = 3$,则概率为 - -$$ -P(X > 3) = \sum_{x > 3}^{10}\binom{10}{x}0.1^x*(1-0.1)^{10-x} -$$ {#eq-binom-prob} - -在 R 语言中,函数 `pbinom()` 可以计算上述二项分布的上分位点对应的概率为 $0.0127952$。 - -```{r} -pbinom(q = 3, size = 10, prob = 0.1, lower.tail = F) -``` - -首先简单回顾一下置信区间,在学校和教科书里,有两种说法如下: - -1. $1-\alpha$ 的把握确定区间包含真值。 -2. 区间包含真值的概率是 $1-\alpha$。 - -为什么要采纳第一种说法而不是第二种呢?这其实涉及到置信区间的定义问题,历史上 E. S. Pearson 和 R. A. Fisher 曾有过争论。和大多数以正态分布为例介绍参数的置信估计不同,下面以二项分布为例展开介绍。我们知道二项分布是 N 个伯努利分布的卷积,而伯努利分布又称为 0-1 分布,最形象的例子要数抛硬币了,反复投掷硬币,将正面朝上记为 1,反面朝上记为 0,记录正反面出现的次数,正面朝上的总次数又叫成功次数。 - -1934 年 C. J. Clopper 和 E. S. Pearson 在给定置信水平 $1- \alpha = 0.95$ 和样本量 $n = 10$ 的情况下,给出二项分布 $B(n, p)$ 参数 $p$ 的区间估计(即所谓的 Clopper-Pearson 精确区间估计)和置信带 [@Clopper1934],如 @fig-confidence-belt 所示,横坐标为观测到的成功次数,纵坐标为参数 $p$ 的置信限。具体来说,固定样本量为 10,假定观测到的成功次数为 2,在置信水平为 0.95 的情况下,Base R 内置的二项精确检验函数 `binom.test()`,可以获得参数 $p$ 的精确区间估计为 $(p_1, p_2) = (0.025, 0.556)$,即: - -```{r} -# 精确二项检验 p = 0.2 -binom.test(x = 2, n = 10, p = 0.2) -``` - -值得注意,这个估计的区间与函数 `binom.test()` 中参数 `p` 的取值无关,也就是说,当 $p = 0.4$,区间估计结果是一样的,如下: - -```{r} -# 精确二项检验 p = 0.4 -binom.test(x = 2, n = 10, p = 0.4) -``` - -由此,也可以看出区间估计与假设检验的一些关系。 - -```{=html} - -``` -```{r} -#| label: fig-confidence-belt -#| fig-cap: "二项分布参数的置信带" -#| echo: !expr knitr::is_html_output() -#| code-fold: true -#| fig-width: 5 -#| fig-height: 5 -#| fig-showtext: true -#| par: true - -library(rootSolve) # uniroot.all -options(digits = 4) -# r 为上分位点 -p_fun <- function(p, r = 9) qbinom(0.025, size = 10, prob = p, lower.tail = F) - r # 上分位点 -l_fun <- function(p, r = 9) qbinom(0.025, size = 10, prob = p, lower.tail = T) - r # 下分位点 - -# 计算每个分位点对应的最小的概率 p -p <- sapply(0:10, function(x) min(uniroot.all(p_fun, lower = 0, upper = 1, r = x))) - -# 计算每个分位点对应的最大的概率 l -l <- sapply(0:10, function(x) max(uniroot.all(l_fun, lower = 0, upper = 1, r = x))) - -plot( - x = seq(from = 0, to = 10, length.out = 11), - y = seq(from = 0, to = 1, length.out = 11), - type = "n", ann = FALSE, family = "sans", panel.first = grid() -) -title(xlab = "成功次数", ylab = "置信限", family = "Noto Serif CJK SC") -lines(x = 0:10, y = p, type = "s") # 朝下的阶梯线 -lines(x = 0:10, y = p, type = "l") # 折线 -# points(x = 0:10, y = p, pch = 16, cex = .8) # 散点 - -# abline(a = 0, b = 0.1, col = "gray", lwd = 2, lty = 2) # 添加对称线 -text(x = 5, y = 0.5, label = "置信带", cex = 1.5, srt = 45, family = "Noto Serif CJK SC") -# points(x = 5, y = 0.5, col = "black", pch = 16) # 中心对称点 -# points(x = 5, y = 0.5, col = "black", pch = 3) # 中心对称点 - -lines(x = 0:10, y = l, type = "S") # 朝上的阶梯线 -lines(x = 0:10, y = l, type = "l") # 折线 -# points(x = 0:10, y = l, pch = 16, cex = .8) # 散点 - -points(x = c(2, 2), y = c(0.03, 0.55), pch = 8, col = "black") -text(x = 2, y = 0.55, labels = expression(p[2]), pos = 1) -text(x = 2, y = 0.03, labels = expression(p[1]), pos = 3) -``` - -## 解释置信区间及其覆盖概率 {#sec-coverage-probability} - - - -统计图形很重要的一个作用是解释统计概念,这就要求不拘泥于抽象的严格数学表达,借助数值模拟,可视化等手段帮助读者发散思维,加深理解复杂的逻辑概念,建立统计直觉,正如顾恺之所言「以形写神,形神兼备」。下面仅以二项分布为例讲讲区间估计及其覆盖概率。众所周知,在置信水平为 $1 - \alpha$ 的情况下,二项分布 $\mathrm{Bin}(n,p)$ 的参数 $p$ (也叫成功概率)的 Wald 区间估计为 - -$$ -(\hat{p} - Z_{1-\alpha/2} \sqrt{\hat{p}*(1-\hat{p})/n}, \hat{p} + Z_{1-\alpha/2} \sqrt{\hat{p}*(1-\hat{p})/n}) -$$ {#eq-wald-ci} - -其中,$n$ 为样本量,$Z_{1-\alpha/2}$ 为标准正态分布 $\mathcal{N}(0,1)$ 在 $1-\alpha/2$ 处的分位点。 $\alpha$ 一般取 0.05,进而 $Z_{1-\alpha/2} \approx 1.96$。用通俗的话说,有 $1 - \alpha$ 的把握确定参数真值 $p$ 在该估计区间内。可见区间估计的意义是解决点估计可靠性问题,但是可靠性和精度往往不能兼得。统计上,通常的做法是先给定可靠性,去尽可能提升精度,即给定置信水平,使估计区间的长度尽可能短,这就涉及到区间估计的方法问题。 - -下面通过数值模拟的方式辅助说明 Wald 和 Agresti-Coull 两种区间估计方法,现固定样本量 $n = 10$ 或 $n = 100$,重复抽样 1000 次,将参数 $p$ 以 0.01 的间隔离散化,从 0.01 取值到 0.99。已知给定参数 $p$,每次抽样都可以得到参数 $p$ 的估计值 $\hat{p}$ 及其置信区间,1000 次的重复抽样可以计算出来 1000 个置信区间,每个区间要么覆盖真值,要么没有覆盖真值,覆盖的比例可以近似为覆盖概率。 - -如 @fig-coverage 所示,从上往下分别代表 Wald、 Agresti-Coull、 Wilson 和 Clopper-Pearson 区间估计,纵坐标是覆盖概率,横坐标是参数 $p$ 的真值,图中黑虚线表示置信水平 $1-\alpha=0.95$,红、蓝点线分别表示样本量 $n=10$ 和 $n=100$ 的模拟情况。不难看出,Wald 区间估计方法在小样本情况下表现很差,覆盖概率很少能达到置信水平的,而 Agresti-Coull 区间估计在 Wald 基础上添加了修正后,情况得到显著改善。更多区间估计方法的详细比较见文献 @Blyth1960;@Lawrence2001;@Geyer2005 。 - -```{r} -#| label: fig-coverage -#| fig-cap: "二项分布参数的几种区间估计:覆盖概率随成功概率的变化" -#| fig-width: 6 -#| fig-height: 8.5 -#| fig-showtext: true -#| echo: !expr knitr::is_html_output() -#| code-fold: true - -# 计算覆盖概率 -# Wald 覆盖 -coverage_wald <- function(p = 0.1, n = 10, nsim = 1000) { - phats <- rbinom(nsim, prob = p, size = n) / n - ll <- phats - qnorm(1 - 0.05 / 2) * sqrt(phats * (1 - phats) / n) - ul <- phats + qnorm(1 - 0.05 / 2) * sqrt(phats * (1 - phats) / n) - mean(ll < p & ul > p) -} -# Agresti-Coull 覆盖 -coverage_agresti <- function(p = 0.1, n = 10, nsim = 1000) { - phats <- (rbinom(nsim, prob = p, size = n) + 2) / (n + 4) - ll <- phats - qnorm(1 - 0.05 / 2) * sqrt(phats * (1 - phats) / n) - ul <- phats + qnorm(1 - 0.05 / 2) * sqrt(phats * (1 - phats) / n) - mean(ll < p & ul > p) -} -# Clopper and Pearson (1934) -# 与 binom.test() 计算结果一致 -coverage_clopper <- function(p = 0.1, n = 10, nsim = 1000) { - nd <- rbinom(nsim, prob = p, size = n) - ll <- qbeta(p = 0.05 / 2, shape1 = nd, shape2 = n - nd + 1) - ul <- qbeta(p = 1 - 0.05 / 2, shape1 = nd + 1, shape2 = n - nd) - mean(ll < p & ul > p) -} -# Wilson (1927) -# 与 prop.test(correct = FALSE) 计算结果一致 -coverage_wilson <- function(p = 0.1, n = 10, nsim = 1000) { - phats <- rbinom(nsim, prob = p, size = n) / n - lambda <- qnorm(1 - 0.05 / 2) - ll <- phats + lambda^2 / (2 * n) - lambda * sqrt(phats * (1 - phats) / n + lambda^2 / (4 * n^2)) - ul <- phats + lambda^2 / (2 * n) + lambda * sqrt(phats * (1 - phats) / n + lambda^2 / (4 * n^2)) - mean(ll / (1 + lambda^2 / n) < p & ul / (1 + lambda^2 / n) > p) -} - -sim_dat <- transform(expand.grid( - p = seq(0.01, 0.99, by = 0.01), - n = c(10, 100), - nsim = 1000, - methods = c("Wald", "Agresti-Coull", "Wilson", "Clopper-Pearson") -), prob = ifelse(methods == "Wald", - Vectorize(coverage_wald)(p = p, n = n, nsim = nsim), - ifelse(methods == "Agresti-Coull", - Vectorize(coverage_agresti)(p = p, n = n, nsim = nsim), - ifelse(methods == "Wilson", - Vectorize(coverage_wilson)(p = p, n = n, nsim = nsim), - Vectorize(coverage_clopper)(p = p, n = n, nsim = nsim) - ) - ) -), nsample = ifelse(n == 10, "n=10", "n=100")) - -ggplot(data = sim_dat, aes(x = p, y = prob, color = nsample)) + - geom_hline(yintercept = 0.95, linetype = 2, - linewidth = 1, color = "gray60") + - geom_point() + - geom_path() + - # annotate(geom = "text", x = 0, y = 0.95, label = "0.950", - # fontface = "bold", hjust = 2, size = 3.5) + - # scale_color_grey() + - scale_color_brewer(palette = "Set1") + - facet_wrap(facets = ~methods, ncol = 1, scales = "free_y") + - labs(x = "成功概率", y = "覆盖概率", color = "样本量") + - theme_bw(base_size = 13, base_family = "sans") + - theme(title = element_text(family = "Noto Serif CJK SC")) + - coord_cartesian(clip = 'off') -``` - -通过 @fig-coverage 一看就明白了几种区间估计方法的优劣,以及为什么软件普遍默认采用 Wilson 估计方法?因为它又稳定又准确。 Wilson 区间估计用的更加广泛的,Base R 内置的比例检验函数 `prop.test()` 在不启用 Yates 修正时,就是用该方法获得比例 $p$ 的区间估计 [@Wilson1927]。Clopper-Pearson 区间估计特别适合小样本情形,它是精确区间估计方法,Base R 内置的二项比例检验函数 `binom.test()` 就是用该方法获得比例 $p$ 的区间估计[@Clopper1934]。 - -::: callout-tip -请读者再思考两个问题: @fig-coverage 为什么呈现对称的形式,泊松分布会和二项分布有类似的现象吗?如果有的话,连续分布,如正态分布和指数分布也会有吗? -::: - -## 习题 {#sec-exercise-practice} - -1. 1888 年,瑞士开始进入一个人口转变的阶段,从发展中国家的高出生率开始下滑。分析生育率和经济指标的关系。数据集 swiss 记录了 1888 年瑞士 47 个说法语的省份的生育率和社会经济指标数据。Fertility(生育率,采用常见的标准生育率统计口径)、Agriculture(男性从事农业生产的比例)、Examination(应征者在军队考试中获得最高等级的比例)、Education(应征者有小学以上教育水平的比例)、Catholic(信仰天主教的比例)、Infant.Mortality(婴儿死亡率,仅考虑出生一年内死亡),各个指标都统一标准化为百分比的形式。其中,Examination 和 Education 是 1887 年、1888 年和 1889 年的平均值。瑞士 182 个地区 1888 年及其它年份的数据可从[网站](https://opr.princeton.edu/archive/pefp/switz.aspx)获得。 - - ```{r} - #| eval: false - #| echo: false - - library(GGally) - ggpairs(swiss, columns = 1:4, aes(color = Catholic > 50), - upper = "blank", progress = FALSE) - ``` diff --git a/visualization-tikz.qmd b/visualization-tikz.qmd deleted file mode 100644 index b5696af6..00000000 --- a/visualization-tikz.qmd +++ /dev/null @@ -1,512 +0,0 @@ -# TikZ 入门 {#sec-basic-tikz} - -```{r} -#| echo: false - -source("_common.R") -``` - -有一些示意图是用来表达数据探索的思路的,而不是直接探索数据的工具。比如象限图、甘特图、思维导图、网络图等,可以用 TikZ 绘制这类图形来阐述分析维度、思路、结构等。当然,绘制这类示意图不仅限于 TikZ,还有很多其它工具,如 LaTeX 社区的 PSTricks,JavaScripts 社区的 Mermaid,软件 Graphviz 等。 - -## standalone 宏包 {#sec-tikz-standalone} - -最常见的 LaTeX 文档类有 article、report、beamer、book,分别对应文章、报告、演示和书籍。有的宏包在此基础上扩展功能,比如 ctex 宏包提供中文支持,有四个文档类 ctexart、 ctexrep 、ctexbeamer 和 ctexbook 与之对应起来。standalone 宏包提供 standalone 文类主要用于绘制独立的图片,默认情况下,文档四周多余的空白部分会被裁剪掉。在 LaTeX 环境中,推荐使用 TikZ 来绘图。standalone 文类可与 tikz 宏包一起使用,生成一张张由 TikZ 代码绘制的独立图片。下面举个简单的例子,用 TikZ 绘制两个坐标轴。 - -``` latex -\documentclass[tikz,border=1mm]{standalone} -\begin{document} -\begin{tikzpicture} -\draw[<->] (6,0) -- (0,0) node[left]{O} -- (0,6); -\end{tikzpicture} -\end{document} -``` - -standalone 文类启用 `tikz` 选项来绘图,选项 `border=1mm` 表示图片四周的边空保留 1 毫米,文档内容放在 document 环境里,TikZ 绘图代码放在 tikzpicture 环境中,命令 `\draw` 负责绘制具体的图形,用 XeLaTeX 编译,效果如 @fig-tikz 所示。 - -```{tikz} -#| label: fig-tikz -#| fig-cap: TikZ 绘图 -#| engine-opts: !expr list(classoption="tikz,border=1mm") -#| fig-width: 3 -#| fig-height: 3 -#| echo: false - -\begin{tikzpicture} -\draw[<->] (6,0) -- (0,0) node[left]{O} -- (0,6); -\end{tikzpicture} -``` - -standalone 文类有很多选项,下面介绍 4 个选项的常用内容。 - -- `class` 选项指定文类环境,默认值为 `article`,表示在 article 文类中绘图。其它选项还有 `beamer` ,表示在演示环境中绘图。在不同的文类中,图片渲染出来的效果不同。 - -- `tikz=true|false` 选项是否启用 TikZ 绘图,默认值是 `false` 。当显式地在 standalone 文类中启用 `tikz` 选项,就表示用 TikZ 绘图,将自动加载 tikz 宏包。与之类似的选项 `pstricks=true|false` ,表示是否启用 PSTricks 绘图,PSTricks 是LaTeX 社区中一套语法不同于 TikZ 的绘图工具。 - -- `crop=true|false` 选项是否裁剪变空,默认值是 `true` ,表示绘图区域以外的部分都裁剪掉。与之相关的另一个选项是 `border` ,可以更加精细地控制图片四周的各个边空。 - -- `border` 选项指定边空大小,默认值是 0,表示无边空。当 `crop=true` 时,再指定 `border` 选项,比如 `border=1mm` 表示图片四周的边空保留 1 毫米。图片四周的边空大小可以按照左、下、右、上的顺序指定,比如 `border={5mm 6mm 0mm -2mm}` 表示图片左边空 5 毫米、下边空 6 毫米、右边空 0 毫米、上边空负 2 毫米。 - -standalone 文类是支持 PSTricks 绘图的,下面在直角坐标系中绘制一个带阴影效果的圆,示例代码如下: - -``` latex -\documentclass[pstricks,border={5mm 6mm 0mm -2mm}]{standalone} -\usepackage{pst-plot} -\begin{document} -\psset{xunit=0.15in, yunit=0.15in} -\begin{pspicture}(0,0)(11,11) -\psaxes[Dx=4,Dy=4, subticks=4]{->}(0,0)(0,0)(10,10)[$x$,0][$y$,0] -\pscircle[runit=0.15in, fillcolor=orange!50, fillstyle=solid,shadow=true](5,5){3} -\end{pspicture} -\end{document} -``` - -standalone 文类的选项 `pstricks` 表示启用 PSTricks 绘图环境,加载 pst-plot 宏包提供额外的命令,PSTricks 是基于 PostScript 语言的,每一个绘图命令都是 `\ps` 开头的,比如 `\psset` 、`\psaxes`、`\pscircle` 等。`\begin{pspicture}` 和 `\end{pspicture}` 之间是 PSTricks 绘图代码,`\begin{pspicture}` 之后的 `(0,0)(11,11)` 是左下和右上角两个坐标,定义了一个绘图区域。和 TikZ 绘图代码一样,也用 XeLaTeX 编译,效果如 @fig-pstricks 所示。 - -```{tikz} -#| label: fig-pstricks -#| fig-cap: PSTricks 绘图 -#| engine-opts: !expr list(classoption="pstricks,border={5mm 6mm 0mm -2mm}",extra.preamble="\\usepackage{pst-plot}",template="code/tikz2pdf.tex") -#| fig-width: 3 -#| fig-height: 3 -#| echo: false - -\psset{xunit=0.15in, yunit=0.15in} -\begin{pspicture}(0,0)(11,11) -\psaxes[Dx=4,Dy=4, subticks=4]{->}(0,0)(0,0)(10,10)[$x$,0][$y$,0] -\pscircle[runit=0.15in, fillcolor=orange!50, fillstyle=solid,shadow=true](5,5){3} -\end{pspicture} -``` - -可以在 Quarto 和 R Markdown 文档中插入 PSTricks 绘图代码,使用 **knitr** 包的 `tikz` 引擎绘图。只要修改模版文件 `tikz2pdf.tex` ,移除一行 `\usetikzlibrary{matrix}` ,不再加载 tikz 宏包及其 matrix 库。`TIKZ_CLASSOPTION` 不再仅限于 TikZ ,而是 standalone 文类的选项,相应地,`EXTRA_TIKZ_PREAMBLE_CODE` 变成一般的 LaTeX 文档的导言区,`TIKZ_CODE` 可以是 PSTricks 代码。新的模版文件 `tikz2pdf.tex` 如下: - -``` latex -\documentclass[ -%% TIKZ_CLASSOPTION %% -]{standalone} -%% EXTRA_TIKZ_PREAMBLE_CODE %% -\begin{document} -%% TIKZ_CODE %% -\end{document} -``` - -上 @fig-pstricks 即是由 **knitr** 包的 `tikz` 引擎渲染出来的。在代码块选项 `engine-opts` 中,传递一个列表,分别包含 `classoption`(standalone 文类选项)、 `extra.preamble`(导言区)、 `template` (TikZ 模版文件)三块内容。生成 @fig-pstricks 的 `engine-opts` 设置如下: - -``` r -list( - classoption = "pstricks,border={5mm 6mm 0mm -2mm}", - extra.preamble = "\\usepackage{pst-plot}", - template = "code/tikz2pdf.tex" -) -``` - -其它选项和更多详细介绍见 standalone 宏包帮助文档。 - -## PGF 宏包 {#sec-tikz-pgf} - -PGF 宏包提供一套易于学习和使用的绘图语法 TikZ,TikZ 是 TikZ ist kein Zeichenprogramm 的简写,命名有 Linux 哲学意味。下面比较详细的介绍 LaTeX 宏包 [PGF](https://ctan.org/pkg/pgf) 绘制曲线图的过程。 - -```{tikz} -#| label: fig-tikz-pgf1 -#| engine-opts: !expr list(classoption="tikz,border=1mm") -#| fig-cap: PGF 绘制曲线图 -#| fig-width: 3 -#| fig-height: 3 - -\begin{tikzpicture} -\draw[<->] (6,0) -- (0,0) node[left]{O} -- (0,6); -\end{tikzpicture} -``` - -首先,`\draw` 命令绘制带箭头的坐标轴,坐标轴的范围 $[0,6]\times[0,6]$ 。坐标轴是由线构成的,线有虚线、实线,也有宽度和颜色,虚线还有不同类型,这些都是可以设置的参数,比如将 `\draw[<->]` 改为 `\draw[color=red,<->]` ,坐标轴颜色设置为红色。 - -```{tikz} -#| label: fig-tikz-pgf2 -#| fig-cap: PGF 绘制曲线图 -#| fig-width: 3 -#| fig-height: 3 - -\begin{tikzpicture} -\draw[<->] (6,0) node[below]{$q$} -- (0,0) node[left]{O} -- (0,6) node[left]{$V(q)$}; -\end{tikzpicture} -``` - -然后,在位置 (6,0) 和 (0,6) 分别添加节点 `node[below]{$q$}` 和 `node[left]{$V(q)$}` 。node 表示节点,节点的标签内容在大括号内,标签的位置在中括号内,这里,below 表示在位置 (6,0) 的下方。 - -```{tikz} -#| label: fig-tikz-pgf3 -#| fig-cap: PGF 绘制曲线图 -#| fig-width: 3 -#| fig-height: 3 - -\begin{tikzpicture} -\draw[<->] (6,0) node[below]{$q$} -- (0,0) node[left]{O} -- (0,6) node[left]{$V(q)$}; -\draw[very thick] (0,0) to [out=90,in=145] (5,4.5); -\end{tikzpicture} -``` - -最后,从点 (0,0) 至点 (5,4.5) 绘制一条非常粗的曲线。曲线从点 (0,0) 出去的时候,是以 90 度垂直水平轴的方向出去的,到点 (5,4.5) 是以 145 度方向进入的。角度是按照逆时针方向计算的。线的粗细、方向都是由参数决定的。 - -在这里,TikZ 是用来绘制示意图的,不需要知道每个命令的每个参数的取值有哪些。关键是知道自己想要画什么,其实,可以用铅笔在纸上以最快的方式绘制草图,了解每个绘图元素,然后查找 PGF 帮助手册,找到对应的命令和参数,将草图工整地誊抄一遍。 - -## 三维图 {#sec-tikz-pgfplots} - -顾名思义,[pgfplots](https://ctan.org/pkg/pgfplots) 宏包基于 PGF 的,用它来绘制三维图形是非常方便的。 - -``` latex -\documentclass[tikz]{standalone} -\usepackage{pgfplots} -\pgfplotsset{width=7cm,compat=1.17} -\begin{document} -%% TikZ 代码%% -\end{document} -``` - -首先加载 pgfplots 宏包,设置全局的绘图参数,`width=7cm` 表示绘图页面宽度,`compat=1.17` 表示使用 pgfplots 的版本。 - -```{tikz} -#| label: fig-tikz-viridis -#| fig-cap: TikZ 绘制三维图 viridis 调色板 -#| engine-opts: !expr list(extra.preamble=c("\\usepackage{pgfplots}","\\pgfplotsset{width=7cm,compat=1.17}")) -#| fig-width: 4 - -\begin{tikzpicture} -\begin{axis}[ - hide axis, - colormap/viridis -] -\addplot3[ - mesh, - samples=50, - domain=-8:8 -] -{ sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2) }; -\addlegendentry{$\frac{\sin(r)}{r}$} -\end{axis} -\end{tikzpicture} -``` - -```{tikz} -#| label: fig-tikz-jet -#| fig-cap: TikZ 绘制三维图 jet 调色板 -#| engine-opts: !expr list(extra.preamble=c("\\usepackage{pgfplots}","\\pgfplotsset{width=7cm,compat=1.17}")) -#| fig-width: 4 - -\begin{tikzpicture} -\begin{axis}[ - hide axis, - colormap/jet -] -\addplot3[ - mesh, - samples=50, - domain=-8:8 -] -{ sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2) }; -\addlegendentry{$\frac{\sin(r)}{r}$} -\end{axis} -\end{tikzpicture} -``` - -```{tikz} -#| label: fig-tikz-cool -#| fig-cap: TikZ 绘制三维图 cool 调色板 -#| engine-opts: !expr list(extra.preamble=c("\\usepackage{pgfplots}","\\pgfplotsset{width=7cm,compat=1.17}")) -#| fig-width: 5 - -\begin{tikzpicture} -\begin{axis}[ - hide axis, - colormap/cool, - colorbar sampled, - domain=-8:8 -] -\addplot3[ - contour filled={ - number=20, - }, - ]{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)}; -\addlegendentry{$\frac{\sin(r)}{r}$} -\end{axis} -\end{tikzpicture} -``` - -- `\begin{axis}` 和 `\end{axis}` 环境有很多配置选项,参数值 `[hide axis, colormap/viridis]` 中 `hide axis` 表示隐藏坐标轴,`colormap/viridis` 表示三维图形的调色板采用 viridis 。`colormap` 支持很多不同的调色板,上面列举了两个。其实还可以增加不同的选项,比如添加选项 `colorbar sampled` 会生成一个颜色条,还可以添加选项 `colorbar horizontal` 来水平放置颜色条。 -- 可以在导言区加载 `\usetikzlibrary{pgfplots.colorbrewer}` 导入 [ColorBrewer](https://colorbrewer2.org/) 系列调色板,方便后续绘图时调用。作用与 R 语言中的 **RColorBrewer** 包类似,调色板名称略有不同,前者 `PuBu-9` 对应后者 `PuBu` 。 -- `\addplot3` 命令绘制函数 `sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)` 的三维图像,即函数 $f(x,y)=\frac{\sin(\sqrt{x^2 + y^2})}{\sqrt{x^2 + y^2}}$ 的三维图像。参数值 `[mesh, samples=50, domain=-8:8]` 中 `mesh` 表示三维图形是网格状,其它可选值还有曲面图 `surf` 、填充等值线图 `contour filled` 等,`samples=50` 表示网格密度是 50,`domain=-8:8` 表示横纵坐标的范围都是 $[-8,8]$ 。 -- `\addlegendentry` 添加图例,图例标签是 $\frac{\sin(r)}{r}$ ,颜色会随着调色板变化。 - -## 网络图 {#sec-tikz-network} - -绘制网络图用 [tikz-network](https://ctan.org/pkg/tikz-network) 宏包,也是 PGF 的一个扩展包。图结构是根据顶点和边来定义的,图的复杂程度也可以用顶点和边的规模来衡量。图描述一种非线性的关系,有自己的一套语言,定义顶点 `\Vertex` 和边 `\Edge` 的两个命令是最基础的。下面绘制柯尼斯堡七桥问题对应的图。 - -``` latex -\documentclass[tikz]{standalone} -\usepackage{tikz-network} -\begin{document} -%% TikZ 代码%% -\end{document} -``` - -```{tikz} -#| label: fig-network-seven-bridges -#| fig-cap: 柯尼斯堡七桥 -#| engine-opts: !expr list(extra.preamble=c("\\usepackage{tikz-network}")) -#| fig-width: 5 - -\begin{tikzpicture} -\Vertex[IdAsLabel, x=5, color=gray, size=1, fontsize=\large]{A} -\Vertex[IdAsLabel, x=10, color=gray, size=1, fontsize=\large]{B} -\Vertex[IdAsLabel, x=15, color=gray, size=1, fontsize=\large]{C} -\Vertex[IdAsLabel, x=10, y=6, color=gray, size=1, fontsize=\large]{D} - -\Edge[label=2, bend=45, fontscale=2](A)(B) -\Edge[label=6, bend=30, fontscale=2](A)(D) -\Edge[label=3, bend=45, fontscale=2](B)(A) -\Edge[label=5, bend=45, fontscale=2](B)(C) -\Edge[label=4, bend=45, fontscale=2](C)(B) -\Edge[label=7, bend=30, fontscale=2](D)(C) -\Edge[label=1, fontscale=2](D)(B) -\end{tikzpicture} -``` - -- `\Vertex` 命令定义顶点(含标签),参数 `IdAsLabel` 表示顶点 ID 作为标签,参数 `x` 和 `y` 表示坐标位置,参数 `color` 表示顶点的填充色,参数 `size` 表示顶点的大小,参数 `fontsize` 表示标签文本的大小。 - -- `\Edge` 命令在已有顶点的基础上定义边,`(A)(B)` 表示从顶点 A 到顶点 B 有一条边,参数`label` 表示边上的标签文本,参数 `bend` 表示边的弧度,参数 `fontscale` 表示标签文本的大小。 - -不难看出,无论是顶点还是边,都有颜色、大小、标签等参数,尽管参数名称有所不同。 - -## 思维导图 {#sec-tikz-mindmap} - -思维导图是非常常见的一种树状图,用于梳理层次关系。TikZ 绘制思维导图是通过 mindmap 库实现的,它是 PGF 的一个库。如 @fig-tikz-mindmap 所示,看着和脑神经网络有某种相似性,所以,有时候,思维导图也叫脑图。 - -``` latex -\documentclass[tikz,svgnames]{standalone} -\usepackage[fontset=fandol]{ctex} -\usetikzlibrary{mindmap} -\begin{document} -%% TikZ 代码%% -\end{document} -``` - -```{tikz} -#| label: fig-tikz-mindmap -#| fig-cap: TikZ 绘制思维导图 -#| engine-opts: !expr list(classoption="tikz,svgnames", extra.preamble=c("\\usepackage[fontset=fandol]{ctex}","\\usetikzlibrary{mindmap}")) - -\begin{tikzpicture}[ - mindmap, every node/.style=concept, concept color=orange, text=white, - level 1/.append style={level distance=5cm, sibling angle=60, font=\LARGE}, - level 2/.append style={level distance=3.5cm, sibling angle=45, font=\large} - ] - - \node{\huge{\textsf{数据分析}}} [clockwise from=60] - child [concept color=DarkMagenta] { - node {\textit{数据准备}} [clockwise from=120] - child { node {数据对象}} - child { node {数据获取}} - child { node {数据清洗}} - child { node {数据操作}} - } - child [concept color=DarkBlue] { - node {\textit{数据探索}} [clockwise from=30] - child { node {ggplot2 入门}} - child { node {基础图形}} - child { node {统计图形}} - } - child [concept color=Brown] { - node {\textit{数据交流}} [clockwise from=-30] - child { node {交互图形}} - child { node {交互表格}} - child { node {交互应用}} - } - child [concept color=teal] { - node {\textit{统计分析}} [clockwise from=-75] - child { node {统计检验}} - child { node {回归分析}} - child { node {功效分析}} - } - child [concept color=purple] { - node {\textit{数据建模}} [clockwise from=-120] - child { node {网络分析}} - child { node {文本分析}} - child { node {时序分析}} - } - child [concept color=DarkGreen] { - node {\textit{优化建模}} [clockwise from=180] - child { node {统计计算}} - child { node {数值优化}} - child { node {优化问题}} - }; -\end{tikzpicture} -``` - -根节点视为一层,则该思维导图有三层。不同的颜色和字体来区分不同的层次或分类,数据分析划分为不同的部分,每个部分有若干章。根节点字体为黑体、第二、三级节点分别为楷体、宋体。 - -``` latex -\node{\huge{\textsf{数据科学}}} [clockwise from=60] -``` - -定义根节点,节点的文本设置为黑体,大小设置为 `\huge` 。由根节点向外辐射生成 6 个子节点,每隔 60 度设置一个子节点。 - -``` latex - child [concept color=DarkMagenta] { - node {\textit{数据准备}} [clockwise from=120] - child { node {数据对象}} - child { node {数据获取}} - child { node {数据清洗}} - child { node {数据操作}} - } -``` - -第一个子节点,颜色为饱和的紫色 DarkMagenta,二级子节点为「数据准备」,三级子节点有 4 个,逆时针 120 度的位置设置第一个三级子节点「数据对象」,然后顺时针往下,依次是「数据获取」、「数据清洗」和「数据操作」。 - -## SmartArt 图 {#sec-smart-diagram} - -Office 办公软件中有一个 SmartArt 绘图模块,专门用来绘制各类示意图。LaTeX 宏包 [smartdiagram](https://ctan.org/pkg/smartdiagram) 基于 TikZ 定制了一套风格类似的绘图库。 smartdiagram 宏包的主要绘图命令是 `\smartdiagram[参数值]` ,设置不同的参数值可以绘制不同的图形,如气泡图 `bubble diagram` 和描述图 `descriptive diagram` 等。 - -```{tikz} -#| label: fig-smartdiagram-bubble -#| fig-cap: 气泡图 -#| fig-width: 4 -#| fig-height: 4 -#| engine-opts: !expr list(extra.preamble=c("\\usepackage[fontset=fandol]{ctex}","\\usepackage{smartdiagram}")) - -\smartdiagram[bubble diagram]{ - Pandoc, - 编程语言~\\ (Python\\R/Julia\\JavaScript), - 编译引擎~\\ (Jupyter\\Knitr\\Observable), - 扩展Pandoc~\\ (交叉引用\\悬浮引用\\布局面板), - 文档项目~\\ (批量渲染\\共享配置), - 扩展接口~\\ (RStudio\\VS Code\\JupyterLab) -} -``` - -```{tikz} -#| label: fig-smartdiagram-descriptive -#| fig-cap: 描述图 -#| fig-width: 4 -#| fig-height: 4 -#| engine-opts: !expr list(extra.preamble=c("\\usepackage[fontset=fandol]{ctex}","\\usepackage{smartdiagram}")) - -\smartdiagram[descriptive diagram]{ - {编程语言, {Python、R、Julia、JavaScript}}, - {编译引擎, {Jupyter、Knitr、Observable}}, - {扩展Pandoc, {交叉引用、悬浮引用、布局面板}}, - {文档项目, {批量渲染、共享配置}}, - {扩展接口, {RStudio、VS Code、JupyterLab}}, -} -``` - -## TikZ 与 R {#sec-tikz-with-r} - -TikZ 绘图的优势有很多,语法简单、易于上手、功能强大、资源丰富、成熟稳定等,可以说几乎是集所有优点于一身。正因如此,**knitr** 包和 **tikzDevice** 包将其引入 R 语言社区中。**knitr** 包的 `tikz` 引擎是用来编译 TikZ 代码的,默认使用的是 standalone 文类。 - -R 语言绘图遇到公式时,略显不足,而排版公式是 LaTeX 的优势。正因为有所不足,所以我也不会纠结于工具层面的东西,什么好用用什么!三维 @fig-tikz-viridis 是用 LaTeX 里的优秀绘图工具 TikZ 制作的,细心的读者会发现本书多次用到这个工具。 - -众所周知,Donald Knuth 十年磨一剑,开发了 TeX 排版系统,就是解决排版数学公式的痛点。如 @fig-linear-model 所示,因图形中包含数学公式和符号,为了获得原汁原味的渲染效果,在使用 Base R 绘图的过程中通过 [**tikzDevice**](https://github.com/daqana/tikzDevice) 包引入了 LaTeX 中的 TikZ 绘图引擎。 - -```{r} -#| label: fig-linear-model -#| dev: 'tikz' -#| fig-cap: "简单线性模型" -#| out-width: "60%" -#| fig-width: 3 -#| fig-height: 3 -#| fig-process: !expr to_png - -opar <- par(mgp = c(2, 0.7, 0), mar = c(4, 3, 4, 1) + 0.1, no.readonly = TRUE) -set.seed(2021) -x <- rnorm(10) -y <- x + rnorm(5, sd = 0.25) -lab <- sample( - x = paste0("$\\mathcal{", LETTERS, "}$"), - size = 10, replace = FALSE -) -model <- lm(y ~ x) -rsq <- summary(model)$r.squared -rsq <- signif(rsq, 4) -plot(x, y, - main = "你好 \\LaTeX!", # 引入 7 号文本字体 - sub = "$\\mathcal{N}(x;\\mu,\\Sigma)$", - xlab = "$x$", ylab = "$y$", type = "n" -) -text(x = x, y = y, labels = lab) -abline(model, col = "black") -# 引入 7 号数学字体 -mtext(paste("线性模型: $\\mathsf{R}^{2}=", rsq, "$"), line = 0.5) -legend("bottomright", - legend = paste0( - "$y = ", round(coef(model)[2], 3), "x +", - round(coef(model)[1], 3), "$" - ), - bty = "n" -) -on.exit(par(opar), add = TRUE) -``` - -@fig-bessel-function 是贝塞尔函数 $\mathcal{K}_{\kappa}(u)$ 在区间 $(10^{-8}, 10^2)$ 和 $(0, 4)$ 上的图像。其中,@fig-bessel-function-1 是区间 $(10^{-8}, 10^2)$ 上的贝塞尔函数 $\mathcal{K}_{\kappa}(u)$, @fig-bessel-function-2 是区间 $(0, 4)$ 上的贝塞尔函数 $\mathcal{K}_{\kappa}(u)$ 。 - -```{r} -#| label: fig-bessel-function -#| fig-cap: 贝塞尔函数图像 -#| fig-subcap: -#| - 区间 $(10^{-8}, 10^2)$ 上的贝塞尔函数 -#| - 区间 $(0, 4)$ 上的贝塞尔函数 -#| dev: 'tikz' -#| fig-process: !expr to_png -#| fig-width: 3.5 -#| fig-height: 3.5 -#| layout-ncol: 2 -#| par: true - -x0 <- 2^(-20:10) -nus <- c(2:5, 10, 20) -x <- seq(0, 4, length.out = 501) - -plot(x0, x0^-8, - frame.plot = TRUE, # 添加绘图框 - log = "xy", # x 和 y 轴都取对数尺度 - axes = FALSE, # 去掉坐标轴 - xlab = "$u$", ylab = "$\\mathcal{K}_{\\kappa}(u)$", # 设置坐标轴标签 - type = "n", # 清除绘图区域的内容 - ann = TRUE, # 添加标题 x和y轴标签 - panel.first = grid() # 添加背景参考线 -) - -axis(1, - at = 10^(-8 + 2 * 0:5), - labels = paste0("$\\mathsf{10^{", -8 + 2 * 0:5, "}}$") -) -axis(2, - at = 10^(-8 + 16 * 0:4), - labels = paste0("$\\mathsf{10^{", -8 + 16 * 0:4, "}}$"), las = 1 -) - -for (i in seq(length(nus))) { - lines(x0, besselK(x0, nu = nus[i]), col = hcl.colors(9)[i], lwd = 2) -} -legend("topright", - legend = paste0("$\\kappa=", rev(nus), "$"), - col = hcl.colors(9, rev = TRUE), lwd = 2, cex = 1 -) - -x <- seq(0, 4, length.out = 501) -x <- x[x > 0] -plot(x, x, - frame.plot = TRUE, ylim = c(1e+0, 1e+20), log = "y", - xlab = "$u$", ylab = "$\\mathcal{K}_{\\kappa}(u)$", - type = "n", yaxt = "n", ann = TRUE, panel.first = grid() -) -axis(2, - at = c(1e+0, 1e+05, 1e+10, 1e+15, 1e+20), - labels = paste0("$\\mathsf{10^{", 5 * 0:4, "}}$"), las = 1 -) - -for (i in seq(length(nus))) { - lines(x, besselK(x, nu = nus[i]), col = hcl.colors(9)[i], lwd = 2) -} -legend("topright", - legend = paste0("$\\kappa=", rev(nus), "$"), - col = hcl.colors(9, rev = TRUE), lwd = 2, cex = 1 -) -```