我怎样才能在R中使用ggplot来制作一个散点图,其颜色会根据y> x或y <x而变化?

时间:2016-11-07 02:07:59

标签: r graph ggplot2

=“”

我想制作一个图表如果x的值大于y的值,则该点是颜色,如果它小于y,则它是另一种颜色。

以下是我提出的代码:

df = read.table(text = 
          "C1         C2 
        2003          2030
        2001          2301
        2005          2002
        2333          2003
        5466          4444
        2000          2002
        2222          2223
        1000          2032
    ", sep = "", header = TRUE)
p2 <- vector()
p3 <- vector()
for (i in 1:length(A$C1))
  {if(A$C2[i]>=A$C1[i]) {
  p2[i] <- A$C1[i]
}else
if(A$C2[i]<=A$C1[i]){
  p3[i] <- A$C1[i]
}
}
p <- ggplot(data=Movie, aes(x=C1, y=C2))+ 
  ylab("C2")+
  xlab("C1")+
  ggtitle("C1 on C2")+
  geom_smooth(method = lm)+
  geom_point(aes(x=p2), color="blue")+
  geom_point(aes(x=p3), color="green")
p

我认为我的问题是循环,它给了我一堆不能被geom_point()函数使用的NA。 谢谢。

1 个答案:

答案 0 :(得分:2)

比你想象的容易。

df <- transform(df,P=C1>C2)
ggplot(df, aes(x=C1, y=C2, colour=P))+ 
  geom_smooth(method = lm,aes(group=1))+
    geom_point()+
    scale_colour_manual(values=c("blue","green"))+
    geom_abline(intercept=0,slope=1,lty=2)

@ rawr的解决方案

ggplot(df, aes(C1, C2)) + 
  geom_point(colour = ifelse(df$C1 <= df$C2, 'blue', 'green')) 

也有效,但它不会给你一个传奇(如果你想要一个),它也不会很好地扩展(例如,如果你想分成三到四组,它会仍然有可能,但会逐渐变得更烦人。)