添加一个点到基于纬度和经度的等值线图 - r
Adding a point to a choropleth map based on lat and long - r
我绘制了美国的等值线图和每个州的叠加数据。现在我正在尝试向某些纬度和经度坐标添加点,并认为将 geom_point 添加到我的 ggplot 中可以解决问题。我想我在输入 aes 时遇到了一些问题,并且在弄清楚如何解决这个问题时遇到了很多麻烦。这是代码:
library(ggplot2)
library(fiftystater)
library(colorplaner)
library(RColorBrewer)
# prepare data frame
data("fifty_states")
df <- data.frame(state=tolower(rownames(USArrests)), USArrests)
names(df)[names(df)=='Murder'] <- 'Fake_Data'
names(df)[names(df)=='Assault'] <- 'Bucket'
df<-df[,-c(4:5)]
df$Fake_Data <- runif(nrow(df), 1,60)
df$Bucket = 0
for (i in 1:nrow(df)){
if(df[i, 2] <= 10){
df[i,3] = 1
} else if(df[i,2] > 10 & df[i,2] <= 20){
df[i,3] = 2
} else if(df[i,2] > 20 & df[i,2] <= 30){
df[i,3]= 3
} else if(df[i,2] > 30 & df[i,2] <= 40){
df[i,3] = 4
} else if(df[i,2] > 40 & df[i,2] <= 50){
df[i,3] = 5
}
else if(df[i,2] > 50)
df[i,3]=6
}
p <- ggplot(df, aes(map_id = state)) +
# map points to the fifty_states shape data
geom_map(aes(fill = factor(Bucket)), map = fifty_states, color = 'gray') +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
scale_x_discrete(breaks = NULL) +
scale_y_discrete(breaks = NULL) +
labs(x = "", y = "") +
theme(legend.position = "right",
panel.background = element_blank())
labs <- data.frame(long = c(-122.064873,-122.306417),
lat = c(36.951968,47.644855),
names = c('lab', 'Seattle'), stringsAsFactors = FALSE)
p + fifty_states_inset_boxes()+
scale_fill_manual('Fake Data Percentages',
values = c('#fef0d9', '#fdd49e', '#fdbb84', '#fc8d59', '#e34a33',
'#b30000'),
labels = c('0-10','10-20','20-30','30-40','40-50','50-60'))+
geom_point(data = labs, aes(x=long, y=lat),
color = 'black', size = 5) +
geom_point(data = labs, aes(x=long, y=lat),
color = 'blue', size = 4)
我尝试用 map_id = state
和简单的 x=long, y=lat
替换 geom_point 中的 x 和 y 值。但没有运气。我得到的错误是:
Error in FUN(X[[i]], ...) : object 'state' not found
如有任何帮助,我们将不胜感激!
在绘图的全局选项中,您设置了:
ggplot(df, aes(map_id = state))
这会尝试将数据框 df
和美学 map_id
state
传递给所有参数,除非在几何选项中被覆盖。这就是导致错误的原因。
要解决此问题,只需在 geom_map
调用中设置 map_id
。这确保它只在本地为那个对象设置:
p <- ggplot(df) +
# map points to the fifty_states shape data
geom_map(aes(fill = factor(Bucket), map_id = state), map = fifty_states, color = 'gray') +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
scale_x_discrete(breaks = NULL) +
scale_y_discrete(breaks = NULL) +
labs(x = "", y = "") +
theme(legend.position = "right",
panel.background = element_blank())
labs <- data.frame(long = c(-122.064873,-122.306417),
lat = c(36.951968,47.644855),
names = c('lab', 'Seattle'), stringsAsFactors = FALSE)
p + fifty_states_inset_boxes() +
scale_fill_manual('Fake Data Percentages',
values = c('#fef0d9', '#fdd49e', '#fdbb84', '#fc8d59', '#e34a33',
'#b30000'),
labels = c('0-10','10-20','20-30','30-40','40-50','50-60'))+
geom_point(data = labs, aes(x=long, y=lat),
color = 'black', size = 5) +
geom_point(data = labs, aes(x=long, y=lat),
color = 'blue', size = 4)
我绘制了美国的等值线图和每个州的叠加数据。现在我正在尝试向某些纬度和经度坐标添加点,并认为将 geom_point 添加到我的 ggplot 中可以解决问题。我想我在输入 aes 时遇到了一些问题,并且在弄清楚如何解决这个问题时遇到了很多麻烦。这是代码:
library(ggplot2)
library(fiftystater)
library(colorplaner)
library(RColorBrewer)
# prepare data frame
data("fifty_states")
df <- data.frame(state=tolower(rownames(USArrests)), USArrests)
names(df)[names(df)=='Murder'] <- 'Fake_Data'
names(df)[names(df)=='Assault'] <- 'Bucket'
df<-df[,-c(4:5)]
df$Fake_Data <- runif(nrow(df), 1,60)
df$Bucket = 0
for (i in 1:nrow(df)){
if(df[i, 2] <= 10){
df[i,3] = 1
} else if(df[i,2] > 10 & df[i,2] <= 20){
df[i,3] = 2
} else if(df[i,2] > 20 & df[i,2] <= 30){
df[i,3]= 3
} else if(df[i,2] > 30 & df[i,2] <= 40){
df[i,3] = 4
} else if(df[i,2] > 40 & df[i,2] <= 50){
df[i,3] = 5
}
else if(df[i,2] > 50)
df[i,3]=6
}
p <- ggplot(df, aes(map_id = state)) +
# map points to the fifty_states shape data
geom_map(aes(fill = factor(Bucket)), map = fifty_states, color = 'gray') +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
scale_x_discrete(breaks = NULL) +
scale_y_discrete(breaks = NULL) +
labs(x = "", y = "") +
theme(legend.position = "right",
panel.background = element_blank())
labs <- data.frame(long = c(-122.064873,-122.306417),
lat = c(36.951968,47.644855),
names = c('lab', 'Seattle'), stringsAsFactors = FALSE)
p + fifty_states_inset_boxes()+
scale_fill_manual('Fake Data Percentages',
values = c('#fef0d9', '#fdd49e', '#fdbb84', '#fc8d59', '#e34a33',
'#b30000'),
labels = c('0-10','10-20','20-30','30-40','40-50','50-60'))+
geom_point(data = labs, aes(x=long, y=lat),
color = 'black', size = 5) +
geom_point(data = labs, aes(x=long, y=lat),
color = 'blue', size = 4)
我尝试用 map_id = state
和简单的 x=long, y=lat
替换 geom_point 中的 x 和 y 值。但没有运气。我得到的错误是:
Error in FUN(X[[i]], ...) : object 'state' not found
如有任何帮助,我们将不胜感激!
在绘图的全局选项中,您设置了:
ggplot(df, aes(map_id = state))
这会尝试将数据框 df
和美学 map_id
state
传递给所有参数,除非在几何选项中被覆盖。这就是导致错误的原因。
要解决此问题,只需在 geom_map
调用中设置 map_id
。这确保它只在本地为那个对象设置:
p <- ggplot(df) +
# map points to the fifty_states shape data
geom_map(aes(fill = factor(Bucket), map_id = state), map = fifty_states, color = 'gray') +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
scale_x_discrete(breaks = NULL) +
scale_y_discrete(breaks = NULL) +
labs(x = "", y = "") +
theme(legend.position = "right",
panel.background = element_blank())
labs <- data.frame(long = c(-122.064873,-122.306417),
lat = c(36.951968,47.644855),
names = c('lab', 'Seattle'), stringsAsFactors = FALSE)
p + fifty_states_inset_boxes() +
scale_fill_manual('Fake Data Percentages',
values = c('#fef0d9', '#fdd49e', '#fdbb84', '#fc8d59', '#e34a33',
'#b30000'),
labels = c('0-10','10-20','20-30','30-40','40-50','50-60'))+
geom_point(data = labs, aes(x=long, y=lat),
color = 'black', size = 5) +
geom_point(data = labs, aes(x=long, y=lat),
color = 'blue', size = 4)