Pour ajouter du texte à un tracé (carte dans ce cas), il faut l'étiquette de texte et les coordonnées du texte. Voici une approche avec vos données:
library(ggplot2)
library(fiftystater)
library(tidyverse)
data("fifty_states")
ggplot(data= crimes, aes(map_id = state)) +
geom_map(aes(fill = Assault), color= "black", map = fifty_states) +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
geom_text(data = fifty_states %>%
group_by(id) %>%
summarise(lat = mean(c(max(lat), min(lat))),
long = mean(c(max(long), min(long)))) %>%
mutate(state = id) %>%
left_join(crimes, by = "state"), aes(x = long, y = lat, label = Assault))+
scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL) +
labs(x = "", y = "") + theme(legend.position = "bottom",
panel.background = element_blank())
Ici, j'utilisé le numéro d'assaut comme étiquette et moyenne du maximum et minimum de coordonnées de latitude et à long terme de chaque Etat sous forme de coordonnées texte. Les coordonnées pourraient être meilleures pour certains états, on peut les ajouter à la main ou utiliser les coordonnées de la ville choisie.
EDIT: la question mise à jour:
Choisissez d'abord l'année et le type de crime et de regrouper les données
homicide %>%
filter(Year == 1980 & Crime.Type == "Murder or Manslaughter") %>%
group_by(State) %>%
summarise(n = n()) %>%
mutate(state = tolower(State)) -> homicide_1980
puis terrain:
ggplot(data = homicide_1980, aes(map_id = state)) +
geom_map(aes(fill = n), color= "black", map = fifty_states) +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
geom_text(data = fifty_states %>%
group_by(id) %>%
summarise(lat = mean(c(max(lat), min(lat))),
long = mean(c(max(long), min(long)))) %>%
mutate(state = id) %>%
left_join(homicide_1980, by = "state"), aes(x = long, y = lat, label = n))+
scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL) +
labs(x = "", y = "") + theme(legend.position = "bottom",
panel.background = element_blank())
Si l'on veut comparer toutes les années, je suggère de le faire sans tex t, car il sera très encombré:
homicide %>%
filter(Crime.Type == "Murder or Manslaughter") %>%
group_by(State, Year) %>%
summarise(n = n()) %>%
mutate(state = tolower(State)) %>%
ggplot(aes(map_id = state)) +
geom_map(aes(fill = n), color= "black", map = fifty_states) +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL) +
labs(x = "", y = "") + theme(legend.position = "bottom",
panel.background = element_blank())+
facet_wrap(~Year, ncol = 5)
On peut voir n'a pas beaucoup changé au cours des années.
je faire confiance à une intrigue plus informative est:
homocide %>%
filter(Crime.Type == "Murder or Manslaughter") %>%
group_by(State, Year) %>%
summarise(n = n()) %>%
mutate(state = tolower(State)) %>%
ggplot()+
geom_line(aes(x = Year, y = n))+
facet_wrap(~state, ncol = 6, scales= "free_y")+
theme_bw()
Merci pour votre réponse. J'utilise l'ensemble de données de [link] (https://www.kaggle.com/murderaccountability/homicide-reports) donc le code ci-dessus ne fonctionne pas pour cet ensemble de données. Pouvez-vous suggérer comment je peux utiliser le code ci-dessus pour l'ensemble de données sur les homicides? –
Qu'aimeriez-vous tracer à partir de l'ensemble de données? c'est beaucoup plus complexe que celui de OP. La somme du meurtre ou Manslaughter par état pour un an? Veuillez mettre à jour le PO avec la question. – missuse
Merci beaucoup !!! C'était très utile ... Je pouvais produire le graphique que je voulais :) –