我正在阅读Hadley Wickham所写的ggplot2书,并遵循代码。但是,USAboundaries软件包不能像书中所示那样工作。 在这本书中,代码的工作方式如下:
library(USAboundaries)
c18 <- us_boundaries(as.Date("1820-01-01"))
c18df <- fortify(c18)
#> Regions defined for each Polygons
head(c18df)
#> long lat order hole piece id group
#> 1 -87.6 35 1 FALSE 1 4 4.1
#> 2 -87.6 35 2 FALSE 1 4 4.1
#> 3 -87.6 35 3 FALSE 1 4 4.1
#> 4 -87.6 35 4 FALSE 1 4 4.1
#> 5 -87.5 35 5 FALSE 1 4 4.1
#> 6 -87.3 35 6 FALSE 1 4 4.1
ggplot(c18df, aes(long, lat)) +
geom_polygon(aes(group = group), colour = "grey50", fill = NA) +
coord_quickmap()
但是,当我在RStudio中运行相同的代码时,数据帧完全不同: long和lat值在嵌套列表中矢量化,例如:
geometry
list(list(c(-88.0746219415898, -88.3133290074677, ...)))
list(list(c(-96.7247616421399, -96.0010234528651, ...)))
...
...
...表示那里有很多值。
因此,上面的ggplot代码不起作用,因为数据帧没有long和lat。 由于没有long和lat变量(列),我该如何从该数据创建long和lat?也许您可以安装此软件包并尝试运行它以查看发生了什么。
非常感谢您的帮助!
答案 0 :(得分:2)
我对fortify
函数不熟悉,但是请注意us_boundaries
的输出应该是sf
对象,以及在{{1}中指定日期的方式}不需要us_boundaries
(请参阅as.Date
中的示例)。
由于?us_boundaries
是c18
对象,因此您不必使用sf
。结果,我从代码中删除了geom_polygon
,并使用as.Date
和c18
绘制了ggplot
。
geom_sf
请参见以下链接,以了解有关绘制library(USAboundaries)
library(ggplot2)
library(sf)
c18 <- us_boundaries("1820-01-01")
ggplot() +
geom_sf(data = c18)
对象的更多信息:https://cran.r-project.org/web/packages/sf/vignettes/sf5.html#ggplot2
更新
我在这个问题上做了更多的研究。 sf
函数可以将空间多边形数据帧转换为数据帧。看起来原始版本的fortify
返回了一个空间多边形数据帧,因此必须使用us_boundaries
函数将其转换为数据帧。
下面,我首先将fortify
对象转换为空间多边形数据框,然后使用sf
函数重现原始过程。现在我们可以用fortify
绘制c18df
。
geom_polygon