使用带有图例

时间:2018-02-12 08:21:32

标签: r ggplot2 legend

我正在尝试创建具有多个功能的情节。每个函数由数据帧中的系数定义,数据帧的每一行包含一个函数的系数和该组的标识符。

目标是让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列)对应的美学?

0 个答案:

没有答案