R 在ggplot2中叠加正态分布:错误?

R 在ggplot2中叠加正态分布:错误?,r,ggplot2,R,Ggplot2,我想叠加两个正态分布。但是,如果我将xlim限制在一个狭窄的间隔内,则情节看起来相当怪异: library(ggplot2) x=seq(1,6,.01) dat <- data.frame( c1 = dnorm(x,4.95, .72), c2 = dnorm(x,4.85, .91), x = x ) ggplot(data=dat, aes(x=x)) + geom_polygon(aes(y=dat[,1]), fill="red", alpha=0.6) +

我想叠加两个正态分布。但是,如果我将xlim限制在一个狭窄的间隔内,则情节看起来相当怪异:

library(ggplot2)
x=seq(1,6,.01)
dat <- data.frame(
  c1 = dnorm(x,4.95, .72),
  c2 = dnorm(x,4.85, .91), x = x
)
  ggplot(data=dat, aes(x=x)) + 
  geom_polygon(aes(y=dat[,1]), fill="red", alpha=0.6) +
  geom_polygon(aes(y=dat[,2]), fill="blue", alpha=0.6) +
  xlab("Scale") + ylab("") + xlim(1,6)

库(ggplot2)
x=序号(1,6,01)

dat这不是一个bug-在y重新连接x轴之前,您正在切断范围,因此多边形将环绕到它的第一个点。如果要将多边形基于x轴,可以使用
geom_ribbon

ggplot(dat) +
    aes(x, ymin = 0) +
    geom_ribbon(aes(ymax  = c1), fill = 'red', alpha = 0.6) +
    geom_ribbon(aes(ymax = c2), fill = 'blue', alpha = 0.6) +
    xlim(1, 6)

这不是一个错误-你在y重新连接x轴之前切断了范围,所以这就是多边形环绕到它的第一个点的地方。如果要将多边形基于x轴,可以使用
geom_ribbon

ggplot(dat) +
    aes(x, ymin = 0) +
    geom_ribbon(aes(ymax  = c1), fill = 'red', alpha = 0.6) +
    geom_ribbon(aes(ymax = c2), fill = 'blue', alpha = 0.6) +
    xlim(1, 6)

您可以将
geom\u区域
position=“identity”
一起使用。重新整理和清理一下

library(tidyverse)

ggplot(dat %>% gather(var, val, -x), aes(x = x, y = val, fill = var)) + 
    geom_area(alpha = 0.6, position = 'identity') + 
    labs(x = "Scale", y = NULL, fill = 'Variable')

您可以使用
geom\u区域
position=“identity”
。重新整理和清理一下

library(tidyverse)

ggplot(dat %>% gather(var, val, -x), aes(x = x, y = val, fill = var)) + 
    geom_area(alpha = 0.6, position = 'identity') + 
    labs(x = "Scale", y = NULL, fill = 'Variable')

顺便说一下,这与叠加无关。只绘制一个多边形会产生类似的结果。顺便说一下,这与叠加无关。仅绘制一个多边形将产生类似的结果。
geom_区域
整洁。
geom_区域
整洁。谢谢。你如何在上面添加一个带有“c1-红色”和“c2-蓝色”的图例?@Paul它不适用于该方法。alistaire给出的另一个答案说明了如何做到这一点:您需要重塑数据,使其包含一个描述分布的变量(
var
,在他的示例中)。谢谢。你如何在上面添加一个带有“c1-红色”和“c2-蓝色”的图例?@Paul它不适用于该方法。alistaire给出的另一个答案说明了如何做:您需要重塑数据,使其包含一个描述分布的变量(在他的示例中为
var
)。