如何绘制两个变量的密度函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何绘制两个变量的密度函数?相关的知识,希望对你有一定的参考价值。

我有两个长度相同的变量,v1 =实际alpha,v2 =受激alpha。

v1 =(0.1,0.6,0.8,0.11)v2 =(0.3,0.1,0.5,0.7)

我想显示将这两个位置进行比较的密度函数,请复制此图片:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS81QjNsUS5qcGcifQ==” alt =“在此处输入图像描述”>

答案

为了简化绘图,我将创建一个像这样的数据框:

v1 <- c(0.1, 0.6, 0.8, 0.11) 
v2 <- c(0.3, 0.1, 0.5, 0.7)

df <- data.frame(x = c(v1, v2), group = rep(c("Actual", "Simulated"), each = 4))

现在您可以使用ggplot轻松绘制密度:

library(ggplot2)

ggplot(df) + 
  stat_density(aes(x, linetype = group), geom = "line", position = "identity") +
  scale_linetype_manual(values = c(1, 2)) +
  theme_bw() +
  theme(legend.position = c(0.9, 0.85))

“”

当然,这看起来与您提供的密度图不太相似-只是因为v1v2中的数据太短而没有集中趋势。这是完全相同的情节,带有一些玩具数据,可以更好地匹配您情节中使用的数据:

set.seed(69)
v1 <- rnorm(100, -0.1, 0.12)
v2 <- rnorm(100, 0, 0.06)
df <- data.frame(x = c(v1, v2), group = rep(c("Actual", "Simulated"), each = 100))

ggplot(df) + 
  stat_density(aes(x, linetype = group), geom = "line", position = "identity") +
  scale_linetype_manual(values = c(1, 2)) +
  theme_bw() +
  theme(legend.position = c(0.9, 0.85)) +
  scale_x_continuous(limits = c(-.6, .4))

enter image description here

reprex package(v0.3.0)在2020-05-21创建

另一答案

这是一个base R解决方案(基于@Allan的第二个数据帧:]

hist(df$x[df$group=="Simulated"], 
     freq = F,
     xlab = "Alpha in %",
     border = "white", 
     main = "Density function for Actual and Simulated data", cex.main = 0.9, 
     xlim = range(df$x[df$group=="Actual"]))
lines(density(df$x[df$group=="Simulated"]), lty = 2)
lines(density(df$x[df$group=="Actual"]), lty = 1)
legend("topleft", legend = c("Actual", "Simulated"), bty = "n", lty = c(1,2))
grid()

enter image description here

以上是关于如何绘制两个变量的密度函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MatLab 中绘制概率密度函数?

如何在matlab中绘制概率密度函数?

R语言 | 密度图

R语言可视化:密度分布图绘制

R语言使用car包的scatterplotMatrix函数绘制散点图矩阵并添加线性回归曲线平滑曲线以及对角线核密度图和轴须图rugcor函数计算变量两两相关性

如何计算概率密度?