R 如何使阈值以下的所有值都具有单色且比例连续?
我想将一个变量映射到一个连续的颜色比例,但是如果该值低于某个阈值,它应该有一个特定的颜色。在本例中,我想让所有车型的mpg<20都用灰色填充,上面的一切都用连续色标:R 如何使阈值以下的所有值都具有单色且比例连续?,r,ggplot2,R,Ggplot2,我想将一个变量映射到一个连续的颜色比例,但是如果该值低于某个阈值,它应该有一个特定的颜色。在本例中,我想让所有车型的mpg
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
中总是可以覆盖东西的。