穿过密度图(r)X轴的非预期线

穿过密度图(r)X轴的非预期线,r,ggplot2,density-plot,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 = "LO

我试图找出为什么我有一条紫色的线出现在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: ")

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

geom_density()
创建一个多边形,而不是直线

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

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

解决方法2:也可以获取原始绘图生成的数据,并使用
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()

lp有两个简单的解决方法。首先,如果您只需要线条而不需要填充区域,只需将
geom_line()
与密度统计一起使用即可:

库(ggplot2)
ggplot(钻石,aes(x=克拉,y=统计(密度),颜色=切割))+
几何线(stat=“密度”)

请注意,要使其工作,我们需要将
y
美学设置为
stat(density)

其次,如果您希望填充线下的区域,可以使用ggridges包中的
geom\u density\u line()
。它的工作原理与
geom_density()
完全相同,但绘制的是一条线(下面是填充区域),而不是多边形

库(ggridges)
ggplot(钻石,aes(x=克拉,颜色=切割,填充=切割))+
几何密度线(α=0.2)


由(v0.2.1)于2018年12月14日创建。

欢迎使用堆栈溢出!目前,这个问题是离题的,因为它要求调试帮助,而没有可复制的示例。请将问题放在一起,并对其进行编辑。这里有一些R的特别提示:非常感谢。这是我的第一篇stack文章,将来将提供一个可复制的示例。你的变通方法很有效!另一个解决方法是GGRIGES软件包中的
geom\u density\u line()。我写这篇文章是因为我厌倦了在这个问题上需要变通办法。或者,如果不需要填充区域,只需使用
geom_line()
stat=“density”
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()