我正在尝试创建具有多个功能的情节。每个函数由数据帧中的系数定义,数据帧的每一行包含一个函数的系数和该组的标识符。
目标是让stat_function使用数据框中的系数绘制线条,但没有x的实际数据。每一行都应具有唯一的颜色,并列在图例
中我见过添加了几个stat_functions的示例,并且颜色是单独定义的here。我想避免这种情况,使函数动态化,并能够以最小的变化绘制可变数量的函数。
答案发现here非常接近我所寻找的,但每个功能都有相同的颜色,没有传说。
我设法输出了一个具有独特颜色且没有图例的图表,并且只使用了一种颜色。
以下是我在ggplot中的情节示例:
library(plyr)
#create data frame
qr <- c(0.11,0.11,0.11,0.05)
qs <- c(0.98,0.98,0.97,0.93)
alpha <- c(78.0564,141.017,58.0405,12.6902)
n <- c(1.53364,1.37685,1.42174,1.15284)
ks <- c(9.936,3.915563,04575,0.312171)
l <- c(-0.09953,-1.5645,-0.12945,2.16382)
m <- 1-1/n
depth <- c(1,2,3,4)
coefs <- data.frame(qr,qs,alpha,n,ks,l,m,depth)
#legend one colour
coeflines1 <-
alply(as.matrix(coefs), 1, function(coef) {
stat_function(fun=function(x)
{coef[1]+(coef[2]-coef[1])/((1+(coef[3]*x)^coef[4])^coef[7])},
aes(colour = as.factor(depth[1])))
})
ggplot(data.frame(x=c(0.001, 10)), aes(x=x)) +
coeflines1 +
scale_x_log10()
#no legend multile colour
coeflines2 <-
alply(as.matrix(coefs), 1, function(coef) {
stat_function(fun=function(x)
{coef[1]+(coef[2]-coef[1])/((1+(coef[3]*x)^coef[4])^coef[7])},
colour = coef[8])
})
ggplot(data.frame(x=c(0.001, 10)), aes(x=x)) +
coeflines2 +
scale_x_log10()
第一个例子的问题是它没有引用函数中的任何内容。如果depth[1]
更改为coef[8]
,我会Error in coef[8] : object of type 'closure' is not subsettable
在第二个例子中没有出现传奇,因为我没有绘制美学。如何映射与数据帧coefs的最后一个(第8列)对应的美学?