使用 base R 自定义颜色渐变图例上的中断

Customize breaks on a color gradient legend using base R

这是一个使用随机数而不是真实海拔数据的示例脚本。

library(gridExtra)
library(spatstat) #im function

elevation <- runif(500, 0, 10)
B <- matrix(elevation, nrow = 20, ncol = 25)
Elevation_Map <- im(B)
custom <- colorRampPalette(c("cyan","green", "yellow", "orange", "red"))
plot(Elevation_Map, col = custom(10), main = NULL)

这是我得到的剧情和图例:

这是我试图在 R 中重新创建的图例(这个是用 Word 制作的):

我知道这是可能的,它可能是一个简单的解决方案,但我已经尝试使用我在网上找到的一些示例但无济于事。

此图(带有真实海拔数据)是一件将悬挂在画廊中的艺术品,海拔图在一块板上,图例在另一块板上。我试图让 R 使用

只绘制没有图例的图
plot(Elevation_Map, col = custom(10), main = NULL, legend = NULL)

就像我过去一样,但出于某种原因,它总是用情节来绘制图例。截至目前,我正计划将 .pdf 裁剪成 2 个单独的文件以实现此目的。

这里有两种使用其他软件包的方法:

# example data, set seed to reproduce.
set.seed(1); elevation <- runif(500, 0, 10)
B <- matrix(elevation, nrow = 20, ncol = 25)
#Elevation_Map <- im(B)
custom <- colorRampPalette(c("cyan","green", "yellow", "orange", "red"))

1) 使用 fields 包,image.plot(),它是相同的 "base" graphics::image.default() plot 但具有更多自定义参数(但无法从图例中删除刻度):

library(fields)
image.plot(B, nlevel = 10, col = custom(10),
           breaks = 1:11,
           lab.breaks = c("Low Elevation", rep("", 9), "High Elevation"),
           legend.mar = 10)


2) 使用 ggplot 包,geom_raster 函数:

library(ggplot2)
library(reshape) # convert matrix to long dataframe: melt

B_melt <- reshape2::melt(B)
head(B_melt)

ggplot(B_melt, aes(X1, X2, fill = value)) +
  geom_raster() +
  theme_void() +
  scale_fill_gradientn(name = element_blank(),
                       breaks = c(1, 9),
                       labels = c("Low Elevation", "High Elevation"),
                       colours = custom(10))

原始 post 中的代码使用 spatstat 包中的 im class。 plot 命令被发送到 plot.im。简单看一下help(plot.im)就知道如何控制色带了。相关参数是ribargs。这是一个解决方案:

plot(Elevation_Map, col=custom(10), main="",
     ribargs=list(at=Elevation_Map$yrange, 
                  labels=c("Low Elevation", "High Elevation"),
                  las=1))