我试图使用ggplot2在Winkel Tripel投影中绘制世界地图;它最终会有一些数据。本土方面,据我所知,ggplot不能做Winkel Tripel,所以我用手动投影来解决这个问题。除了海洋层之外,我得到了所有东西,它不会出现。代码:
Parent1
--- build_x
---build_y
Parent2
-- build_x
-- build_y
渲染:
你可以看到,单个多边形填充意味着被切成两个单独的多边形,它们只覆盖了#34;端盖"地图,而不是中间。如何在整个地图下填写?我认为问题在于" boundary"的定义,但我在geom_polygon
文档中没有看到任何内容来解释可能出错的地方。
答案 0 :(得分:0)
使用' ggalt'这是一个正确的答案",这里是获得你想要的东西的方法 - 首先裁剪出南极洲(虽然我不支持这个,但它真的很糟糕),以及使用' scale_y_discrete'。我不知道为什么要知道这个gg-verse,但我收集了南边界连续的突破,并以某种方式再次绕过两半。离散裁剪可能会选择最近的" coords等保持南边界。
我们确实需要更好的工具来跨越sp / ggplot2鸿沟,虽然我们有一个针对局部问题的局部修复动物园,但两者之间没有正确的统一。 ' ggalt'是最好的之一。
suppressPackageStartupMessages({
library(ggplot2)
library(sp)
library(rworldmap)
library(rgdal)
})
ll.to.wt <- function (points)
as.data.frame(spTransform(SpatialPoints(points, CRS("+proj=longlat")),
CRS("+proj=wintri")))
## not much of a "world" without Antarctica . .
badworld <- subset(spTransform(getMap(), CRS("+proj=wintri")),
!NAME == "Antarctica")
world <- fortify(badworld)
xlimits <- ll.to.wt(matrix(c(-180,180,0,0), nrow=2))$coords.x1
ylimits <- ll.to.wt(matrix(c(0,0,-60,85), nrow=2))$coords.x2
lseq = seq(-60, 85, by=.25)
boundary <- ll.to.wt(data.frame(
long = c(rep(-180, length(lseq)), rep(180, length(lseq)), -180),
lat = c(lseq, rev(lseq), lseq[1])))
ggplot() +
geom_polygon(data=boundary, aes(x=long, y=lat), fill="#9AC5E3") +
geom_map(data=world, map=world, aes(x=long, y=lat, map_id=id),
color="#888888", fill="#f2caae", size=0.25) +
scale_x_continuous(limits=xlimits, expand=c(0,0)) +
scale_y_discrete(limits=ylimits, expand=c(0,0)) +
coord_equal() +
theme(
axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
legend.justification = c(0,0), # bottom of box
legend.position = c(0,0), # bottom of picture
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.margin=unit(0, "lines"),
plot.background=element_blank())