我想制作一个图表如果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。 谢谢。
答案 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'))
也有效,但它不会给你一个传奇(如果你想要一个),它也不会很好地扩展(例如,如果你想分成三到四组,它会仍然有可能,但会逐渐变得更烦人。)