0

我正在绘制相关性ggpairs并根据过滤器拆分数据。

密度图根据每个过滤组中的数据点数量对其进行标准化。我希望他们对整个数据集中的数据点总数进行标准化。本质上,我希望能够使各个密度图的总和等于整个数据集的密度图。

我知道这可能打破了“密度图”的定义,但这是我想探索的一种呈现方式。

简而言之ggplot,我可以通过添加y=..count..美学来做到这一点,但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)

整个数据集的密度图

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

数据集的密度图缩放到总计数

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

数据集的密度图缩放到每组的计数

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 ))
)

实际的 ggpairs 图

是否有任何不涉及重新格式化整个数据集的建议?

4

1 回答 1

0

我不确定我是否理解这个问题,但如果要绘制两组的密度加上整个数据的密度,可以很容易地通过

  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)

在此处输入图像描述

于 2020-02-11T07:41:44.103 回答