廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

ggplot2 で散布図に曲線を重ねて描いてグラデーションで色分けする方法

質問(2014年4月16日)

stat_function をいっぱい並べて書くのかっこわるいのでなんとかしたい。

####
#適当なデータセット
x = sort(rep(1:4,4))
c= 1:4*10
y = x^2+c + rnorm(length(x))
dat1 <- data.frame(x,y,c)
####
model1 <- function(x,c){x^2+c}
#
library(ggplot2)
plot1 <-ggplot(aes(x=x,y=y),data=dat1)
plot1 + geom_point(size=3, aes(colour=c))+
  scale_colour_gradient(low="red", high="black")+
#"red" から "black" のグラデーション
  stat_function(fun=function(x){model1(x,10)}, aes(colour=10))+
  stat_function(fun=function(x){model1(x,20)}, aes(colour=20))+
  stat_function(fun=function(x){model1(x,30)}, aes(colour=30))+
  stat_function(fun=function(x){model1(x,40)}, aes(colour=40))

f:id:abrahamcow:20140416025730p:plain

回答(2014年11月3日)

plyr パッケージの alply 関数を使えば stat_function をいっぱい並べて書かなくていいみたい。

library(plyr)
cov <-alply(as.matrix(c), 1, function(c) {
  stat_function(fun= function(x){model1(x,c)}, aes(colour=c))
})
plot1 + geom_point(size=3, aes(colour=c))+
  cov

f:id:abrahamcow:20141103154449p:plain

でもこれだと曲線が色分けされない。なぜだろう。

ggplot2 - Plotting a large number of custom functions in ggplot in R using stat_function() - Stack Overflow