密度曲线的X轴上的意外线(r)

时间:2018-04-01 00:11:59

标签: r ggplot2 density-plot

我试图找出为什么我的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: ")

LOS Analysis by Doc

2 个答案:

答案 0 :(得分:4)

通常我会等待一个可重复的例子,但在这种情况下,我说基本的解释非常简单:

geom_density()创建多边形,而不是

使用来自ggplot2自己的包的样本数据集,我们可以在密度图下方观察到相同的直线,覆盖x轴和& y轴。线条的颜色取决于哪个图块位于其余图形之上:

p <- ggplot(diamonds, aes(carat, colour = cut)) +
  geom_density()

plot

解决方法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()

plot with new data frame

解决方法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()

plot with data frame from original plot

答案 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创建