Le comté: plans de rues simples en R
J’ai intitulé ce post « The County ». De retour chez eux en Virginie-Occidentale, les gens se réfèrent souvent aux entités gouvernementales par leur juridiction ou par où ils tirent leur autorité. Nous appelons la police «la loi» et les diverses fonctions, que ce soit pour la santé publique ou les impôts, «le comté». Aujourd’hui, je dessine une carte du comté de Fayetteville, WV. Même en allant en ville pour payer vos impôts, vous diriez «aller voir The County». Cela sonnera vrai pour les gens de chez eux, et probablement pour d’autres régions rurales.
Depuis que je suis jeune, je suis fasciné par les cartes, les globes (surtout les anciens avec les routes commerciales) et la cartographie en général. J’ai donc été ravi de voir quelques exemples de création de cartes fusionnés avec la visualisation de données sur Twitter récemment.
J’ai été inspiré pour créer une carte du siège du comté de mon comté d’origine en Virginie-Occidentale par de belles interprétations de Springfield, MO par Connor Rothschild à et Ashville, NC par Josh McCrain. Consultez leurs flux pour en savoir plus. Et merci les gars !!
Les bibliothèques ci-dessous ne sont pas courantes, sauf si vous utilisez les données et les fonctions de mappage normalement. C’était ma première carte, j’ai donc dû les installer. En utilisant le remotes
package nécessite moins de dépendances, et est donc généralement plus rapide que devtools
lors de l’installation d’autres packages.
-
osmdata
contient les données du plan des rues ouvertes utilisées pour tracer les routes, les ponts et les voies navigables; Fayetteville montre quelques trous dans les données – plus ci-dessous -
ggspatial
fournit des fonctionnalités pour un relèvement de la boussole Nord sur nos cartes -
showtext
permet l’utilisation des polices Google dans les graphiques ggplot2
#library(remotes)
#remotes::install_github("ropensci/osmdata") #remotes::install_github("paleolimbot/ggspatial") #remotes::install_github("yixuan/showtext")
Les utilisateurs de R connaissent les suspects habituels ci-dessous, en particulier tidyverse
. En particulier, j’utilise le ggmap
package pour tracer les fichiers de forme nécessaires aux données spatiales (Kahle et Wickham 2013).
library(tidyverse)
library(osmdata)
library(showtext)
library(ggmap)
library(ggExtra)
library(ggspatial)
library(showtext)
Une fois le chargement osmdata
package, vous pouvez voir ci-dessous les fonctionnalités disponibles pour les balises données. Une note sur le tag bridge: il retournera « oui ». C’était déroutant jusqu’à ce que j’examine les données car il ne semble pas y avoir de différenciation dans les types de ponts – pas nocif dans ce cas.
Pour tracer le plan de Fayetteville, j’ai besoin de connaître sa situation géographique. Le code suivant renverra deux latitudes et deux longitudes qui définissent la zone de Fayetteville. Ces coordonnées forment la base pour encadrer le graphique ci-dessous.
fa_wv <- getbb("Fayetteville West Virginia")
fa_wv
Ingestion de données OSM
Ensuite, je tire les données réelles des rues du paquet de cartes ouvertes qui définit les grandes, moyennes et petites rues (extraites des publications ci-dessus). En plus des rues, Fayetteville a deux caractéristiques de notoriété mondiale: la New River et ses eaux vives de classe mondiale et la Pont de New River Gorge (le plus long pont en arc de l’hémisphère occidental, anciennement le monde). Vous pouvez le voir sous un angle différent sur ma page « à propos » ci-dessus. Je récupère également chacun de ces éléments dans les données OSM. Ce code est extrait des excellents exemples de Connor et Josh.
Le code ci-dessous fournit une vue des données. Il est également utile de faire défiler et de voir quelles autres rues ou caractéristiques peuvent justifier d’être mises en évidence sur la carte.
View(big_streets[["osm_lines"]])
View(med_streets[["osm_lines"]])
View(small_streets[["osm_lines"]])
View(bridge[["osm_lines"]])
View(river[["osm_lines"]])
Il est utile de définir des ensembles d’entités dans lesquelles tracer ggplot2
. Le code ci-dessous extrait les données pour tracer des rues individuelles pour un emplacement donné. N’oubliez pas que nous avons tiré les rues de Fayetteville juste au-dessus.
us_19 <- big_streets[["osm_lines"]] %>%
filter(ref == "US 19")
wv_16 <- med_streets[["osm_lines"]] %>%
filter(ref == "WV 16")
fayette_station <- small_streets[["osm_lines"]] %>%
filter(name =="Fayette Station Road")
west_maple_ave <- small_streets[["osm_lines"]] %>%
filter(name == "West Maple Avenue")
maple_ave_west <- small_streets[["osm_lines"]] %>%
filter(name == "Maple Avenue West") maple_lane <- small_streets[["osm_lines"]] %>%
filter(name == "Maple Lane")
north_court_st <- med_streets[["osm_lines"]] %>%
filter(name == "North Court Street") nr_gorge_bridge <- bridge[["osm_lines"]] %>%
filter(name == "New River Gorge Bridge")
new_river <- river[["osm_lines"]] %>%
filter(name == "New River")
Je suis un connaisseur absolu de tout ce qui concerne les polices et l’écriture. le showtext
package fournit des fonctionnalités permettant, entre autres, d’utiliser les polices Google dans ggplot2
graphique. J’aime que l’ajout d’une police soit aussi simple que de lui dire laquelle, puis de la nommer pour votre code. le showtext_auto
la fonction ci-dessous indique ggplot2
pour rendre le texte en utilisant ces polices automatiquement.
## Loading Google fonts (https://fonts.google.com/) font_add_google("Libre Baskerville", "baskerville") font_add_google("Playfair Display", "playfair")
showtext_auto()
Son agréable de tracer quelques endroits d’intérêt sur la carte. Et, le code ci-dessous fournit les données pour cela. J’ai obtenu les données de longitude et de latitude ci-dessous de Google Maps. Les exemples cités ci-dessus utilisés rvest
pour gratter les lieux, mais bon, Fayetteville n’est pas si grand que ça !!
essential <- tribble( ~place, ~lon, ~lat,
"Bridge Brew Works", 81.11368, 38.01651,
"Court House", -81.103755, 38.053422,
"Pies & Pints", -81.105514, 38.050783,
"Wood Iron Eatery", -81.102757, 38.053110 )
Quelques mots là-dessus. Bien que non tracé ci-dessous, Bridge Brew Works fait facilement la meilleure bière de l’État. Les lagers, en particulier, sont impressionnantes (les lagers en général sont un peu plus difficiles à préparer que les bières en raison des exigences strictes de température pour la fermentation et la lagering, mais je m’égare). Le palais de justice de Fayette est un bâtiment historique avec toute la pompe et le charme et est vraiment le siège du comté – toutes les affaires essentielles y sont menées.
Tartes et pintes a la meilleure pizza et bière autour. Il sert les bières Bridge Brew Works susmentionnées aux côtés d’un excellent cidre de Hawk Knob Cidre & Hydromel. Je recommande vivement les ailes. Enfin, Sheri et moi aimons le brunch, et le meilleur endroit du comté est Bois fer à repasser. J’ai obtenu mon doctorat. dans la Mecque nord-américaine du café – Seattle. Le café de Wood Iron est à égalité avec un café de Seattle, des éloges car je suis un snob de café (snob de thé aussi mais c’est un autre post). Vous constaterez qu’ils vendent le célèbre J.Q. Sel Dickinson là aussi bien dans les versions régulières et fumées. Idéal pour un steak, un barbecue ou une finition. Le Cathedral Cafe propose de la bonne nourriture, mais le café laisse à désirer. Si vous êtes à Fayetteville pour le rafting, l’escalade ou le vélo, alors vous devez vérifier ces endroits – ils sont tous à distance de marche les uns des autres. J’espère que ces endroits sont toujours là au moment où nous sortons tous de la peste COVID-19.
Sur l’intrigue avant de me déprimer, je suis coincé dans l’isolement induit par COVID-19 loin en Oklahoma. Surtout, l’intrigue ci-dessous est votre typique ggplot2
configuration, sauf que j’utilise un géom atypique, geom_sf
qui trace les données d’un fichier de forme, une nécessité pour la cartographie.
J’appelle le ggspatial
package pour obtenir la boussole nord souhaitée sur la version plus légère de la carte. J’ai essayé de changer le style de la flèche «Nord» et sa couleur en vain. Je ne sais pas si c’est un bug, ou moi, mais c’est pourquoi le symbole apparaît uniquement sur la carte de gauche.
solar_light <- ggplot() +
geom_sf(data = big_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .8, alpha = .8) +
geom_sf(data = med_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .6, alpha = .6) +
geom_sf(data = small_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .4, alpha = .3) +
geom_sf(data = fayette_station, inherit.aes = FALSE,
color = "#d75f00", size = .6, alpha = .6) +
geom_sf(data = west_maple_ave, inherit.aes = FALSE,
color = "#d70000", size = .4, alpha = .5) +
geom_sf(data = maple_ave_west, inherit.aes = FALSE,
color = "#d70000", size = .4, alpha = .5) +
geom_sf(data = north_court_st, inherit.aes = FALSE,
color = "#0087ff", size = .6, alpha = .6) +
geom_sf(data = nr_gorge_bridge, inherit.aes = FALSE,
color = "#5f8700", size = .8, alpha = 1) +
geom_sf(data = new_river, inherit.aes = FALSE,
color = "#00afaf", size = 1, alpha = 1) +
ggspatial::annotation_north_arrow(location = "tl",
which_north = "true", height = unit(5, "mm")) +
coord_sf(xlim = c(-81.150, -81.060),
ylim = c(38.010, 38.080), expand = FALSE) + theme_void() +
geom_point(data=essential, aes(x=lon, y=lat), size = 1.5,
alpha=.8, fill="#d75f00", color="#d75f00", pch=19,
inherit.aes = F) +
theme(panel.background = element_rect(fill = "#ffffd7"))
Notez que les emplacements des lieux que j’aime sont encodés juste après theme_void
en utilisant les longitudes et latitudes que j’ai copiées à partir de Google Maps. La principale différence par rapport aux exemples stellaires de Connor et Josh est que je solarise la palette de couleurs des cartes en utilisant, bien sûr, la palette de couleurs solarisée développée par Ethan Schoonover. Je suis un grand fan. Mark Ivey’s feuille de triche solaire a été d’une grande aide pour contextualiser le fonctionnement des palettes. Vous trouverez ci-dessous la version sombre solarisée du code de tracé. Rien n’est différent sauf la couleur d’arrière-plan.
solar_dark <- ggplot() +
geom_sf(data = big_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .8, alpha = .8) +
geom_sf(data = med_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .6, alpha = .6) +
geom_sf(data = small_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .4, alpha = .3) +
geom_sf(data = fayette_station, inherit.aes = FALSE,
color = "#d75f00", size = .6, alpha = .6) +
geom_sf(data = west_maple_ave, inherit.aes = FALSE,
color = "#d70000", size = .4, alpha = .5) +
geom_sf(data = maple_ave_west, inherit.aes = FALSE,
color = "#d70000", size = .5, alpha = 1) +
geom_sf(data = north_court_st, inherit.aes = FALSE,
color = "#0087ff", size = .6, alpha = 1) +
geom_sf(data = nr_gorge_bridge, inherit.aes = FALSE,
color = "#5f8700", size = .8, alpha = 1) +
geom_sf(data = new_river, inherit.aes = FALSE,
color = "#00afaf", size = 1, alpha = 1) +
coord_sf(xlim = c(-81.150, -81.060),
ylim = c(38.010, 38.080), expand = FALSE) +
theme_void() +
geom_point(data=essential, aes(x=lon, y=lat), size = 1.5,
alpha=.8, fill="#d75f00", color="#d75f00", pch=19,
inherit.aes = F) +
theme(panel.background = element_rect(fill = "#1c1c1c"))
Enfin, je voudrais placer ces parcelles côte à côte. C’est la première fois que j’utilise le patchwork
paquet, mais c’est vraiment sympa. La syntaxe est beaucoup plus simple que l’ancienne grid.arrange
fonction, qui était elle-même assez simple.
library(patchwork)
solar_fa <- solar_light + solar_dark solar_fa + plot_annotation(
title = “Fayetteville, WV”,
subtitle = “38.053°N / 81.104°W”) &
theme(plot.title = element_text(size = 50,
family = “baskerville”,
face=”bold”,
hjust=.5),
plot.subtitle = element_text(family = “playfair”,
size = 30,
hjust=.5,
margin=margin(2, 0, 5, 0))) ggsave(file=”fayetteville_str_map.jpg”,
units=”in”,
width = 6,
height=4.5)
le patchwork
Le package permet également d’annoter facilement le tracé fini, en totalité ou en petits multiples. J’en arrive enfin aux polices. J’aime les polices old-school, même médiévales. Les polices Google fournissent « Libre Baskerville » et « Playfair Display » tirées de polices natives des années 1700 et 1800 respectivement. Avec les polices Playfair, j’obtiens également des numéros à l’ancienne, que j’adore, et encore plus pour des choses comme le titrage des cartes.
Walla !!
Juste un mot sur les données OSM. Dans le coin supérieur droit des cartes, vous verrez une ligne droite. C’est le New River Gorge Bridge. Pourtant, l’autoroute, US 19, qui le relie à Fayetteville n’est nulle part sur le site. US 19 traverse Fayetteville à l’ouest et apparaît tout en bas du graphique, en vert, comme le pont. Il s’agit d’un oubli important car US 19 est la principale autoroute allant de Braxton Co. au sud de Beckley, reliant les autoroutes I79 à I64 et I77. Il fait partie du réseau routier interétatique et l’une des voies d’évacuation d’urgence pour l’est des États-Unis. Soyez prudent, même avec des données généralement bonnes.