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)))
Другие вопросы по тегам