Skip to content

Commit

Permalink
freeze
Browse files Browse the repository at this point in the history
  • Loading branch information
aleksanderbl29 committed Jun 28, 2024
1 parent 64f1f20 commit 385965a
Show file tree
Hide file tree
Showing 11 changed files with 15 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"hash": "3630ed390f6dcc78eebfd755c2a988f8",
"result": {
"engine": "knitr",
"markdown": "---\ntitle: Nemt Danmarkskort i R\ncitation:\n url: https://aleksanderbl.dk/guides/2024-05-19-danmarkskort-i-r\nbibliography: refs.bib\nexecute: \n echo: true\n output: false\n cache: true\nlink-external-icon: true\nlink-external-newwindow: true\nother-links:\n - text: Samlet script\n icon: code\n href: https://github.com/aleksanderbl29/aleksanderbldk/blob/main/guides/2024-06-29-danmarkskort-i-r/kort.r\n - text: Mikkel Krogsholms guide\n # icon: computer-mouse\n href: https://www.linkedin.com/pulse/easy-maps-denmark-r-mikkel-freltoft-krogsholm/ \nfig-cap-location: margin\ndate: 2024-06-29\n---\n\n\n## Baggrund\n\nDa jeg skulle lære at lave kort i R, lavede jeg et par hurtige googlesøgninger, hvor jeg kom frem til en god guide lavet af Mikkel Freltoft @krogsholm2021. Jeg opdagede dog hurtigt, at guiden er out-of-date - og derfor skriver jeg denne guide.\n\nI denne guide vil jeg gennemgå hvordan man kan skabe et kort over alle afstemningssteders områder i Danmark. Vi vil både producere et kort for Aarhus Kommune (@fig-aarhus) og et kort for alle afstemningsområder i hele Danmark (@fig-dk).\n\n## Pakker\n\nI R-universet findes der flere pakker til at arbejde med kort. Jeg har valgt at bruge `sf`som den pakke jeg sætter mig ind i, hvad kan. De fleste kan grundlæggende det samme og er bygget op omkring `geometry`, der er den kolonne (eller variabel) i en dataframe, der indeholder figurerne til kortet.\n\nFørst indlæser vi alle pakker der skal bruges.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(tidyverse) # Her får vi %>%, ggplot2 og andre smarte funktioner.\nlibrary(sf) # Skal bruges til at arbejde med \"simple features\" (figurer).\n```\n:::\n\n::: {.cell}\n\n:::\n\n\n\n## Data\n\nFor at tegne et præcist danmarkskort kan vi hente `geojson` data fra @apidawa2024. De udstiller en udmærket `API` der kan levere kortdata til os. For at vi kan benytte en `API` i `R` skal vi først definere et `URL` og dernæst bede om at downloade den fil der hører til på den hjemmeside.\n\n\n1. Først definerer vi `API`ens `URL`.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n## Gemmer URL til API-kald\nurl <- \"https://api.dataforsyningen.dk/afstemningsomraader?format=geojson\"\n```\n:::\n\n\n::: {.aside}\nDu behøver *ikke* at vide hvad en `API` er for at kunne gennemføre denne guide.\n:::\n\n2. Dernæst beder vi `R` om at downloade den efterspurgte fil til en midlertidig placering i computerens hukommelse.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Skaber midlertidig fil\ngeofile <- tempfile()\n\n# Henter geojson til tempfile\ndownload.file(url, geofile)\n```\n:::\n\n\nVi bruger funktionen `download.file()` og giver den `API`ens `URL` og den midlertidige dataplacering, hvor vi ønsker dataene hentet til.\n\n3. Til sidst omformer vi `geoJSON` til et `sf` format som `R` kan forstå.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Læser datafilen ind i R\ngeodata_st <- st_read(geofile)\nafstemningssteder_geodata <- st_as_sf(geodata_st)\n```\n:::\n\n\n::: {.aside}\nHer omformes først til `st` og dernæst til `sf`.\n:::\n\nNu har vi en dataframe i `afstemningssteder_geodata` der indeholder de figurer vi skal bruge for at lave et danmarkskort!\n\n### Optimering af data\n\nFor at vi nemt kan rendere vores plots er det en god ide at gøre figurerne en smule mindre. *Især* når vi er helt nede på afstemningsstedsniveau. Det er nok ikke så relevant, hvis vi arbejder med kommuner eller landsdele.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nafstemningssteder_geodata <- rmapshaper::ms_simplify(afstemningssteder_geodata,\n keep = 0.01, keep_shapes = TRUE)\n```\n:::\n\n\n::: {.aside}\nHer indlæser vi `rmapshaper::ms_simplify()` med pakkens navn for at slippe for at indlæse hele pakken - Vi skal nemlig ikke bruge det hele! Det samme har vi gjort med `ggthemes::theme_map()` nedenfor, fordi der kun skal bruges det ene *theme*\n:::\n\n## Visualisering\n\nNu kommer vi til den sjove del - At lave selve kortet! Vi skal bruge `ggplot2` fra det velkendte *tidyverse*, præcis som når vi laver grafer i mange andre sammenhænge.\n\nVi bruger `geom_sf`, der er indbygget i `ggplot2` til at tegne de figurer der er opbevaret i vores dataframe. Jeg putter derudover også `ggthemes::theme_map()` på, fordi jeg ikke synes kort behøver akselinjer og en baggrund. `theme_map()` er mit klart foretrukne tema til kort.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nggplot(afstemningssteder_geodata) +\n geom_sf() +\n ggthemes::theme_map() +\n labs(title = \"Afstemningssteder i Danmark\",\n caption = \"Kilde: DAWA/DAGI\") +\n theme(legend.position = \"none\",\n plot.title = element_text(size = 20),\n plot.caption = element_text(size = 10))\n```\n\n::: {.cell-output-display}\n![Kort over alle afstemningsområder i hele Danmark. Kilde og titel tilføjet.](index_files/figure-html/fig-dk-1.png){#fig-dk width=672}\n:::\n:::\n\n\n### Visualisering af udsnit\n\nFor at kun vise de afstemningsområder der ligger i Aarhus Kommune kan vi benytte os af `filter()` funktionen fra `dplyr` pakken. Med den kan vi filtrere i vores dataframe, så der kun vises afstemningssteder, hvor kommunenavnet er \"Aarhus\". Derudover har jeg tilføjet et `fill` på afstemningsområdets navn for at give hver område sin egen farve.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nafstemningssteder_geodata %>%\n filter(kommunenavn == \"Aarhus\") %>%\n ggplot(aes(fill = navn)) +\n geom_sf() +\n ggthemes::theme_map() +\n theme(legend.position = \"none\")\n```\n\n::: {.cell-output-display}\n![Kort over alle afstemningsområder i Aarhus Kommune.](index_files/figure-html/fig-aarhus-1.png){#fig-aarhus width=672}\n:::\n:::\n\n\n## Samlet kode\n\nAlt hvad jeg har gennemgået i denne guide kan findes i et samlet `r`-script [på min github](https://github.com/aleksanderbl29/aleksanderbldk/blob/main/guides/2024-06-29-danmarkskort-i-r/kort.r).\n\n\n::: {.cell}\n\n:::\n",
"supporting": [],
"filters": [
"rmarkdown/pagebreak.lua"
],
"includes": {},
"engineDependencies": {},
"preserve": {},
"postProcess": true
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 385965a

Please sign in to comment.