基于值的Geom_jitter颜色

时间:2018-07-03 16:23:25

标签: r ggplot2 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")))

enter image description here

1 个答案:

答案 0 :(得分:2)

像以前一样列出几何图形中的颜色名称并不会告诉色标使用什么颜色,它只是将值分为几类。字符串"red""black"不一定有任何含义。如果您想在一个几何图形内部分配颜色,请提供您使用的颜色名称或十六进制代码,然后添加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处理创建几何图形并映射到比例尺,让scales处理比例尺的外观。您可以将a < 5用作变量(一种代理变量,因为它不在您的数据框中),该变量将采用true或false值。然后使用色标,例如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 package(v0.2.0)于2018-07-03创建。