根据ggplot中的条件着色点
Posted
技术标签:
【中文标题】根据ggplot中的条件着色点【英文标题】:Colour dots based on conditions in ggplot 【发布时间】:2021-09-05 08:17:54 【问题描述】:我有这个数据集
a <- data.frame(PatientID = c("0002" ,"0004", "0005", "0006" ,"0009" ,"0010" ,"0018", "0019" ,"0020" ,"0027", "0039" ,"0041" ,"0042", "0043" ,"0044" ,"0045", "0046", "0047" ,"0048" ,"0049", "0055"),
volume = c( 200 , 100 , 243 , 99 , 275, 675 ,345 , 234 , 333 ,444, 123 , 274 , 442 , 456 ,666 , 567 , 355 , 623 , 105 , 677 ,876),
Status= c("New" , "Old" , "New" , "New" , "Old", "New" ,"Old" , "New" , "Old" , "New" , "New" ,"New" ,"Old" , "New" ,"New" ,"Old" , "New" , "Old" , "New" , "Old" ,"Old"),
sex = c( 1 , 1 , 1 , 1 , 0, 0 ,0 , 0 , 0 ,1 , 1 , 1 , 0 , 0 ,1 , 1 , 1 , 1 , 1 , 1 ,1), stringsAsFactors = F)
还有这段代码
color <- c("#00B7EB","#EE2A7B")
ggplot(a, aes(y = a$volume, x = a$Status, fill = a$Status)) +
geom_boxplot() +
geom_point(alpha=0.4) +
scale_fill_manual(values=color) +
labs(x='', y='Volume') +
theme_classic() +
theme( text = element_text( size = 15))
这会产生以下情节
问题:
如何根据以下条件为这个 ggplot 中的点着色?: 如果女性(性别==1)的音量> 100,则为红色,否则为黑色 如果男性 (sex==0) 的音量 > 200,则为红色,否则为黑色
非常感谢!
【问题讨论】:
使用该条件向您的数据添加一列,然后将该列映射到aes(color = that_column)
。此外,您应该改掉在aes()
中使用data$column
的坏习惯。将您的代码更改为ggplot(a, aes(y = volume, x = Status, fill = Status)) + ...
但是,我只想让箱线图与我的状态类别相关联,而我唯一想要着色的是点,以了解谁在正常范围之外。说得通?我想知道 geom_point(aes(color = factor(label)) 之类的东西是否可行。但我不确定如何正确编写它
所以你把aes(color = that_column)
放在geom_point()
层里面,它只会应用到那个层。
【参考方案1】:
一种方法是将 geom_point 的颜色美学设置为您的条件:
geom_point(alpha=0.4, aes(colour = (sex == 1 & volume > 100) | (sex == 0 & volume > 200))) +
然后使用 scale_colour_manual 将颜色设置为红色和黑色:
scale_colour_manual(values = c("black", "red")) +
【讨论】:
以上是关于根据ggplot中的条件着色点的主要内容,如果未能解决你的问题,请参考以下文章