ggplot2 geom_polygon 的映射在合并数据后变得疯狂
mapping by ggplot2 geom_polygon goes crazy after merging data
我正在尝试制作一个包含美国大区域地图的网格。我从形状文件创建一个 SpatialPolygonDataframe。然后将其转换为 data.frame 以使用 ggplot2。一旦我将数据添加到框架中,多边形就会绘制出来。
包含 SpatialPolygon 和数据框的文件在这里:
https://drive.google.com/open?id=1kGPZ3CENJbHva0s558vWU24-erbqWUGo
代码如下:
load("./data.rda")
prop.test <- proptest.result[which(proptest.result$variable=="Upward N"),]
#transforming the data
# add to data a new column termed "id" composed of the rownames of data
shape@data$id <- rownames(shape@data)
#add data to our
shape@data <- data.frame(merge(x = shape@data, y = prop.test, by.x='Name', by.y="megaregion"))
# create a data.frame from our spatial object
mega.prop <- fortify(shape)
#merge the "fortified" data with the data from our spatial object
mega.prop.test <- merge(mega.prop, shape@data, by="id")
绘制第一个 (mega.prop) 工作正常:
ggplot(data = mega.prop, aes(x=long, y=lat, group=group), fill="blue")+
geom_polygon()
但在添加分析数据后绘制:
ggplot(data = mega.prop.test, aes(x=long, y=lat, group=group), fill="blue")+
geom_polygon()
在新剧情中:
- 多边形的填充乱七八糟。 (是关于分数顺序的吗?怎么算的?)
- 完全错过了两个多边形。
有什么问题?
非常感谢您的帮助。
使用 geom_map()
(出于某种原因需要对您的 shapefile 进行轻微调整),这样您就不必执行 merge/left 连接。
此外,您合并了大量不同的因素,不确定要绘制哪些因素。
最后,沿海地区不太可能需要那么精细的细节。 rgeos::gSimplify()
肯定会加快速度,并且您已经在扭曲区域,因此少量的额外扭曲不会影响结果。
library(ggplot2)
library(tidyverse)
shape_map <- tbl_df(fortify(shape, region="Name"))
colnames(shape_map) <- c("long", "lat", "order", "hole", "piece", "region", "group")
prop.test <- proptest.result[which(proptest.result$variable=="Upward N"),]
ggplot() +
geom_map(data=shape_map, map=shape_map, aes(long, lat, map_id=region)) +
geom_map(
data=filter(prop.test, season=="DJF"),
map=shape_map, aes(fill=prop.mega, map_id=megaregion)
)
我正在尝试制作一个包含美国大区域地图的网格。我从形状文件创建一个 SpatialPolygonDataframe。然后将其转换为 data.frame 以使用 ggplot2。一旦我将数据添加到框架中,多边形就会绘制出来。 包含 SpatialPolygon 和数据框的文件在这里: https://drive.google.com/open?id=1kGPZ3CENJbHva0s558vWU24-erbqWUGo 代码如下:
load("./data.rda")
prop.test <- proptest.result[which(proptest.result$variable=="Upward N"),]
#transforming the data
# add to data a new column termed "id" composed of the rownames of data
shape@data$id <- rownames(shape@data)
#add data to our
shape@data <- data.frame(merge(x = shape@data, y = prop.test, by.x='Name', by.y="megaregion"))
# create a data.frame from our spatial object
mega.prop <- fortify(shape)
#merge the "fortified" data with the data from our spatial object
mega.prop.test <- merge(mega.prop, shape@data, by="id")
绘制第一个 (mega.prop) 工作正常:
ggplot(data = mega.prop, aes(x=long, y=lat, group=group), fill="blue")+
geom_polygon()
但在添加分析数据后绘制:
ggplot(data = mega.prop.test, aes(x=long, y=lat, group=group), fill="blue")+
geom_polygon()
在新剧情中:
- 多边形的填充乱七八糟。 (是关于分数顺序的吗?怎么算的?)
- 完全错过了两个多边形。
有什么问题? 非常感谢您的帮助。
使用 geom_map()
(出于某种原因需要对您的 shapefile 进行轻微调整),这样您就不必执行 merge/left 连接。
此外,您合并了大量不同的因素,不确定要绘制哪些因素。
最后,沿海地区不太可能需要那么精细的细节。 rgeos::gSimplify()
肯定会加快速度,并且您已经在扭曲区域,因此少量的额外扭曲不会影响结果。
library(ggplot2)
library(tidyverse)
shape_map <- tbl_df(fortify(shape, region="Name"))
colnames(shape_map) <- c("long", "lat", "order", "hole", "piece", "region", "group")
prop.test <- proptest.result[which(proptest.result$variable=="Upward N"),]
ggplot() +
geom_map(data=shape_map, map=shape_map, aes(long, lat, map_id=region)) +
geom_map(
data=filter(prop.test, season=="DJF"),
map=shape_map, aes(fill=prop.mega, map_id=megaregion)
)