R中的Polar / Stereographic地图

时间:2018-02-15 21:41:49

标签: r ggplot2 maps gis cartography

我正在尝试制作类似于此的立体图:

enter image description here

我要做的是添加:

  1. 坐标
  2. 经纬网
  3. 这可以在基础R或ggplot2中。任何帮助表示赞赏。

    到目前为止我的尝试

    library(rgdal)
    library(raster)                                                                                                     
    
    proj <- "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs"
    
    data("wrld_simpl", package = "maptools")                                                                            
    wm <- crop(wrld_simpl, extent(-180, 180, 45, 90))                                                                   
    plot(wm)                                                                                                            
    

    enter image description here

    wm <- spTransform(wm, CRSobj = CRS(proj))
    plot(wm)
    

    enter image description here

2 个答案:

答案 0 :(得分:7)

这是一个非常复杂的复制地图,使其工作所需的所有细节都超出了单个问题的范围。但是,这是您需要的大部分内容。

在ggplot中执行此操作更容易使用基本图形执行此操作。但是,这是一个非常复杂的图表。

我不得不使用一些黑客来让它发挥作用。特别是,从coord_map生成的轴没有在绘图的边缘结束,因此我必须手动删除轴,然后使用下面的geom_textgeom_segment行重新创建它们。

library(rgdal)                                                                                                      
library(raster)
library(ggplot2)

# Defines the x axes required
x_lines <- seq(-120,180, by = 60)

ggplot() +
  geom_polygon(data = wm_ggplot, aes(x = long, y = lat, group = group), fill = "grey", colour = "black", alpha = 0.8) +

  # Convert to polar coordinates
  coord_map("ortho", orientation = c(90, 0, 0)) +
  scale_y_continuous(breaks = seq(45, 90, by = 5), labels = NULL) +

  # Removes Axes and labels
  scale_x_continuous(breaks = NULL) +
  xlab("") + 
  ylab("") +

  # Adds labels
  geom_text(aes(x = 180, y = seq(55, 85, by = 10), hjust = -0.2, label = paste0(seq(55, 85, by = 10), "°N"))) +
  geom_text(aes(x = x_lines, y = 39, label = c("120°W", "60°W", "0°", "60°E", "120°E", "180°W"))) +

  # Adds axes
  geom_hline(aes(yintercept = 45), size = 1)  +
  geom_segment(aes(y = 45, yend = 90, x = x_lines, xend = x_lines), linetype = "dashed") +

# Change theme to remove axes and ticks
theme(panel.background = element_blank(),
      panel.grid.major = element_line(size = 0.25, linetype = 'dashed',
                                      colour = "black"),
      axis.ticks=element_blank()) +
  labs(caption = "Designed by Mikey Harper")

enter image description here

答案 1 :(得分:1)

使用PlotSvalbard软件包的替代解决方案:

# devtools::install_github("MikkoVihtakari/PlotSvalbard") ## Run once

library(PlotSvalbard)

basemap("panarctic", limits = 60)

enter image description here

该功能还可以绘制测深图:

basemap("panarctic", limits = 60, bathymetry = TRUE)

enter image description here

检查the user manual以获得更多功能。使用ggplot2语法可以绘制数据。使用add_land函数在需要绘制的栅格上添加地形(需要与Pan-Arctic底图的投影处于同一投影中,请参见map_projection("panarctic"))。 transform_coord函数可能有助于变换投影。