2016-08-17 2 views
0

Это прослеживание сообщение для Draw min, max function in RR Нарисуйте несколько функций с разными параметрами на одном участке

Я хотел бы сделать несколько функций с разными параметрами на одном участке. Но групповой аргумент ggplot, похоже, не работает.

данных:

# data preparation/ load 
feTargetPv <- structure(list(ModelYear = 2012:2016, 
ComplianceCategory = c("pv","pv", "pv", "pv", "pv"), 
fetargetfix = c(30.7, 31.4, 32.1, 33.3, 34.7), 
a = c("35.95", "36.8", "37.75", "39.24", "41.09"), 
b = c("27.95", "28.46", "29.03", "29.9", "30.96"), 
c = c("0.0005308", "0.0005308", "0.0005308", "0.0005308", "0.0005308"), 
d = c("0.006057", "0.00541", "0.004725", "0.003719", "0.002573")), 
.Names = c("ModelYear", "ComplianceCategory", "fetargetfix", "a", "b", "c", "d"), 
row.names = c(47L, 49L, 51L, 53L, 55L), class = "data.frame") 

Функция:

my <- c(2012,2013, 2014) 
eqs = function(x,my){ 
    1/(pmin(pmax(as.numeric(feTargetPv[which(feTargetPv$ModelYear == my),"c"]) * x + 
       as.numeric(feTargetPv[which(feTargetPv$ModelYear == my),"d"]), 
       1/as.numeric(feTargetPv[which(feTargetPv$ModelYear == my),"a"])), 
      1/as.numeric(feTargetPv[which(feTargetPv$ModelYear == my),"b"]))) 
} 

Ggplot:

ggplot(data.frame(x=seq(from = 30, to = 75, by = 1)), aes(x), group = my, col = my) + 
    stat_function(fun=eqs, args=my) + xlab("x") + ylab("y") 

Сообщение об ошибке

Warning message: 
Computation failed in `stat_function()`: 
unused arguments (2013, 2014) 

Как мне предоставить свои параметры stat_function()?

+0

Кажется, что 'stat_function' не любит рисовать несколько функций на один вызов. Вероятно, лучшим решением было бы добавить несколько вызовов в stat_function внутри цикла. См. Http://stackoverflow.com/questions/24949065/multiple-stat-function-on-grouped-data-with-ggplot2 – jdobres

ответ

1

Вместо использования stat_function, вы можете рассчитать значения в год через свою функцию за пределами ggplot, а затем использовать geom_line.

Вы можете начать с создания набора данных ваших значений x за каждый год, используя ваш my в качестве вашей переменной ModelYear.

dat = expand.grid(x=seq(from = 30, to = 75, by = 1), ModelYear = my) 

Затем объедините значения x с набором данных, который содержит значения параметров функции. По умолчанию это сохраняет только информацию для первого набора данных, dat.

dat2 = merge(dat, feTargetPv, by = "ModelYear") 

Теперь ваша функция может принимать либо векторы х, а, б, в, г или набора данных и переменной х.

eqs = function(data, x){ 
    1/(pmin(pmax(as.numeric(data[,"c"]) * x + 
       as.numeric(data[,"d"]), 
       1/as.numeric(data[,"a"])), 
      1/as.numeric(data[,"b"]))) 
} 

Добавить значения из функции в виде столбца в набор данных. Я называю эту новую переменную y.

dat2$y = eqs(dat2, dat2$x) 

Теперь зарисовки проста, используя значения Y для отображения позиции у наряду с geom_line.

ggplot(dat2, aes(x, y, color = factor(ModelYear))) + 
    geom_line() 

enter image description here

Смежные вопросы