我想叠加两个正态分布。但是,如果我将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)
如果范围增加,则有效:
x=seq(1,10,.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,10)
(参见图中的输出)。但是,我希望x轴限制为1到6.任何帮助将不胜感激! 另外,您对如何在图的右侧添加标签有什么建议吗?
答案 0 :(得分:2)
您可以将geom_area
与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')
答案 1 :(得分:1)
这不是一个错误 - 你在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)