#r #ggplot2
#r #ggplot2
Вопрос:
Я хотел бы создать график ggplot2, ограняя geom_function, чтобы параметр функции менялся в зависимости от сетки. например, что-то вроде этого:
my_function<-function(x, par)
{
if(par==1)
{
return(sin(x))
}
else
{
return(cos(x))
}
}
> head(data)
x parameter
1 -1.00 1
2 -0.99 1
3 -0.98 1
4 -0.97 1
5 -0.96 1
6 -0.95 1
> tail(data)
x parameter
397 0.95 2
398 0.96 2
399 0.97 2
400 0.98 2
401 0.99 2
402 1.00 2
> my_plot<-ggplot(data, aes(x)) geom_function(fun = my_function, args=list(par=parameter) facet_wrap(~parameter)
который не работает, потому что «параметр» не входит в область видимости для параметра args geom_function. Возможно ли это?
Ответ №1:
Я не думаю, что возможно сопоставить аргументы функции с аспектами, по крайней мере, не с geom_function()
. Причина, по которой я думаю, заключается в том, что geom практически не видит ничего, что происходит с данными, а сама функция видит только последовательность вдоль оси x (и args
аргумент). Тем не менее, я бы предложил следующий обходной путь, где вы делаете geom_function()
для фасетов индивидуально, устанавливая столбец фасетирования для этого слоя. Пример ниже:
library(ggplot2)
set.seed(0)
df <- data.frame(
x = 1:10,
y = 1:10 / 10,
z = sample(LETTERS[1:2], 10, replace = TRUE)
)
ggplot(df)
geom_point(aes(x, y))
geom_function(data = transform(df, z = "A"),
fun = dnorm, args = list(mean = 2.5, sd = 1))
geom_function(data = transform(df, z = "B"),
fun = dnorm, args = list(mean = 7.5, sd = 2))
facet_wrap(~ z)
Создано 2020-09-17 пакетом reprex (версия 0.3.0)