灵感来自this发布后,我尝试使用罗宾逊投影绘制世界地图并向 map 添加彩色点。 重新投影 map 和点效果很好,但是,由于某种我不明白的原因,我无法更改点的配色方案并保留图例。我尝试过以下方法:
首先我在这里得到形状文件:land和 graticules
library(rgdal)
library(ggplot2)
library(sp)
library(yarrr)
setwd('~/Documents/worldshapefiles') # this is where the shapefiles are
# read the shapefile for the simple worldmap
wmap <- readOGR(dsn = 'ne_110m_land', layer = 'ne_110m_land')
wmap_df <- fortify(wmap)
# get bounding box
bbox <- readOGR("ne_110m_graticules_all", layer="ne_110m_wgs84_bounding_box") # read bounding box
bbox_df<- fortify(bbox)
site_locs <- cbind.data.frame(x = c(-5, -3, -3, 58, -112), y = c(68, -37, 35, 19, -4), ocean = c('NAT', 'IND', 'MDX', 'SAT', 'PAC'))
coordinates(site_locs) <- c("x", "y") # convert to spatialpointsdataframe
proj4string(site_locs) <- CRS("+proj=longlat + datum=WGS84")
# reproject everything
bbox_robin <- spTransform(bbox, CRS("+proj=robin"))
bbox_robin_df <- fortify(bbox_robin)
wmap_robin <- spTransform(wmap, CRS("+proj=robin"))
wmap_df_robin <- fortify(wmap_robin)
site_locs_robin <- spTransform(site_locs, CRS('+proj=robin'))
site_locs_robin_df <- as.data.frame(site_locs_robin)
col_pal <- piratepal('espresso', length.out = 5)
# plot
ggplot(bbox_robin_df, aes(long,lat)) +
geom_polygon(data = wmap_df_robin, aes(long,lat, group = group, fill = hole)) +
geom_point(data = site_locs_robin_df, aes(x, y, colour = ocean)) +
coord_equal() +
geom_polygon(linetype = 'solid', fill = NA, colour = 'black', size = 0.5) +
scale_fill_manual(values=c("black", "white"), guide="none")
但是,当我尝试更改色阶时:
ggplot(bbox_robin_df, aes(long,lat)) +
geom_polygon(data = wmap_df_robin, aes(long,lat, group = group, fill = hole)) +
geom_point(data = site_locs_robin_df, aes(x, y, colour = ocean)) +
scale_colour_manual(values = col_pal) +
coord_equal() +
geom_polygon(linetype = 'solid', fill = NA, colour = 'black', size = 0.5) +
scale_fill_manual(values=c("grey80", "white"), guide="none")
我收到以下警告已删除包含缺失值 (geom_point) 的 5 行。
和一个空图。
当我像这样改变色阶时:
ggplot(bbox_robin_df, aes(long,lat)) +
geom_polygon(data = wmap_df_robin, aes(long,lat, group = group, fill = hole)) +
geom_point(data = site_locs_robin_df, aes(x, y, colour = ocean), colour = col_pal) +
scale_colour_manual(values = col_pal) +
coord_equal() +
geom_polygon(linetype = 'solid', fill = NA, colour = 'black', size = 0.5) +
scale_fill_manual(values=c("grey80", "white"), guide="none")
颜色结果很好(如 col_pal 中指定),但我丢失了图例。
有什么想法可以解决这个问题吗?或者其他方法?
实际上,我还有更多点,其中一些点重叠,我想修复它们的绘制顺序(例如 SAT 位于 IND 之上)。我该怎么做?
最佳答案
问题在于 piratepal()
返回一个命名的颜色向量,而 scale_color_manual()
将名称解释为比例中断:
> piratepal('espresso', length.out = 5)
blue yellow red green orange
"#2366C0FF" "#E9D738FF" "#B91226FF" "#A3DA4BFF" "#FF6435FF"
由于您的数据中不存在这些中断,因此这些点将被删除。
解决方案是取消颜色的命名:
col_pal <- unname(piratepal('espresso', length.out = 5))
ggplot(bbox_robin_df, aes(long,lat)) +
geom_polygon(data = wmap_df_robin, aes(long,lat, group = group, fill = hole)) +
geom_point(data = site_locs_robin_df, aes(x, y, colour = ocean)) +
scale_colour_manual(values = col_pal) +
coord_equal() +
geom_polygon(linetype = 'solid', fill = NA, colour = 'black', size = 0.5) +
scale_fill_manual(values=c("grey80", "white"), guide="none")
关于R:更改配色方案时ggplot2图例消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009246/