我正在尝试使用ggplot2程序包绘制加拿大的某些地区。我知道保留整个多边形可能很棘手,因为ggplot摆脱了超出限制的点(如果在limits
中使用scale_x/y_continuous()
)。为了克服这个问题,绘制整个 map 然后应用缩放(coord_map)是很有用的。我的多边形都还好,除了海洋的颜色与加拿大/阿拉斯加的颜色相同。但是,如果我看整个 map ,它是白色的。
一个工作示例:
require(rgdal)
require(ggplot2)
YK <- map_data("world") ##World
## Regions Canada
library(autoimage)
data(canada)
library(broom)
canada_df <- tidy(canada)
p <- (ggplot()
+ theme_bw()
+ geom_polygon(data = YK, aes(x=long, y = lat, group = group), fill="gray70")
+ geom_path(data = canada_df, aes(x=long, y=lat, group=group), colour="black"))
p
这给出了正确的世界 map :
然后,如果我想放大加拿大的西部:
p <- (ggplot()
+ theme_bw()
+ geom_polygon(data = YK, aes(x=long, y = lat, group = group), fill="gray70")
+ geom_path(data = canada_df, aes(x=long, y=lat, group=group), colour="black")
+ coord_map("mercator", xlim=c(-150, -120), ylim=c(50, 70)))
p
这给出了:
区域是正确的,但太平洋的左侧应为白色...
所以我尝试了另一种方式:
p <- (ggplot()
+ theme_bw()
+ geom_polygon(data = YK, aes(x=long, y = lat, group = group), fill="gray70")
+ geom_path(data = canada_df, aes(x=long, y=lat, group=group), colour="black")
+ scale_x_continuous(limits = c(-150, -120))
+ scale_y_continuous(limits = c(50, 70)))
p
这使 :
海洋是白色的,但例外的是,多边形被裁剪了。
有没有办法对整个多边形和白色海洋进行缩放?因为这样,好像一切都是大陆...
谢谢 !
最佳答案
似乎问题出在coord_map
上。如果使用coord_cartesian
或coord_fixed
,则可以放大。 coord_quickmap
也可以。
p <- ggplot() +
theme_bw() +
geom_polygon(data = YK, aes(x=long, y = lat, group = group), fill="gray70") +
geom_path(data = canada_df, aes(x=long, y=lat, group=group), colour="black")
p
p + coord_cartesian(xlim=c(-150, -120), ylim=c(50, 70))
p + coord_fixed(ratio = 2, xlim=c(-150, -120), ylim=c(50, 70))
p + coord_quickmap(xlim=c(-150, -120), ylim=c(50, 70))