首页 > 解决方案 > Geom_jitter 颜色基于值

问题描述

有没有办法根据数值为箱线图上的抖动点着色,例如:

ggplot(data, aes(y = y_var, x = x_var)) +
  geom_jitter(size = 2, aes(color = ifelse(y_var < 5, "red", "black)))

我添加了这个不太有效的可重现示例(图上的颜色与抖动调用不对应):

a <- rnorm(100, mean = 5, sd = 1)
b <- as.factor(sample(0:1, 100, replace = TRUE))
test_data <- data.frame(cbind(a,b))
test_data$b <- as.factor(test_data$b)

ggplot(test_data, aes(y = a, x = b)) + 
  geom_boxplot()+
  geom_jitter(aes(color = ifelse(a < 5, "red", "black")))

在此处输入图像描述

标签: rggplot2jitter

解决方案


像你一样在你的 geom 中列出颜色的名称并不能告诉色标使用什么颜色——它只是将值分成类别。字符串"red"or"black"不一定有任何意义。如果您想在 geom 中分配颜色,请给出您正在使用的颜色名称或十六进制代码,然后添加scale_color_identity一个指示"red"实际上意味着“使它具有红色”等。

library(tidyverse)

ggplot(test_data, aes(y = a, x = b)) +
  geom_boxplot() +
  geom_jitter(aes(color = ifelse(a < 5, "red", "black"))) +
  scale_color_identity()

更好(并且更可扩展和可维护)是关注点分离:让 geoms 处理创建几何图形和映射到比例尺,让比例尺处理设置比例尺的外观。您可以将a < 5其用作变量(一种代理变量,因为它不在您的数据框中),它将采用真值或假值。然后使用色标,例如scale_color_manual,根据真值或假值设置颜色。

ggplot(test_data, aes(y = a, x = b)) +
  geom_boxplot() +
  geom_jitter(aes(color = a < 5)) +
  scale_color_manual(values = c("TRUE" = "red", "FALSE" = "black"))

reprex 包(v0.2.0)于 2018 年 7 月 3 日创建。


推荐阅读