ggplot2颜色为x和y的值

时间:2018-03-30 08:31:33

标签: r ggplot2

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

           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或col2&lt;时,该点是红色的。五 在这里我只得到col1&lt;的红点5

谢谢你

编辑

应用 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

虽然我不明白为什么我的红点有价值&gt; 5表示col1和col2

第二次修改:

来自 Luke Hayden 的最后一次编辑后,我修复了问题,虽然我必须将lm颜色设置为蓝色,否则我有2 lm:1表示点值&lt; 5和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")

1 个答案:

答案 0 :(得分:0)

最简单的方法是添加一个额外的列,检查列是否有条目&gt; 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")

在下面讨论之后,我理解这一点,因为你要两者都是&gt; 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")