我正在尝试使用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 :
r - 在ggplot2中绘制海洋的小 map 区域-LMLPHP

然后,如果我想放大加拿大的西部:
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

这给出了:

r - 在ggplot2中绘制海洋的小 map 区域-LMLPHP

区域是正确的,但太平洋的左侧应为白色...
所以我尝试了另一种方式:
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

这使 :

r - 在ggplot2中绘制海洋的小 map 区域-LMLPHP

海洋是白色的,但例外的是,多边形被裁剪​​了。

有没有办法对整个多边形和白色海洋进行缩放?因为这样,好像一切都是大陆...

谢谢 !

最佳答案

似乎问题出在coord_map上。如果使用coord_cartesiancoord_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))

09-27 19:11