我试图找出为什么我的x轴出现紫色线,与我的传说中的“Prypchan,Lida”颜色相同。我查看了数据,但没有看到任何问题。
ggplot(LosDoc_Ex, aes(x = LOS)) +
geom_density(aes(colour = AttMD)) +
theme(legend.position = "bottom") +
xlab("Length of Stay") +
ylab("Distribution") +
labs(title = "LOS Analysis * ",
caption = "*exluding Residential and WSH",
color = "Attending MD: ")
答案 0 :(得分:4)
通常我会等待一个可重复的例子,但在这种情况下,我说基本的解释非常简单:
geom_density()
创建多边形,而不是行。
使用来自ggplot2自己的包的样本数据集,我们可以在密度图下方观察到相同的直线,覆盖x轴和& y轴。线条的颜色取决于哪个图块位于其余图形之上:
p <- ggplot(diamonds, aes(carat, colour = cut)) +
geom_density()
解决方法1 :您可以自行为新数据框中的每个颜色组手动计算密度值,&amp;使用geom_line()
代替geom_density()
绘制结果:
library(dplyr)
library(tidyr)
library(purrr)
diamonds2 <- diamonds %>%
nest(-cut) %>%
mutate(density = map(data, ~density(.x$carat))) %>%
mutate(density.x = map(density, ~.x[["x"]]),
density.y = map(density, ~.x[["y"]])) %>%
select(cut, density.x, density.y) %>%
unnest()
ggplot(diamonds2, aes(x = density.x, y = density.y, colour = cut)) +
geom_line()
解决方法2 :或者您可以获取原始图表生成的数据,&amp;使用geom_line()
绘制 。然而,颜色需要重新映射到图例值:
lp <- layer_data(p)
if(is.factor(diamonds$cut)) {
col.lev = levels(diamonds$cut)
} else {
col.lev = sort(unique(diamonds$cut))
}
lp$cut <- factor(lp$group, labels = col.lev)
ggplot(lp, aes(x = x, y = ymax, colour = cut)) +
geom_line()
答案 1 :(得分:2)
有两种简单的解决方法。首先,如果只需要线条而没有填充区域,则可以简单地将geom_line()
与密度统计一起使用:
library(ggplot2)
ggplot(diamonds, aes(x = carat, y = stat(density), colour = cut)) +
geom_line(stat = "density")
请注意,要使此方法起作用,我们需要将y
的美观度设置为stat(density)
。
第二,如果要填充线下的区域,则可以使用ggridges软件包中的geom_density_line()
。它的工作原理与geom_density()
完全一样,但是它绘制的是一条线(在下面具有填充区域),而不是多边形。
library(ggridges)
ggplot(diamonds, aes(x = carat, colour = cut, fill = cut)) +
geom_density_line(alpha = 0.2)
由reprex package(v0.2.1)于2018-12-14创建