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

问题描述

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

解决方法

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

library(cmocean)
x = sort(runif(100,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,len=10)
image(1,y,z,col=pal,axes=FALSE,xlab="",ylab="")
axis(2)

enter image description here

,

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

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,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)有比例限制。除了面板“B”中的比例限制外,还需要 oob 选项(“Out Of Bounds)以“保持”最深的颜色,否则 4000 以上的颜色为灰色。我还更改了面板上的标签图例(labels 选项)将“4000”更改为“4000+”,但取决于您是否认为这有用。

example.png