【问题标题】:ggplot2 color for x and y by valuex和y的ggplot2颜色值
【发布时间】:2018-03-30 08:31:33
【问题描述】:

一直在寻找几个小时,我尝试了所有的解决方案,包括休息、切... 这是我的问题: 我有一个这样的数据框:

           col1          col2
1          NA            NA
2          NA          4.73
3          NA            NA
4          NA            NA
5          NA            NA
6        8.72          7.64
7        2.32            NA
8          NA            NA
9        8.29          6.23
10       9.36          7.72

我是这样画的:

scatter_plot <- ggplot(AB2, aes(col1,col2))

scatter_plot + geom_point(color=ifelse(col1>5,"#5DCA03","red")) +
  labs(x = "col2", y = "col1") + geom_smooth(method="lm")

但我真正想要的是当 col1 OR col2 的红点

谢谢你

编辑:

应用 Luke Hayden 解决方案后:

scatter_plot <- ggplot(AB2, aes(col1,col2))

scatter_plot + geom_point(color=ifelse(col1<5 | col2<5,"red","#5DCA03")) +
  labs(x = "col2", y = "col1") + 
  geom_smooth(method="lm")

我得到了这个情节rplot

虽然我不明白为什么 col1 和 col2 的红点值 > 5

第二次编辑:

Luke Hayden 的最后一次编辑之后,我解决了这个问题,虽然我必须将 lm 颜色设置为蓝色,否则我有 2 lm:1 表示点值 5. 现在代码如下:

scatter_plot <- ggplot(AB2, aes(col1,col2, col=valid))

scatter_plot + geom_point() +
  labs(x = "col2", y = "col1") +
  scale_color_manual(values=c("red","#5DCA03"))+
  geom_smooth(method="lm", color="blue")

【问题讨论】:

  • 首先,您需要将颜色定义与aes。其次,col1 &gt; 5 你需要什么(删除ifelse),因为你将传递逻辑向量。最后,使用函数指定想要的颜色:scale_color_manual(参数values)。

标签: r ggplot2


【解决方案1】:

最简单的方法是添加一个额外的列来检查列是否有 >5 的条目。像这样:

AB <- data.frame(a= c(0, 3, 1, 6), b= c(2,7, NA, 2))
AB$isred <- apply(AB, 1, max, na.rm=T) >5

ggplot(data= AB, aes(x=a, y=b, col=isred))+
  geom_point()+
  scale_colour_manual(values=c("black","red"))

您也可以简单地更改您的 ifelse 以要求任一条件为真:

color=ifelse(col1>5 | col2>5,"#5DCA03","red")

在下面讨论之后,我理解这一点,因为您希望两者都大于 5。 在这种情况下,请使用:

AB <- data.frame(a= c(0, 3, 1, 6), b= c(2,7, NA, 8))
AB$isred <- AB$a > 5 & AB$b >5


ggplot(data= AB, aes(x=a, y=b, col=isred))+
  geom_point()+
  scale_colour_manual(values=c("black","red"))

或者简单地说:

color=ifelse(col1>5 & col2>5,"#5DCA03","red")

【讨论】:

  • 好的,谢谢!我试过这个,但没有正确的语法......但现在我还有其他问题,看起来我的观点不是轴我有两个值> 5的红点我不明白......
  • 你能说清楚点吗?我不明白这是什么问题
  • 你用我的第一种方法试过了吗?你能用 dput(AB2) 提供你的数据吗?
  • 是的,事实是,使用您的第一种方法,它仅适用于第一个 col:如果 col 1 > 5,即使 col2 5,如果 col1 OR col2 则设置为 False
  • 我以为如果其中一个 >5,您希望它是红色的,但只有当两者都 > 5 时,您才希望它是红色的,对吧?
猜你喜欢
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 2018-01-10
  • 2018-03-30
  • 2021-11-18
相关资源
最近更新 更多