Skip to content

Commit

Permalink
ny freeze
Browse files Browse the repository at this point in the history
  • Loading branch information
aleksanderbl29 committed Jun 28, 2024
1 parent e1e7e19 commit fc9a4fd
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"hash": "3630ed390f6dcc78eebfd755c2a988f8",
"hash": "296946762f60771b3c991bf4b5ba6b30",
"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",
"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 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"
Expand Down
2 changes: 2 additions & 0 deletions setup.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
library(rmarkdown)
library(knitr)

0 comments on commit fc9a4fd

Please sign in to comment.