如何在 R/ggplot2 中以多面方式绘制两条分布曲线?

数据挖掘 r ggplot2
2022-02-21 18:26:33

我有两条概率分布曲线,一条 Gamma 曲线和一条标准正态曲线,我需要比较它们:

library(ggplot2)

pgammaX <- function(x) pgamma(x, shape = 64.57849, scale = 0.08854802)

f <- ggplot(data.frame(x=c(-4, 9)), aes(x)) + stat_function(fun=pgammaX)
f + stat_function(fun = pnorm)

输出是这样的 在此处输入图像描述 但是我需要通过ggplot2提供的分面机制将两条曲线分开,共享Y轴,如下所示: 在此处输入图像描述

如果所描绘的图形来自数据(即来自data.frame),我知道如何进行刻面,但我不明白在这种情况下如何进行,当图形是由函数在线生成时。你对此有什么想法吗?

1个回答

如果我是你,我会将数据的创建与绘图操作分开。ggplot2::facet_wrap允许您在每个自己的面板中绘制每个累积分布。这是我将如何做到的。

pgammaX <- function(x) pgamma(x, shape = 64.57849, scale = 0.08854802)

Gamma <- pgammaX(seq(from=4, to = 8, by = 0.1))
Normal <- pnorm(seq(from=-4, to = 3.9, by = 0.1))

data <- data_frame(
  x = seq(-4,8,by=0.1),
  y = c(Normal, Gamma),
  # use factor to make the plot for Normal to appear first
  distribution = factor(c(rep(c("Normal", "Gamma"), 
                          times = c(length(Normal), length(Gamma)))),
                          levels = c("Normal", "Gamma"))
)

library(dplyr)    
library(ggplot2)

data %>%  ggplot(aes(x, y)) + 
  geom_line() + 
  # use facet_wrap to plot each cummulative distribution in each own panel      
  facet_wrap(~distribution, scales = "free_x")

在此处输入图像描述