r - 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")))
解决方案
像你一样在你的 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 日创建。
推荐阅读
- javascript - 单击添加新时启用输入,单击创建按钮后禁用输入
- graphql - nestjs 将接口转换为 graphql 类
- javascript - 将 java jar 存根数据与 react-native 应用程序捆绑在一起,使其离线工作
- swiftui - ZStack 或使用 .overlay() 之间的区别
- vim - 如何删除多个以 [ 开头并以 ] 结尾的单词
- google-sheets - 在垂直轴上使用值小于 1 的对数刻度
- javascript - Typescript 无法转换抽象函数数组,导致错误,为什么?
- android - Android 预期 begin_object 但在第 1 行第 2 列路径 $
- javascript - 从 jQuery ajax 函数的 promise 语法到 try/catch/finally 和 async/await 的转换失败?
- r - 将列表的开头与时间戳匹配