在R中为三种不同的后验分布添加带有ggplot的标签[重复]

Posted

技术标签:

【中文标题】在R中为三种不同的后验分布添加带有ggplot的标签[重复]【英文标题】:Add a label with ggplot in R for three different posterior distributions [duplicate] 【发布时间】:2021-10-31 10:11:33 【问题描述】:

我在同一个图上绘制了三个不同的后验分布,我想添加一个标签来阐明后验分布 1、后验分布 2 和后验分布 3。我尝试使用 '''scale_colour_manual''' 但确实如此不行。你能帮我个忙吗?真的很感激。

x <- seq(-10, 15, 0.01)

# Prior Distribution 
w1 <- 0.6; w2 <- 0.2; w3 <- 0.2
# p(x)
d1 <- dnorm(x, mean=4, sd=2)
d2 <- dnorm(x, mean=6, sd=3)
d3 <- dnorm(x, mean=5, sd=2)
p_x <- w1*d1+w2*d2+w3*d3

# Posterior distribution
p1 <- d1*w1/p_x
p2 <- d2*w2/p_x
p3 <- d3*w3/p_x
df <- data.frame(x, p1, p2, p3)

# Plot with ggplot
library(ggplot2)
ggplot(df, aes(x)) +
   geom_line(aes(y=p1), color='red')+
   geom_line(aes(y=p2), color='blue')+
   geom_line(aes(y=p3), color='black')+
   ylab('the Posterior Distribution')+
   scale_colour_manual("Groups", values = c("red", "blue", "black"))

【问题讨论】:

【参考方案1】:

解决方案 1

您可以在aes() 中使用col 参数和每个分布的名称,并在scale_colour_manual 中定义颜色

ggplot(df, aes(x)) +
  geom_line(aes(y=p1,col = "Dist. 1"))+
  geom_line(aes(y=p2,col = "Dist. 2"))+
  geom_line(aes(y=p3,col = "Dist. 3"))+
  ylab('the Posterior Distribution')+
  scale_colour_manual("Groups", values = c("red", "blue", "black"))

解决方案 2

您可以旋转您的 data.frame,为值创建一列,为分布创建另一列

df %>% 
  pivot_longer(cols = -x) %>% 
  ggplot(aes(x,value,col = name)) +
  geom_line()+
  ylab('the Posterior Distribution')+
  scale_colour_manual("Groups", values = c("red", "blue", "black"))

【讨论】:

以上是关于在R中为三种不同的后验分布添加带有ggplot的标签[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在R(ggplot2)中为(虚线)线添加阴影吗?

如何在 R 中的 ggplot 中为条形图添加误差线

在 R 中为这两个直方图添加图例

如何在 R 中为 ggplot 的每个方面添加 R2?

R语言机器学习 | 6 朴素贝叶斯

近似推断