ggplot 核密度图线重叠不当
ggplot kernal density plot lines overlapping improperly
我的密度图中的颜色有误!我不明白为什么。
这是我的数据:https://pastebin.com/0jqHgvxx
data %>%
ggplot(aes(x=amountremain, color=black)) +
geom_density()
当我检查原始数据时,我发现 x=0 处的红色峰值是正确的,但最大 x 值对应于红线而非蓝线的 y-value。
black = TRUE 的最大 x 值为 162414.6,black = 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-axis 上查看不同的比例,您可以看到 TRUE
的最后一个 non-zero 值大约是 160000,而最后一个 non-zero 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, aes(x = x, y = y), col = "firebrick2")
我的密度图中的颜色有误!我不明白为什么。
这是我的数据:https://pastebin.com/0jqHgvxx
data %>%
ggplot(aes(x=amountremain, color=black)) +
geom_density()
当我检查原始数据时,我发现 x=0 处的红色峰值是正确的,但最大 x 值对应于红线而非蓝线的 y-value。
black = TRUE 的最大 x 值为 162414.6,black = 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-axis 上查看不同的比例,您可以看到 TRUE
的最后一个 non-zero 值大约是 160000,而最后一个 non-zero 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, aes(x = x, y = y), col = "firebrick2")