我怎样才能在ggplot2中绘制CONUS地图?

时间:2015-06-05 20:58:14

标签: r ggplot2

所以,我有一个数据集,不仅包含CONUS数据,还包含岛屿地区和阿拉斯加州的数据。现在,我想只绘制CONUS的数据。我知道我可以轻松地将其分配。但有没有更简单的方法呢?也许ggplot中的一个选项我不知道?

以下是代码:

ggplot() + 
  geom_polygon( data=usamap, aes(x=long, y=lat,group=group),colour="black", fill="white" )+
  geom_point(data=df,aes(x=Longitude,y=Latitude))+
  scale_colour_gradientn(name = "DL",colours = myPalette(10))+
  xlab('Longitude')+
  ylab('Latitude')+
  coord_map(projection = "mercator")+
  theme_bw()+
  theme(legend.position = c(.93,.20),panel.grid.major = element_line(colour = "#808080"))+
  ggsave("test.png",width=10, height=8,dpi=300)

这是数据集:

https://www.dropbox.com/s/k1z5uquhtc2b9nd/exported.csv?dl=0

3 个答案:

答案 0 :(得分:1)

你可以做到这一点并同时使用一个不错的投影:

library(ggplot2)
library(readr) 
library(dplyr)

us <- map_data("state")
us <- fortify(us, region="region")

# for theme_map

devtools::source_gist("33baa3a79c5cfef0f6df")

# read your data and filter out points not in CONUS

read_csv("exported.csv") %>%
  filter(Longitude>=-124.848974 & Longitude<=-66.885444,
         Latitude>=24.396308 & Latitude<=49.384358) -> data

gg <- ggplot()
gg <- gg + geom_map(data=us, map=us,
                    aes(x=long, y=lat, map_id=region, group=group),
                    fill="#ffffff", color="#7f7f7f", size=0.25)
gg <- gg + geom_point(data=data,
                      aes(x=Longitude, y=Latitude),
                      color="#cb181d", size=1, alpha=1/10)
gg <- gg + coord_map("albers", lat0=39, lat1=45)
gg <- gg + theme_map()
gg

enter image description here

我没有看到美学颜色映射,因此您的颜色缩放不会产生任何影响。我使用alpha来代替重叠/关闭点。

答案 1 :(得分:0)

看看你转贴的问题,我认为到目前为止最好的方法是一个简单的子集。从link开始,你可以看到美国大陆周围的方框是:

 (-124.848974, 24.396308) - (-66.885444, 49.384358)

如果你做一个简单的子集:

  usamap<-usamap[usamap$Longitude > -124.848 &
                 usamap$Longitude < -66.886 &
                 usamap$Latitude > 24.3964 &
                 usamap$Latitude < 49.3844, ]

您将获得所需的积分。

答案 2 :(得分:0)

由于您说您对ggplot2解决方案感兴趣,因此您可以考虑修改coord_map()中的参数。例如:

  coord_map(project = "globular", 
                      xlim = c(-125, -66), 
                      ylim = c(24, 50))

当然,"mercator"参数也有效!