如何使用 cshapes 和 ggplot2 在 R 中制作等值线图?
How to use cshapes and ggplot2 to make a choropleth map in R?
我在做一些非常基本的事情时遇到了问题。我已经这样做了数百次,其他地图没有问题,但我无法使用 ggplot2 获得 cshapes shapefile 以正确映射(例如,我试图将 "AREA" 映射为填充,这是一个cshapes 形状文件附带的变量)。这是我正在使用的代码:
library(cshapes)
library(ggplot2)
world <- cshp(date=as.Date("2009-1-1"))
world@data$id <- rownames(world@data)
world.df = fortify(world, region="COWCODE")
world.df <- join(world.df, world@data, by="id")
ggplot() + geom_polygon(data=world.df,
aes(x = long, y = lat, group = group,fill = AREA))
+coord_equal()
我最终得到的结果如下:,如您所见,缺少东半球的数据。不确定发生了什么,非常感谢任何帮助。
好的,我找到问题了。当我检查由 fortify()
创建的数据框然后与原始数据重新合并时,我注意到 NA
是在合并中生成的。不知道为什么。所以我决定使用 fortify()
的 ?help
函数来查看我是否遗漏了一个参数,你看它说 "Rather than using this function, I now recomend using the broom package, which implements a much wider range of methods. fortify may be deprecated in the future." - 我以前从未见过这个并且可能解释了为什么我从来没有过去有麻烦。所以我检查了 library(broom)
,等效函数是 tidy()
,它工作得很好,像这样:
library(broom)
library(cshapes)
library(ggplot2)
library(dplyr)
world <- cshp(date=as.Date("2009-1-1"))
world@data$id <- rownames(world@data)
world.df = tidy(world)
world.df$arrange<-1:192609 ###Needs be reordered (something fortify did automatically)###
world.df <- join(world.df, world@data, by="id")
world.df<-arrange(world.df, arrange)
ggplot() + geom_polygon(data=world.df,
aes(x = long, y = lat, group = group,fill = AREA))
+coord_equal()
产生以下内容:
您创建的 id
与 world.df
中的 id
不匹配,因此通过 id
.
引入了 NA。
如果您将区域设置为并通过 SP_ID
加入,它会起作用:
world <- cshp(date=as.Date("2009-1-1"))
world.df = fortify(world, region="SP_ID")
names(world.df)[6] <- "SP_ID"
world.df <- join(world.df, world@data)
我在做一些非常基本的事情时遇到了问题。我已经这样做了数百次,其他地图没有问题,但我无法使用 ggplot2 获得 cshapes shapefile 以正确映射(例如,我试图将 "AREA" 映射为填充,这是一个cshapes 形状文件附带的变量)。这是我正在使用的代码:
library(cshapes)
library(ggplot2)
world <- cshp(date=as.Date("2009-1-1"))
world@data$id <- rownames(world@data)
world.df = fortify(world, region="COWCODE")
world.df <- join(world.df, world@data, by="id")
ggplot() + geom_polygon(data=world.df,
aes(x = long, y = lat, group = group,fill = AREA))
+coord_equal()
我最终得到的结果如下:
好的,我找到问题了。当我检查由 fortify()
创建的数据框然后与原始数据重新合并时,我注意到 NA
是在合并中生成的。不知道为什么。所以我决定使用 fortify()
的 ?help
函数来查看我是否遗漏了一个参数,你看它说 "Rather than using this function, I now recomend using the broom package, which implements a much wider range of methods. fortify may be deprecated in the future." - 我以前从未见过这个并且可能解释了为什么我从来没有过去有麻烦。所以我检查了 library(broom)
,等效函数是 tidy()
,它工作得很好,像这样:
library(broom)
library(cshapes)
library(ggplot2)
library(dplyr)
world <- cshp(date=as.Date("2009-1-1"))
world@data$id <- rownames(world@data)
world.df = tidy(world)
world.df$arrange<-1:192609 ###Needs be reordered (something fortify did automatically)###
world.df <- join(world.df, world@data, by="id")
world.df<-arrange(world.df, arrange)
ggplot() + geom_polygon(data=world.df,
aes(x = long, y = lat, group = group,fill = AREA))
+coord_equal()
产生以下内容:
您创建的 id
与 world.df
中的 id
不匹配,因此通过 id
.
如果您将区域设置为并通过 SP_ID
加入,它会起作用:
world <- cshp(date=as.Date("2009-1-1"))
world.df = fortify(world, region="SP_ID")
names(world.df)[6] <- "SP_ID"
world.df <- join(world.df, world@data)