这来自ggplot2文档:
# Better example
crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)
library(reshape2) # for melt
crimesm <- melt(crimes, id = 1)
if (require(maps)) {
states_map <- map_data("state")
ggplot(crimes, aes(map_id = state)) + geom_map(aes(fill = Murder), map = states_map) + expand_limits(x = states_map$long, y = states_map$lat)
last_plot() + coord_map()
ggplot(crimesm, aes(map_id = state)) + geom_map(aes(fill = value), map = states_map) + expand_limits(x = states_map$long, y = states_map$lat) + facet_wrap( ~ variable)
}
我不明白这是如何工作的,因为states_map
数据框中没有使用“region”来命名states列的crimes
数据框和标记状态的states_map
数据框的公共标识符, “状态。”是什么将数据与地图联系起来?
在此example中,海报重命名地图数据框的列以符合数据,但ggplot2文档似乎没有这样做。怎么样?当我在上面的示例中重命名crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)
library(reshape2) # for melt
crimesm <- melt(crimes, id = 1)
if (require(maps)) {
states_map <- map_data("state")
##### my attempt to fix what isn't broken #################
names(states_map)[5]<-"state"
###########################################################
ggplot(crimes, aes(map_id = state)) + geom_map(aes(fill = Murder), map = states_map) + expand_limits(x = states_map$long, y = states_map$lat)
last_plot() + coord_map()
# Error: all(c("x", "y", "id") %in% names(map)) is not TRUE
}
的列时,以便“状态”对于两个数据帧都是通用的,它会破坏代码。
- (BOOL) navigationShouldPopOnBackButton
{
[self backAction];
return NO;
}
- (void) backAction {
// your code goes here
// show confirmation alert, for example
// ...
}
感谢。
答案 0 :(得分:1)
如果您查找geom_map
的代码:
function (mapping = NULL, data = NULL, stat = "identity", ...,
map, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
{
stopifnot(is.data.frame(map))
if (!is.null(map$lat))
map$y <- map$lat
if (!is.null(map$long))
map$x <- map$long
if (!is.null(map$region))
map$id <- map$region
stopifnot(all(c("x", "y", "id") %in% names(map)))
# etcetera...
}
这意味着,为了正确构建几何图形,将使用x,y和id列生成数据帧map
。使用aes(map_id = state)
,您基本上是将crimes$state
分配给map$id
(据我了解)
如果地图数据中没有id
列,则称为region
的列将用作您的id列。
您可以通过将states_map$region
的名称更改为states_map$id
names(states_map)[5]<-"id"
这适用于给定的示例。