R 如何使阈值以下的所有值都具有单色且比例连续?

R 如何使阈值以下的所有值都具有单色且比例连续?,r,ggplot2,R,Ggplot2,我想将一个变量映射到一个连续的颜色比例,但是如果该值低于某个阈值,它应该有一个特定的颜色。在本例中,我想让所有车型的mpg

我想将一个变量映射到一个连续的颜色比例,但是如果该值低于某个阈值,它应该有一个特定的颜色。在本例中,我想让所有车型的mpg<20都用灰色填充,上面的一切都用连续色标:

library(ggplot2)
dat <- head(mtcars)
dat$model <- head(colnames(mtcars))
dat$is_low <- ifelse(dat$mpg < 20, TRUE, FALSE)

ggplot(dat, aes(x = model, y = mpg, fill = mpg)) +
    geom_col()
库(ggplot2)

dat不是最优雅的,但您可以添加一个过滤层,仅过滤到您想要的灰色层:

ggplot(dat, aes(x = model, y = mpg, fill = mpg)) +
  geom_col() +
  geom_col(data = dat[dat$is_low,], fill = "gray70")

添加第二层
geom_col()
,将每个条涂成灰色,如果不符合标准,则跳过。您可能还需要更改第一层的着色比例限制

ggplot(dat, aes(x = model, y = mpg, fill = mpg)) +
  geom_col() + geom_col(fill=ifelse(dat$mpg < 20, 'gray', NA))
ggplot(dat,aes(x=model,y=mpg,fill=mpg))+
几何图形颜色()+几何图形颜色(填充=ifelse(dat$mpg<20,'灰色',NA))

最简单的方法是指定
fill=ifelse(mpg<20,NA,mpg)
。您可以使用
scale\u fill\u continuous(NA.value=“green”)
来控制
NA
值的颜色。如果您将此作为答案,我将对此进行投票:)我还没有决定是否使用您的或@Jon Spring解决方案,但这太棒了!也许更简单:我认为可以在
缩放填充连续
中使用
限制
,类似于:
缩放填充连续(限制=c(20,最大值(dat$mpg))
。默认的越界(
oob
)参数是
oob\u-censor()
,它“将越界值替换为
NA
(这里是低于20的值),然后
NA.value
生效。我对
scales::oob_-censor
非常天真的理解,使我认为
scale_-fill_-continuous(oob=oob_-censor(mpg,range=c(20,Inf))
也可以工作。没有@teunbrand,假设您更了解此函数:)是的,我非常了解这个函数,因为我在一个PR-to-scales包中编辑了这个函数:)参数
oob
接受一个函数。然后,该函数内部提供了
x
range
参数,其中
oob\u-censor
将越界值替换为
NA
。因此,第一个解决方案有效地完成了第二个解决方案试图完成的任务,因为
oob\u censor()
是连续缩放的默认
oob
。您也可以提供限制为
c(20,NA)
,以将
NA
替换为数据的自然上限。@teunbrand感谢您花时间澄清!我这边的草率RTFM;self注意:
oob
只接受函数名(而不是带有参数的实际函数,就像我天真的尝试…)。干杯实际更改限制将意味着超出范围的任何内容都将是灰色的,因此只需添加
+缩放填充连续(限制=c(20,最大值(dat$mpg))
效果很好。我将不得不看看我是否使用它,或者@teunbrand的,这在一定程度上取决于我真实用例的实现,但这非常好。我一直忘了在
ggplot
中总是可以覆盖东西的。