ggplot 核密度图线重叠不正确

问题描述

我的密度图中的颜色是错误的!我不明白为什么。

这是我的数据:https://pastebin.com/0jqHgvxx

data %>%
  ggplot(aes(x=amountremain,color=black)) +
  geom_density()  

enter image description here

当我检查原始数据时,我发现 x=0 处的红色峰值是正确的,但最大 x 值对应于红色而非蓝色线的 y 值。

黑色 = TRUE 的最大 x 值为 162414.6,黑色 = FALSE 的最大 x 值为 253021.3,所以尾部应该是红色而不是蓝色。

b <- unclass(density(data$amountremain[data$black==FALSE]))
max(b$y)
max(b$x)
[1] 0.0003079798
[1] 253021.3
a <- unclass(density(data$amountremain[data$black==TRUE]))
max(a$y)
max(a$x)
[1] 0.0002832889
[1] 162414.6

解决方法

如果您查看 y 轴上的不同比例,您可以看到 TRUE 的最后一个非零值大约为 160000,而 FALSE 的最后一个非零值是应该是 250000 左右。

所以表示是正确的,但很难看到尾巴。

看:

data %>% 
  ggplot(aes(x=amountremain,color=black)) +
  geom_density() + 
  ylim(0,10^-5)

编辑


@MrFlick 解释了为什么线路没有中断。 如果您的目标是在最后一个值上中断 TRUE 的分布,一种可能的解决方案是创建两个不同的密度数据帧:

to_dens <- function(df) {
  d <- density(df)
  df_d <- tibble(x = d$x,y = d$y)
  return(df_d)
}

df1 <- df %>% 
  filter(black == TRUE) %>% 
  summarise(to_dens(amountremain))

df2 <- df %>% 
  filter(black == FALSE) %>% 
  summarise(to_dens(amountremain))

ggplot() + 
  geom_line(data = df1,aes(x = x,y = y),col = "steelblue3") +
  geom_line(data = df2,col = "firebrick2")