如何分配 R 中色带上显示的最大值

How to assign a maximum value shown on a colour ramp in R

这在 R 中可能是一件简单的事情,但我想设置在预定义色带上显示的最大值。我被要求使用 cmocean 调色板并有一个数值变量,其值范围从 0 到 ~10。但是,我希望最暗的颜色应用于值 => 5。例如,5 及以上的任何值都将显示为相同/“最大”可用颜色。我不想删除 5 以上的数据,因此子集化不是一种选择。我希望这是有道理的,谢谢!

至少有一种方法可以做到这一点,看看这种方法是否适用于您的用例:

library(tidyverse)
library(palmerpenguins)
#install.packages("cmocean")
library(cmocean)
library(cowplot)
library(ggbeeswarm)

plot_1 <- penguins %>% 
  na.omit() %>%
  ggplot(aes(x = species, y = flipper_length_mm, color = body_mass_g)) +
  geom_quasirandom()  +
  scale_color_cmocean(name = "deep")

plot_2 <- penguins %>% 
  na.omit() %>%
  ggplot(aes(x = species,
             y = flipper_length_mm,
             color = body_mass_g)) +
  geom_quasirandom()  +
  scale_color_cmocean(name = "deep",
                      limits = c(2500, 4000),
                      oob = scales::squish,
                      labels = c("2500", "3000", "3500", "4000+"))
cowplot::plot_grid(plot_1, plot_2, labels = "AUTO")

说明:面板“A”(plot_1)没有比例限制,面板“B”(plot_2)有比例限制。 oob 选项(“越界”)除了面板“B”中的比例限制外,还需要 'keep' 最暗的颜色,否则 4000 以上的颜色为灰色。我还更改了标签在图例(labels 选项)上将“4000”更改为“4000+”,但您认为这是否有用取决于您。

我猜是这样的?您根据定义的中断切割值,在您的情况下,5 到 10 是 1 个中断,您为其分配一种颜色:

library(cmocean)
x = sort(runif(100,0,10))
pal = cmocean("balance")(11)
lbl = cut(x,breaks = c(seq(0,5,length.out=10),10),right=FALSE)
names(pal) = unique(lbl)

绘制它,使用 this post 中的代码作为颜色条:

layout(matrix(c(1,2),ncol=2),widths=c(5,1))

plot(values,rep(1,length(values)),col=pal[lbl],pch=20)

my.colors = pal
z=matrix(1:10,nrow=1)
y=seq(0,5,len=10)
image(1,y,z,col=pal,axes=FALSE,xlab="",ylab="")
axis(2)