Cum să desenați o diagramă de plăcintă pe o hartă în R cu ggplot2 și să împrăștiați plăcinta? Un exemplu pentru Turcia

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe Ozancan Ozdemirși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

PIE Grafic … băiatul nedescris al familiei de vizualizare. Cu toate acestea, obține o popularitate, mai ales atunci când este în conjugare cu hărțile. De exemplu, a fost publicată următoarea diagramă pentru a ilustra distribuția voturilor în toată țara.

În această postare, vă voi arăta cum puteți desena o diagramă de plăcintă pe hartă în r folosind scatterpie pachet. Puteți afla mai multe despre pachet, uitându -vă la vigneta sa aici.

În timpul acestui tutorial, parcurgem în special desenarea unui grafic pe o hartă a curcanului, explicând pașii cheie cu privire la pachet.

Dacă doriți să știți cum să desenați o hartă de curcan în R, puteți vizita una dintre postările mele anterioare aici.

Cel mai important punct de utilizare a pachetului este setul de date. Setul de date cu care lucrați ar trebui să aibă patru coloane cheie pentru a putea utiliza pachetul. Aceste coloane sunt:

  • lung: Longitudinea centrului graficului de plăcintă

  • lat: Latitudinea centrului graficului de plăcintă

  • Clasa1: Prima clasă a graficului de plăcintă (în %)

  • Clasa2: A doua clasă a graficului de plăcintă (în %)

  • raze: Raza graficului de plăcintă (opțional)

Vă puteți gândi la graficele produse de acest pachet este un strat în care mai multe diagrame de plăcintă sunt împrăștiate pe axa latitudinii și longitudinii.

Mai întâi sunați la biblioteci.

library(ggplot2)
library(sf) # for reading the shapefile
library(scatterpie) # for drawing pie charts

Să luăm în considerare un set de date tr_data care conține nume de provincie, informații geografice corespunzătoare (LAT și Long) și două categorii pentru nivel de educație pe provincie (cel puțin absolvent universitar sau mai jos), care este preluat de la TSI Turkish Statistic Institute, iar datele sunt din 2023.

head(tr_data)

              il at_least_university_graduate    below   lat  long
1          Adana                    16.867601 83.13240 37.00 35.32
2       Adiyaman                    13.657282 86.34272 37.76 38.28
3 Afyonkarahisar                    13.788480 86.21152 38.76 30.54
4           Agri                     9.909207 90.09079 39.72 43.05
5        Aksaray                    13.256213 86.74379 38.37 33.99
6         Amasya                    17.080516 82.91948 40.65 35.83

Următorul cod arată exact cum scatterpie fabrică. Funcția principală există geom_scatterpie Aceasta necesită coloane longitudine, latitudine și categorie ca intrare.

ggplot() + geom_scatterpie(aes(x=long, y=lat), data=tr_data,
                           cols=c("at_least_university_graduate","below")) 

imagine

Graficul de împrăștiere de mai sus ilustrează practic liniile generale ale hărții Turciei. Acum, să adăugăm un alt strat, care este o hartă a curcanului.

st_data_turkey <- st_read("https://geodata.ucdavis.edu/gadm/gadm4.1/json/gadm41_TUR_1.json")
head(st_data_turkey)

Simple feature collection with 6 features and 11 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 29.6638 ymin: 36.5385 xmax: 44.4965 ymax: 41.0905
Geodetic CRS:  WGS 84
    GID_1 GID_0 COUNTRY   NAME_1      VARNAME_1 NL_NAME_1 TYPE_1 ENGTYPE_1 CC_1
1 TUR.1_1   TUR  Turkey    Adana         Seyhan        NA     Il  Province   NA
2 TUR.2_1   TUR  Turkey Adiyaman       Adıyaman        NA     Il  Province   NA
3 TUR.3_1   TUR  Turkey    Afyon Afyonkarahisar        NA     Il  Province   NA
4 TUR.4_1   TUR  Turkey     Agri  Ağri|Karaköse        NA     Il  Province   NA
5 TUR.5_1   TUR  Turkey  Aksaray             NA        NA     Il  Province   NA
6 TUR.6_1   TUR  Turkey   Amasya             NA        NA     Il  Province   NA
  HASC_1 ISO_1                       geometry
1  TR.AA TR-01 MULTIPOLYGON (((35.4143 36....
2  TR.AD TR-02 MULTIPOLYGON (((38.1033 37....
3  TR.AF    NA MULTIPOLYGON (((30.1946 37....
4  TR.AG TR-04 MULTIPOLYGON (((43.102 39.3...
5  TR.AK TR-68 MULTIPOLYGON (((33.2495 38....
6  TR.AM TR-05 MULTIPOLYGON (((35.3708 40....

Codul de mai jos arată cum să desenezi o hartă a Turciei folosind sf pachet.

ggplot(data = st_data_turkey) +geom_sf()

imagineimagine

Avem toate ingredientele acum! Să combinăm împreună harta și graficul de plăcintă.

ggplot(data = st_data_turkey) +geom_sf()+ geom_scatterpie(aes(x=long, y=lat), data=tr_data,
                           cols=c("at_least_university_graduate","below")) 

imagineimagine

În loc să combinați aceste două funcții folosind două date separate, puteți combina și geodata de curcan și tr_data pe numele provinciei și continuați și cu aceste date.

După această notă de subsol, putem personaliza complotul adăugând unele etichete și schimbând tema. Putem edita culori în etichete de diagramă și legendă folosind scale_fill_manual.

Putem schimba tema hărții folosind theme_void() şi theme() Funcții.

Putem adăuga nume din provincie pe hartă folosind geom_text() funcţie.

ggplot(data = st_data_turkey) +geom_sf()+ geom_scatterpie(aes(x=long, y=lat), data=tr_data,
                           cols=c("at_least_university_graduate","below")) + scale_fill_manual(values = c("#FF9999", "#66B3FF"),labels = c("At least university graduate", "Below university graduate")) +
  labs(title = "Turkey Map with Pie Chart",
       subtitle = "Education Level by Province",
       caption = "Source: TSI | Ozancan Ozdemir") +
  theme_void() + geom_text(aes(x=long, y=lat, label=il), data=tr_data, size=2, color="black") +
  theme(plot.title = element_text(hjust = 0.5, size = 20),
        plot.subtitle = element_text(hjust = 0.5, size = 15),
        plot.caption = element_text(hjust = 0.5, size = 10),
        legend.position = "top",
        legend.title = element_blank())

imagineimagine

Pentru mai multe întrebări și comentarii, vă rugăm să nu ezitați să vă adresați prin e-mail.

Puteți face clic aici pentru a reveni la pagina principală

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.