ggplot2:如何对连续值进行分箱并为其分配特定颜色

问题描述 投票:0回答:2

使用

ggplot2
,我想将连续值分入三个容器,并为每个容器分配特定的颜色。

在下面的代码示例中,我希望所有值 < 10 to be black, values >=10 和 <= 100 to be red, and all values > 100 均为白色。

data.frame(c = c("a", "b", "c"), v = c(1,50,500)) %>%
  ggplot(aes(y = c, x = "1", fill = v)) +
  geom_tile() +
  scale_fill_stepsn(colors = c("black", "red", "white"),
                    breaks = c(10, 100),
                    labels = c(10, 100))

但我得到的是这样的:

感谢您的帮助。

r ggplot2
2个回答
3
投票

limits
周围添加
breaks

data.frame(c = c("a", "b", "c"), v = c(1,50,500)) %>%
  ggplot(aes(y = c, x = "1", fill = v)) +
  geom_tile() +
  scale_fill_stepsn(colors = c("black", "red", "white"),
                    limits = c(9, 101), # NEW
                    breaks = c(10, 100))

这不适用于

limits=c(0,500)
limits=c(10,50)
,不确定到底为什么。


0
投票

这不使用

scale_fill_stepsn
,但执行预期的绘图任务(如果我正确理解了问题)。

dat <- tibble(c = letters[1:5], v = c(1, 10, 50, 100, 500)) %>%
  mutate(vcat_color = case_when(
    v < 10 ~ "black",
    between(v, 10, 100) ~ "red",
    v > 100 ~ "white"
  ))

dat %>% 
  ggplot(aes(y = c, x = "1", fill = vcat_color)) +
  geom_tile() +
  scale_fill_identity(
    "v", 
    breaks = c("black", "red", "white"), 
    labels = c("v < 10", "10 <= v >= 100", "v > 100"),
    guide = "legend"
    ) 
© www.soinside.com 2019 - 2024. All rights reserved.