繁体   English   中英

如何在一个图中绘制多个泊松分布

[英]How to plot multiple Poisson distribution in one plot

我想绘制多个泊松(具有不同的Lambda(1:10))

我发现以下函数来绘制图

plot_pois = function(lambda = 5)
{
  plot(0:20, dpois( x=0:20, lambda=lambda ), xlim=c(-2,20))
  normden <- function(x){dnorm(x, mean= lambda, sd=sqrt(lambda))}
  curve(normden, from=-4, to=20, add=TRUE, col=lambda)
}
plot.new()
plot_pois(2)

在此处输入图片说明

但是我无法在它上面再画一个泊松。 我试图改变plot ,以pointslines ,但它完全改变剧情。 我还想为不同的lambda值添加包含不同颜色的图例。

如果我可以使用ggplot对其进行ggplot ,那将是一个更好的选择。

在ggplot2中,您可以使用lapply遍历不同的lambda:

library(ggplot2)
lambdas <- c(5, 2)
ggplot(data = data.frame(x = 0:20)) +
  lapply(lambdas, function(l) geom_point(aes(x = x, y = dpois(x, lambda = l), col = factor(l)))) +
  lapply(lambdas, function(l) stat_function(fun = dnorm, args = list(mean = l, sd = sqrt(l)), 
                                aes(x = x, col = factor(l))))

然后可以像往常一样在ggplot2中自定义轴标题和限制,图例标题等。

另一个可能的tidyverse解决方案:

library(tidyverse)

# Build Poisson distributions

p_dat <- map_df(1:10, ~ tibble(
  l = paste(.),
  x = 0:20,
  y = dpois(0:20, .)
))

# Build Normal distributions

n_dat <- map_df(1:10, ~ tibble(
  l = paste(.),
  x = seq(0, 20, by = 0.001),
  y = dnorm(seq(0, 20, by = 0.001), ., sqrt(.))
))

# Use ggplot2 to plot

ggplot(n_dat, aes(x, y, color = factor(l, levels = 1:10))) +
  geom_line() +
  geom_point(data = p_dat, aes(x, y, color = factor(l, levels = 1:10))) +
  labs(color = "Lambda:") +
  theme_minimal()

reprex软件包 (v0.2.1)创建于2019-05-06

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM