Tutorial 3a - Ggplot Avançado

Fazendo mapas

Com ggplot podemos fazer mapas para descrever informações geográficas e visualizar sua distribuição espacial.

Pacote geobr para mapas do Brasil

Vamos utilizar o pacote sf e o pacote geobr.

#install.packages("sf")
#install.packages("geobr")
library(geobr)
library(sf)
library(tidyverse)
library(readxl)
library(knitr)
library(ggrepel)
library(patchwork)

O pacote geobr serve para fazer download de mapas do BR, mais informações aqui.

Vamos mostrar como baixar os dados do Brasil:

estados <- read_state(
  year = 2020
)
Using year 2020

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |===                                                                   |   4%
  |                                                                            
  |=====                                                                 |   7%
  |                                                                            
  |========                                                              |  11%
  |                                                                            
  |==========                                                            |  15%
  |                                                                            
  |=============                                                         |  19%
  |                                                                            
  |================                                                      |  22%
  |                                                                            
  |==================                                                    |  26%
  |                                                                            
  |=====================                                                 |  30%
  |                                                                            
  |=======================                                               |  33%
  |                                                                            
  |==========================                                            |  37%
  |                                                                            
  |=============================                                         |  41%
  |                                                                            
  |===============================                                       |  44%
  |                                                                            
  |==================================                                    |  48%
  |                                                                            
  |====================================                                  |  52%
  |                                                                            
  |=======================================                               |  56%
  |                                                                            
  |=========================================                             |  59%
  |                                                                            
  |============================================                          |  63%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |=================================================                     |  70%
  |                                                                            
  |====================================================                  |  74%
  |                                                                            
  |======================================================                |  78%
  |                                                                            
  |=========================================================             |  81%
  |                                                                            
  |============================================================          |  85%
  |                                                                            
  |==============================================================        |  89%
  |                                                                            
  |=================================================================     |  93%
  |                                                                            
  |===================================================================   |  96%
  |                                                                            
  |======================================================================| 100%
head(estados)
Simple feature collection with 6 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -73.99045 ymin: -13.6937 xmax: -46.06142 ymax: 5.271841
Geodetic CRS:  SIRGAS 2000
  code_state abbrev_state name_state code_region name_region
1         11           RO   Rondônia           1       Norte
2         12           AC       Acre           1       Norte
3         13           AM   Amazônas           1       Norte
4         14           RR    Roraima           1       Norte
5         15           PA       Pará           1       Norte
6         16           AP      Amapá           1       Norte
                            geom
1 MULTIPOLYGON (((-65.3815 -1...
2 MULTIPOLYGON (((-71.07772 -...
3 MULTIPOLYGON (((-69.83766 -...
4 MULTIPOLYGON (((-63.96008 2...
5 MULTIPOLYGON (((-51.43248 -...
6 MULTIPOLYGON (((-50.45011 2...

Vamos fazer um gráfico do mapa:

estados %>% 
  ggplot()+
  geom_sf()

Podemos colorir o mapa com uma cor pré-definida:

estados %>% 
  ggplot()+
  geom_sf(fill = "#e32d91",
          color = "white")+
  theme_void()

Para fazer o mapa de um Estado

Vamos fazer o mapa de SC com todos seus municípios.

municipiosSC <- read_municipality(
  code_muni = "SC",
  year = 2020,
  simplified = TRUE #esta opção em FALSE traz uma resolução maior
)
Using year/date 2020

Downloading: 2 kB     
Downloading: 2 kB     
Downloading: 2 kB     
Downloading: 2 kB     
Downloading: 10 kB     
Downloading: 10 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 34 kB     
Downloading: 67 kB     
Downloading: 67 kB     
Downloading: 99 kB     
Downloading: 99 kB     
Downloading: 99 kB     
Downloading: 99 kB     
Downloading: 130 kB     
Downloading: 130 kB     
Downloading: 130 kB     
Downloading: 130 kB     
Downloading: 130 kB     
Downloading: 130 kB     
Downloading: 140 kB     
Downloading: 140 kB     
Downloading: 140 kB     
Downloading: 140 kB     
Downloading: 150 kB     
Downloading: 150 kB     
Downloading: 150 kB     
Downloading: 150 kB     
Downloading: 150 kB     
Downloading: 150 kB     
Downloading: 160 kB     
Downloading: 160 kB     
Downloading: 190 kB     
Downloading: 190 kB     
Downloading: 200 kB     
Downloading: 200 kB     
Downloading: 200 kB     
Downloading: 200 kB     
Downloading: 200 kB     
Downloading: 200 kB     
Downloading: 210 kB     
Downloading: 210 kB     
Downloading: 220 kB     
Downloading: 220 kB     
Downloading: 230 kB     
Downloading: 230 kB     
Downloading: 240 kB     
Downloading: 240 kB     
Downloading: 240 kB     
Downloading: 240 kB     
Downloading: 280 kB     
Downloading: 280 kB     
Downloading: 290 kB     
Downloading: 290 kB     
Downloading: 290 kB     
Downloading: 290 kB     
Downloading: 290 kB     
Downloading: 290 kB     
Downloading: 300 kB     
Downloading: 300 kB     
Downloading: 310 kB     
Downloading: 310 kB     
Downloading: 320 kB     
Downloading: 320 kB     
Downloading: 320 kB     
Downloading: 320 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 340 kB     
Downloading: 340 kB     
Downloading: 340 kB     
Downloading: 340 kB     
Downloading: 340 kB     
Downloading: 340 kB     
Downloading: 340 kB     
Downloading: 340 kB     
Downloading: 350 kB     
Downloading: 350 kB     
Downloading: 350 kB     
Downloading: 350 kB     
Downloading: 350 kB     
Downloading: 350 kB     
Downloading: 350 kB     
Downloading: 350 kB     
Downloading: 360 kB     
Downloading: 360 kB     
Downloading: 360 kB     
Downloading: 360 kB     
Downloading: 370 kB     
Downloading: 370 kB     
Downloading: 380 kB     
Downloading: 380 kB     
Downloading: 380 kB     
Downloading: 380 kB     
Downloading: 380 kB     
Downloading: 380 kB     
Downloading: 390 kB     
Downloading: 390 kB     
Downloading: 400 kB     
Downloading: 400 kB     
Downloading: 410 kB     
Downloading: 410 kB     
Downloading: 410 kB     
Downloading: 410 kB     
Downloading: 410 kB     
Downloading: 410 kB     
Downloading: 410 kB     
Downloading: 410 kB     
Downloading: 420 kB     
Downloading: 420 kB     
Downloading: 420 kB     
Downloading: 420 kB     
Downloading: 430 kB     
Downloading: 430 kB     
Downloading: 430 kB     
Downloading: 430 kB     
Downloading: 440 kB     
Downloading: 440 kB     
Downloading: 440 kB     
Downloading: 440 kB     
Downloading: 450 kB     
Downloading: 450 kB     
Downloading: 460 kB     
Downloading: 460 kB     
Downloading: 460 kB     
Downloading: 460 kB     
Downloading: 470 kB     
Downloading: 470 kB     
Downloading: 470 kB     
Downloading: 470 kB     
Downloading: 470 kB     
Downloading: 470 kB     
Downloading: 480 kB     
Downloading: 480 kB     
Downloading: 480 kB     
Downloading: 480 kB     
Downloading: 480 kB     
Downloading: 480 kB     
Downloading: 490 kB     
Downloading: 490 kB     
Downloading: 500 kB     
Downloading: 500 kB     
Downloading: 500 kB     
Downloading: 500 kB     
Downloading: 520 kB     
Downloading: 520 kB     
Downloading: 520 kB     
Downloading: 520 kB     
Downloading: 530 kB     
Downloading: 530 kB     
Downloading: 530 kB     
Downloading: 530 kB     
Downloading: 530 kB     
Downloading: 530 kB     
Downloading: 540 kB     
Downloading: 540 kB     
Downloading: 540 kB     
Downloading: 540 kB     
Downloading: 540 kB     
Downloading: 540 kB     
Downloading: 550 kB     
Downloading: 550 kB     
Downloading: 550 kB     
Downloading: 550 kB     
Downloading: 580 kB     
Downloading: 580 kB     
Downloading: 580 kB     
Downloading: 580 kB     
Downloading: 620 kB     
Downloading: 620 kB     
Downloading: 640 kB     
Downloading: 640 kB     
Downloading: 640 kB     
Downloading: 640 kB     
Downloading: 640 kB     
Downloading: 640 kB     
Downloading: 650 kB     
Downloading: 650 kB     
Downloading: 650 kB     
Downloading: 650 kB     
Downloading: 650 kB     
Downloading: 650 kB     
Downloading: 650 kB     
Downloading: 650 kB     
Downloading: 660 kB     
Downloading: 660 kB     
Downloading: 660 kB     
Downloading: 660 kB     
Downloading: 660 kB     
Downloading: 660 kB     
Downloading: 670 kB     
Downloading: 670 kB     
Downloading: 670 kB     
Downloading: 670 kB     
Downloading: 670 kB     
Downloading: 670 kB     
Downloading: 680 kB     
Downloading: 680 kB     
Downloading: 680 kB     
Downloading: 680 kB     
Downloading: 680 kB     
Downloading: 680 kB     
Downloading: 680 kB     
Downloading: 680 kB     
Downloading: 690 kB     
Downloading: 690 kB     
Downloading: 690 kB     
Downloading: 690 kB     
Downloading: 700 kB     
Downloading: 700 kB     
Downloading: 710 kB     
Downloading: 710 kB     
Downloading: 710 kB     
Downloading: 710 kB     
Downloading: 710 kB     
Downloading: 710 kB     
Downloading: 720 kB     
Downloading: 720 kB     
Downloading: 760 kB     
Downloading: 760 kB     
Downloading: 760 kB     
Downloading: 760 kB     
Downloading: 760 kB     
Downloading: 760 kB     
municipiosSC %>% 
  ggplot()+
  geom_sf(fill = "#2d3e50",
          color = "white",
          linewidth = 0.03)+
  theme_minimal()+
  theme(panel.grid = element_blank())

Também podemos colorir o mapa utilizando uma 3a variável, que devemos anexar ao objeto municipiosSC ou estados.

Como exemplo, vamos pegar dados da expectativa de vida para os estados brasileiros:

vida <- utils::read.csv(system.file("extdata/br_states_lifexpect2017.csv", package = "geobr"), encoding = "UTF-8")

Vamos unir as informações dos dois dataframes.

minexp = min(vida$ESPVIDA2017)
maxexp = max(vida$ESPVIDA2017)

estados %>% 
  left_join(vida, by=c("name_state"="uf")) %>% 
  ggplot()+
  geom_sf(aes(fill=ESPVIDA2017), color = "white", linewidth = 0.1)+
  scale_fill_distiller(palette = "Reds", name = "%", limits = c(minexp,maxexp))+
  theme_void()+
  theme(panel.grid = element_blank())

Pacote rnaturalearth para mapas de outros países

Instalar os pacotes rnaturalearthhires e rnaturalearth:

library(devtools)
Loading required package: usethis
#devtools::install_github("ropensci/rnaturalearthhires")
#install.packages("rnaturalearth")
#install.packages("rnaturalearthdata")
library(rnaturalearth)

Para obter o mapa de um país, por exemplo India:

map1 <- ne_countries(type = "countries", country = "India",
                     scale = "medium", returnclass = "sf")
map1 %>% 
  ggplot()+
  geom_sf()

Para obter o mapa dos Estados de um determinado país:

map2 <- ne_states("India", returnclass = "sf")
map2 %>% 
  ggplot()+
  geom_sf()

Exemplo: India

Vamos importar dados de energia solar fotovoltaica na India.

india <- read_xlsx("datamap/importIN.xlsx")

Vamos fazer uma breve análise exploratória:

glimpse(india) %>% 
  kable()
Rows: 38
Columns: 15
$ Year   <chr> "Andhra Pradesh", "Arunachal Pradesh", "Assam", "Bihar", "Chhat…
$ `2010` <dbl> 0.10, 0.03, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
$ `2011` <dbl> 2.10, 0.03, 0.00, 0.00, 0.00, 0.00, 5.00, 0.00, 0.00, 0.00, 0.0…
$ `2012` <dbl> 21.75, 0.03, 0.00, 0.00, 4.00, 0.00, 604.89, 16.80, 0.00, 0.00,…
$ `2013` <dbl> 23.35, 0.03, 0.00, 0.00, 4.00, 0.00, 857.90, 7.80, 0.00, 0.00, …
$ `2014` <dbl> 131.84, 0.03, 0.00, 0.00, 7.10, 0.00, 916.40, 10.30, 0.00, 0.00…
$ `2015` <dbl> 242.86, 0.03, 0.00, 0.00, 7.60, 0.00, 1000.05, 12.80, 0.00, 0.0…
$ `2016` <dbl> 572.96, 0.27, 0.00, 5.10, 93.58, 0.00, 1119.17, 15.39, 0.20, 1.…
$ `2017` <dbl> 1867.23, 0.27, 11.78, 108.52, 128.86, 0.71, 1249.37, 81.40, 0.7…
$ `2018` <dbl> 2195.46, 5.39, 12.45, 142.45, 231.35, 0.91, 1588.00, 216.85, 0.…
$ `2019` <dbl> 3085.68, 5.39, 22.40, 142.45, 231.35, 3.89, 2440.13, 224.52, 22…
$ `2020` <dbl> 3610.02, 5.61, 41.23, 151.57, 231.35, 4.78, 2948.37, 252.14, 32…
$ `2021` <dbl> 4203.00, 5.61, 42.99, 159.51, 252.48, 7.44, 4430.82, 407.83, 42…
$ `2022` <dbl> 4386.76, 11.23, 117.94, 190.63, 518.08, 19.95, 7180.03, 910.63,…
$ `2023` <dbl> 4534.19, 11.64, 147.92, 192.89, 948.82, 26.49, 9254.57, 1029.16…
Year 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023
Andhra Pradesh 0.10 2.10 21.75 23.35 131.84 242.86 572.96 1867.23 2195.46 3085.68 3610.02 4203.00 4386.76 4534.19
Arunachal Pradesh 0.03 0.03 0.03 0.03 0.03 0.03 0.27 0.27 5.39 5.39 5.61 5.61 11.23 11.64
Assam 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11.78 12.45 22.40 41.23 42.99 117.94 147.92
Bihar 0.00 0.00 0.00 0.00 0.00 0.00 5.10 108.52 142.45 142.45 151.57 159.51 190.63 192.89
Chhattisgarh 0.00 0.00 4.00 4.00 7.10 7.60 93.58 128.86 231.35 231.35 231.35 252.48 518.08 948.82
Goa 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.71 0.91 3.89 4.78 7.44 19.95 26.49
Gujarat 0.00 5.00 604.89 857.90 916.40 1000.05 1119.17 1249.37 1588.00 2440.13 2948.37 4430.82 7180.03 9254.57
Haryana 0.00 0.00 16.80 7.80 10.30 12.80 15.39 81.40 216.85 224.52 252.14 407.83 910.63 1029.16
Himachal Pradesh 0.00 0.00 0.00 0.00 0.00 0.00 0.20 0.73 0.73 22.68 32.93 42.73 76.16 87.49
Jammu & Kashmir 0.00 0.00 0.00 0.00 0.00 0.00 1.00 1.36 1.36 14.83 19.30 20.73 54.73 49.44
Jharkhand 0.00 0.00 4.00 16.00 16.00 16.00 16.19 23.27 25.67 34.95 38.40 52.06 88.79 105.84
Karnataka 6.00 6.00 9.00 14.00 31.00 77.22 145.46 1027.84 4944.12 6095.55 7277.93 7355.17 7590.81 8241.41
Kerala 0.03 0.03 0.84 0.03 0.03 0.03 13.04 74.20 107.94 138.59 142.23 257.00 363.18 761.44
Ladakh 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 7.80
Madhya Pradesh 0.10 0.10 2.10 37.32 347.17 558.58 776.37 857.04 1305.35 1840.16 2258.46 2463.22 2717.95 2802.14
Maharashtra 0.00 4.00 20.00 100.00 249.25 360.75 385.76 452.37 1239.18 1633.54 1801.80 2289.97 2631.02 4722.90
Manipur 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.03 0.06 3.44 5.16 6.36 12.25 12.28
Meghalaya 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.02 0.12 0.12 0.12 4.15 4.15
Mizoram 0.00 0.00 0.00 0.00 0.00 0.00 0.10 0.10 0.20 0.50 1.52 1.53 7.90 28.01
Nagaland 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.50 1.00 1.00 1.00 1.00 3.04 3.04
Odisha 0.00 0.00 13.00 13.00 30.50 31.76 66.92 79.42 79.57 394.73 397.84 401.72 451.24 453.17
Punjab 1.33 2.33 9.33 9.33 16.85 185.27 405.06 793.95 905.62 905.62 947.10 959.50 1100.07 1167.26
Rajasthan 0.15 5.15 197.65 552.90 730.10 942.10 1269.93 1812.93 2332.77 3226.79 5137.91 5732.58 12564.87 17055.70
Sikkim 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.07 0.07 4.68 4.68
Tamil Nadu 0.05 5.05 15.05 17.11 98.36 142.58 1061.82 1691.83 1908.57 2575.22 3915.88 4475.21 5067.18 6736.43
Telangana 0.00 0.00 0.00 0.00 0.00 61.25 527.84 1286.98 3291.25 3592.09 3620.75 3953.12 4520.48 4666.03
Tripura 0.00 0.00 0.00 0.00 0.00 5.00 5.00 5.09 5.09 5.09 9.41 9.41 14.89 17.60
Uttar Pradesh 0.38 0.38 12.38 17.38 21.08 71.26 143.50 336.73 694.41 960.10 1095.10 1712.50 2244.43 2515.22
Uttarakhand 0.05 0.05 5.05 5.05 5.05 5.00 41.15 233.49 260.08 306.75 315.90 368.41 573.54 575.53
West Bengal 1.15 1.15 2.05 2.05 7.05 7.21 7.77 26.14 37.32 75.95 114.46 149.84 166.00 179.98
Andaman & Nicobar 0.10 0.10 0.01 5.10 5.10 5.10 5.10 6.56 6.56 11.73 12.19 29.22 29.49 29.91
Chandigarh 0.00 0.00 0.00 0.00 2.00 4.50 6.81 17.32 25.20 34.71 40.55 45.16 55.17 58.69
Dadar & Nagar Haveli 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.97 5.46 5.46 5.46 5.46 5.46 5.46
Daman & Diu 0.00 0.00 0.00 0.00 0.00 0.00 4.00 10.46 3.86 14.47 19.86 40.55 40.72 41.01
Delhi 0.05 2.14 2.53 2.56 5.15 5.47 14.28 40.27 69.57 126.89 165.16 192.97 211.12 218.26
Lakshadweep 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.71 0.75 0.75 0.75 0.75 3.27 3.27
Puducherry 0.03 0.79 0.03 0.03 0.03 0.03 0.02 0.08 0.16 3.14 5.51 9.33 13.69 35.53
Others 0.00 0.00 0.00 0.79 0.82 0.79 58.31 58.31 0.00 0.00 0.00 0.00 45.01 45.01
skimr::skim(india)
Data summary
Name india
Number of rows 38
Number of columns 15
_______________________
Column type frequency:
character 1
numeric 14
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Year 0 1 3 20 0 38 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
2010 0 1 0.27 1.00 0.00 0.00 0.00 0.05 6.00 ▇▁▁▁▁
2011 0 1 0.92 1.75 0.00 0.00 0.00 0.78 6.00 ▇▁▁▁▁
2012 0 1 24.77 101.82 0.00 0.00 0.03 8.01 604.89 ▇▁▁▁▁
2013 0 1 44.38 162.77 0.00 0.00 0.39 12.08 857.90 ▇▁▁▁▁
2014 0 1 69.26 194.76 0.00 0.00 0.78 16.64 916.40 ▇▁▁▁▁
2015 0 1 98.53 237.73 0.00 0.00 4.75 53.88 1000.05 ▇▁▁▁▁
2016 0 1 177.97 343.78 0.00 0.12 7.29 131.02 1269.93 ▇▁▁▁▁
2017 0 1 323.39 562.96 0.00 0.72 24.70 310.92 1867.23 ▇▁▁▁▁
2018 0 1 569.60 1092.11 0.00 0.93 25.44 585.83 4944.12 ▇▁▁▁▁
2019 0 1 741.60 1374.44 0.00 4.19 34.83 777.90 6095.55 ▇▁▁▁▁
2020 0 1 911.26 1715.51 0.00 5.47 40.89 809.79 7277.93 ▇▁▁▁▁
2021 0 1 1054.88 1899.38 0.00 6.63 48.61 821.58 7355.17 ▇▁▁▁▁
2022 0 1 1420.96 2741.79 0.00 13.99 103.37 1052.71 12564.87 ▇▁▁▁▁
2023 0 1 1757.38 3510.26 3.04 26.87 126.88 1132.73 17055.70 ▇▁▁▁▁

Precisamos converter as colunas character para numeric:

india <- india %>% 
  mutate(across(2:15, as.numeric)) %>% 
  rename(name = Year)

india %>% 
  kable()
name 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023
Andhra Pradesh 0.10 2.10 21.75 23.35 131.84 242.86 572.96 1867.23 2195.46 3085.68 3610.02 4203.00 4386.76 4534.19
Arunachal Pradesh 0.03 0.03 0.03 0.03 0.03 0.03 0.27 0.27 5.39 5.39 5.61 5.61 11.23 11.64
Assam 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11.78 12.45 22.40 41.23 42.99 117.94 147.92
Bihar 0.00 0.00 0.00 0.00 0.00 0.00 5.10 108.52 142.45 142.45 151.57 159.51 190.63 192.89
Chhattisgarh 0.00 0.00 4.00 4.00 7.10 7.60 93.58 128.86 231.35 231.35 231.35 252.48 518.08 948.82
Goa 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.71 0.91 3.89 4.78 7.44 19.95 26.49
Gujarat 0.00 5.00 604.89 857.90 916.40 1000.05 1119.17 1249.37 1588.00 2440.13 2948.37 4430.82 7180.03 9254.57
Haryana 0.00 0.00 16.80 7.80 10.30 12.80 15.39 81.40 216.85 224.52 252.14 407.83 910.63 1029.16
Himachal Pradesh 0.00 0.00 0.00 0.00 0.00 0.00 0.20 0.73 0.73 22.68 32.93 42.73 76.16 87.49
Jammu & Kashmir 0.00 0.00 0.00 0.00 0.00 0.00 1.00 1.36 1.36 14.83 19.30 20.73 54.73 49.44
Jharkhand 0.00 0.00 4.00 16.00 16.00 16.00 16.19 23.27 25.67 34.95 38.40 52.06 88.79 105.84
Karnataka 6.00 6.00 9.00 14.00 31.00 77.22 145.46 1027.84 4944.12 6095.55 7277.93 7355.17 7590.81 8241.41
Kerala 0.03 0.03 0.84 0.03 0.03 0.03 13.04 74.20 107.94 138.59 142.23 257.00 363.18 761.44
Ladakh 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 7.80
Madhya Pradesh 0.10 0.10 2.10 37.32 347.17 558.58 776.37 857.04 1305.35 1840.16 2258.46 2463.22 2717.95 2802.14
Maharashtra 0.00 4.00 20.00 100.00 249.25 360.75 385.76 452.37 1239.18 1633.54 1801.80 2289.97 2631.02 4722.90
Manipur 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.03 0.06 3.44 5.16 6.36 12.25 12.28
Meghalaya 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.02 0.12 0.12 0.12 4.15 4.15
Mizoram 0.00 0.00 0.00 0.00 0.00 0.00 0.10 0.10 0.20 0.50 1.52 1.53 7.90 28.01
Nagaland 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.50 1.00 1.00 1.00 1.00 3.04 3.04
Odisha 0.00 0.00 13.00 13.00 30.50 31.76 66.92 79.42 79.57 394.73 397.84 401.72 451.24 453.17
Punjab 1.33 2.33 9.33 9.33 16.85 185.27 405.06 793.95 905.62 905.62 947.10 959.50 1100.07 1167.26
Rajasthan 0.15 5.15 197.65 552.90 730.10 942.10 1269.93 1812.93 2332.77 3226.79 5137.91 5732.58 12564.87 17055.70
Sikkim 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.07 0.07 4.68 4.68
Tamil Nadu 0.05 5.05 15.05 17.11 98.36 142.58 1061.82 1691.83 1908.57 2575.22 3915.88 4475.21 5067.18 6736.43
Telangana 0.00 0.00 0.00 0.00 0.00 61.25 527.84 1286.98 3291.25 3592.09 3620.75 3953.12 4520.48 4666.03
Tripura 0.00 0.00 0.00 0.00 0.00 5.00 5.00 5.09 5.09 5.09 9.41 9.41 14.89 17.60
Uttar Pradesh 0.38 0.38 12.38 17.38 21.08 71.26 143.50 336.73 694.41 960.10 1095.10 1712.50 2244.43 2515.22
Uttarakhand 0.05 0.05 5.05 5.05 5.05 5.00 41.15 233.49 260.08 306.75 315.90 368.41 573.54 575.53
West Bengal 1.15 1.15 2.05 2.05 7.05 7.21 7.77 26.14 37.32 75.95 114.46 149.84 166.00 179.98
Andaman & Nicobar 0.10 0.10 0.01 5.10 5.10 5.10 5.10 6.56 6.56 11.73 12.19 29.22 29.49 29.91
Chandigarh 0.00 0.00 0.00 0.00 2.00 4.50 6.81 17.32 25.20 34.71 40.55 45.16 55.17 58.69
Dadar & Nagar Haveli 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.97 5.46 5.46 5.46 5.46 5.46 5.46
Daman & Diu 0.00 0.00 0.00 0.00 0.00 0.00 4.00 10.46 3.86 14.47 19.86 40.55 40.72 41.01
Delhi 0.05 2.14 2.53 2.56 5.15 5.47 14.28 40.27 69.57 126.89 165.16 192.97 211.12 218.26
Lakshadweep 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.71 0.75 0.75 0.75 0.75 3.27 3.27
Puducherry 0.03 0.79 0.03 0.03 0.03 0.03 0.02 0.08 0.16 3.14 5.51 9.33 13.69 35.53
Others 0.00 0.00 0.00 0.79 0.82 0.79 58.31 58.31 0.00 0.00 0.00 0.00 45.01 45.01

Tratando os dados:

india %>% 
  pivot_longer(2:15, names_to = "year", values_to = "mw") %>% 
  mutate(year = as.numeric(year)) %>% 
  ggplot(aes(x=year, y=mw, fill=name))+
  geom_col()+
  facet_wrap(vars(name),
             scales = "free_y")+
  theme(legend.position = "none")

ggsave("all.jpg",
       height = 10,
       width = 12)

Escolhendo dados de um ano especifico (p.ex. 2015):

minexp = min(india$`2023`)
maxexp = max(india$`2023`)

maxcities <- india %>% 
  select(name, `2015`) %>% 
  filter(`2015` > mean(`2015`))

maxcities_sf <- maxcities %>% 
  left_join(map2)
Joining with `by = join_by(name)`

Mapa para 2015:

india2015 <- india %>%
   select(1,`2015`) %>% 
   rename(mw = `2015`) %>% 
   left_join(map2) %>% 
   ggplot()+
   geom_sf(aes(fill=mw/1000, geometry = geometry), color = "white", linewidth = 0.1)+
  geom_text_repel(data = maxcities_sf,
                  aes(x=longitude,
                      y=latitude,
                      label = name),
                  fontface = "bold", 
                  nudge_x = c(10, -5, 10, -5, -3, -5,5), 
                  nudge_y = c(0.25,-0.25, 6, -0.5, 2,1,1))+
  scale_fill_distiller(palette = "Reds", 
                       name = "GW",
                       limits = c(minexp/1000,maxexp/1000),
                       direction = 1)+
  theme_void()+
  theme(panel.grid = element_blank())+
  labs(title = "Solar PV Installed Capacity in 2015")
Joining with `by = join_by(name)`
india2015

Preparando os dados para 2023:

maxcities <- india %>% 
  select(name, `2023`) %>% 
  filter(`2023` > mean(`2023`))

maxcities_sf <- maxcities %>% 
  left_join(map2)
Joining with `by = join_by(name)`

Mapa para 2023:

india2023 <- india %>%
   select(1,`2023`) %>% 
   rename(mw = `2023`) %>% 
   left_join(map2) %>% 
   ggplot()+
   geom_sf(aes(fill=mw/1000, geometry = geometry), 
           color = "white", linewidth = 0.1)+
  geom_text_repel(data = maxcities_sf,
                  aes(x=longitude,
                      y=latitude,
                      label = name),
                  fontface = "bold", 
                  nudge_x = c(10, -5, -5, 12, -5,-5,-5,5,-3), 
                  nudge_y = c(0.25,-0.25, 0.5, 8, -0.5,2,-2,2,5))+
  scale_fill_distiller(palette = "Reds", 
                       name = "GW",
                       limits = c(minexp/1000,maxexp/1000),
                       direction = 1)+
  theme_void()+
  theme(panel.grid = element_blank())+
  labs(title = "Solar PV Installed Capacity in 2023")
Joining with `by = join_by(name)`
india2023

Juntando os dois gráficos

india_2015_2023 <- india2015 + india2023 + plot_layout(ncol=1)

india_2015_2023

ggsave("india2015_2023.jpg",
       width = 7,
       height = 10)

Calculando o market share de cada estado:

total <- sum(india$`2023`)
maxcities_total <- sum(maxcities$`2023`)

colnames(maxcities) <- c("name","mw")

other <- data.frame(name = "Other",
                    mw = total - maxcities_total)

maxcities <- rbind(maxcities, other)

maxcities %>% 
  mutate(market = round(100*mw/total,2),
         mw_2030 = 300000*market/100)
# A tibble: 10 × 4
   name               mw market mw_2030
   <chr>           <dbl>  <dbl>   <dbl>
 1 Andhra Pradesh  4534.   6.79   20370
 2 Gujarat         9255.  13.9    41580
 3 Karnataka       8241.  12.3    37020
 4 Madhya Pradesh  2802.   4.2    12600
 5 Maharashtra     4723.   7.07   21210
 6 Rajasthan      17056.  25.5    76620
 7 Tamil Nadu      6736.  10.1    30270
 8 Telangana       4666.   6.99   20970
 9 Uttar Pradesh   2515.   3.77   11310
10 Other           6252.   9.36   28080