【发布时间】:2020-07-31 14:44:30
【问题描述】:
我正在使用 ggplot 绘制多个已知的密度函数,例如 gamma 密度函数:
library(tidyverse)
apar<-c(1,2,7.5,9)
bpar<-c(2,2,1.3,0.5)
gmaxlim<-c(0, 25)
pgma1<-ggplot(data = data.frame(x = gmaxlim), aes(gmaxlim)) +
stat_function(fun = dgamma, n = 101, args = list(shape = apar[1], scale = bpar[1]),aes(color="black")) +
stat_function(fun = dgamma, n = 101, args = list(shape = apar[2], scale = bpar[2]),aes(color="red")) +
stat_function(fun = dgamma, n = 101, args = list(shape = apar[3], scale = bpar[3]),aes(color="blue")) +
stat_function(fun = dgamma, n = 101, args = list(shape = apar[4], scale = bpar[4]),aes(color="green")) +
ylab(expression(paste("f(x|",alpha,",",beta,")"))) +xlab("x") + scale_x_continuous(breaks=seq(gmaxlim[1],gmaxlim[2], by =5)) +
scale_color_identity(name = "",
breaks = c("black", "red", "blue","green"),
labels = c(substitute(paste(alpha,"= ", v," ,",beta,"= ",s),list(v=apar[1],s=bpar[1])),
substitute(paste(alpha,"= ", v," ,",beta,"= ",s),list(v=apar[2],s=bpar[2])),
substitute(paste(alpha,"= ", v," ,",beta,"= ",s),list(v=apar[3],s=bpar[3])),
substitute(paste(alpha,"= ", v," ,",beta,"= ",s),list(v=apar[4],s=bpar[4]))),
guide = "legend")+
theme_bw()
pgma1
由reprex package (v0.3.0) 于 2020 年 7 月 31 日创建
然而,这段代码远非高效,而且违背了 ggplot 理念(也许是因为我们没有绘制任何“真实”数据集?)。有没有办法更有效地编写这个并且可以扩展到不同数量的参数对?我想只写一行stat_function 并在可能的情况下简化scale_color_identity。在颜色标签中保留数学表达式是强制性的
【问题讨论】:
标签: r ggplot2 probability-density