Графики плотности шкалы в ggpairs на основе общих точек данных? - PullRequest
0 голосов
/ 11 февраля 2020

Я строю корреляции в ggpairs и разделяю данные на основе фильтра.

Графики плотности нормализуются по количеству точек данных в каждой отфильтрованной группе. Я бы хотел, чтобы они нормализовали общее количество точек данных во всем наборе данных. По сути, я хотел бы иметь возможность, чтобы сумма отдельных графиков плотности была равна графику плотности всего набора данных.

Я знаю, что это, вероятно, нарушает определение «графика плотности», но это стиль презентации, который я хотел бы изучить.

В простом ggplot я могу сделать это, добавив y=..count.. к эстетике c, но ggpairs не принимает эстетику x или y .

Некоторые примеры кода и графики:

set.seed(1234)
group = as.numeric(cut(runif(100),c(0,1/2,1),c(1,2)))
x = rnorm(100,group,1)
x[group == 1] = (x[group == 1])^2
y = (2 * x) + rnorm(100,0,0.1)
data = data.frame(group = as.factor(group), x = x, y = y)

#plot  of everything
data %>% 
  ggplot(aes(x)) + 
  geom_density(color = "black", alpha = 0.7)

Density plot of the whole data set

#the scaling I want
data %>% 
  ggplot(aes(x,y=..count..,  fill=group)) + 
  geom_density(color = "black", alpha = 0.7)

Density plot of dataset scaled to the total count

#the scaling I get
data %>% 
  ggplot(aes(x,  fill=group)) + 
  geom_density(color = "black", alpha = 0.7)

Density plot of dataset scaled to the count of each group

data %>% ggpairs(., columns = 2:3,
             mapping = ggplot2::aes(colour=group), 
             lower = list(continuous = wrap("smooth", alpha = 0.5, size=1.0)),
             diag = list(continuous = wrap("densityDiag", alpha=0.5 ))
)

The actual ggpairs plot

Есть ли предложения, которые не связаны с переформатировать весь набор данных?

1 Ответ

0 голосов
/ 11 февраля 2020

Я не уверен, что понимаю вопрос, но если нужно построить плотности обеих групп плюс плотность всех данных, это можно легко сделать с помощью

  1. Избавление от группировки эстетика, в данном случае, fill.
  2. Выполнение другого вызова на geom_density, но на этот раз с inherit.aes = FALSE, чтобы предыдущая эстетика не была унаследована.

И затем построить график плотности.

library(tidyverse)

data %>% 
  ggplot(aes(x, y=..count.., fill = group)) + 
  geom_density(color = "black", alpha = 0.7) +
  geom_density(mapping = aes(x, y = ..count..),
               inherit.aes = FALSE)

enter image description here

...