Ggpairs barDiag с нормальной кривой
Я использую ggpairs от ggplot2.
Мне нужно получить гистограмму по диагонали для ggpairs, но я хочу наложить кривую нормальной плотности, используя среднее значение и SD данных.
Я прочитал справку ( https://www.rdocumentation.org/packages/GGally/versions/1.4.0/topics/ggpairs), но не могу найти способ сделать это. Думаю, я должен создать свою собственную функцию (myfunct), а затем
ggpairs(sample.dat, diag=list(continuous = myfunct))
Кто-нибудь пробовал это?
Я пробовал следующее:
head(data)
x1 x2 x3 x4 x5 x6 F1 F2
1 -0.749 -1.57 0.408 0.961 0.777 0.171 -0.143 0.345
myhist = function(data){
ggplot(data, aes(x)) +
geom_histogram(aes(y = ..density..),colour = "black") +
stat_function(fun = dnorm, args = list(mean = mean(x), sd = sd(x)))
}
ggpairs(sample.data, diag=list(continuous = myhist))
Результат:
Ошибка в (функция (данные): неиспользуемый аргумент (отображение = список (~x1))
1 ответ
В этом вопросе приводится пример кода для добавления нормальной кривой к гистограмме вggplot2
. Вы можете использовать это, чтобы написать свою собственную функцию для перехода кdiag
аргумент ggpairs
. Для расчетаmean
а также sd
данных, вы можете получить соответствующие данные, например, eval_data_col(data, mapping$x)
. Пример ниже (возможно, немного сложнее, чем нужно, но он позволяет передавать параметры для изменения цветов и т. Д., Используяwrap
функциональность.
library(GGally)
diag_fun <- function(data, mapping, hist=list(), ...){
X = eval_data_col(data, mapping$x)
mn = mean(X)
s = sd(X)
ggplot(data, mapping) +
do.call(function(...) geom_histogram(aes(y =..density..), ...), hist) +
stat_function(fun = dnorm, args = list(mean = mn, sd = s), ...)
}
ggpairs(iris[1:100, 1:4],
diag=list(continuous=wrap(diag_fun, hist=list(fill="red", colour="blue"),
colour="green", lwd=2)))