使用 geom_vline 在多个面的密度图中插入平均线

2024-03-11

对于下面的数据集,我想使用密度图来比较以下变量的两种性别的分布:withdraw、affect 和 estress。这些图还应包含描述每个性别变量平均值的垂直线,并绘制在具有不同方面的同一图形上。

我当前的代码如下,但是我不知道如何使用 geom_vline 来获取每个方面的平均值:

vars_2_plot <- names(estress.dat1)[!names(estress.dat1) %in% "sex"]
estress.dat1 %>%
  pivot_longer(cols = all_of(vars_2_plot),
    names_to = "Predictors", values_to = "Values"
    ) %>%
  ggplot( aes(x = Values, fill = factor(sex) )) +   
  geom_density(alpha = 0.3) +
  facet_wrap(~ Predictors, scales = "free") +
  theme_minimal() +
labs(fill = "sex", x = "Predictor values") 

My data:

structure(list(withdraw = c(3, 1, 3.66, 4.66, 4.33, 3, 1, 1, 
2, 4, 4.33, 1, 5, 1.66, 4, 1.33, 1.66, 1.66, 2, 4, 2, 3.66, 3.66, 
4, 1, 1.66, 4.66, 5, 2.33, 1.33, 1.66, 1.33, 4, 1.66, 3, 1, 2, 
2, 2.66, 3, 1, 1, 4.66, 1, 1, 2, 1.33, 1, 3.66, 2.33, 1, 2, 2.33, 
2.33, 2.66, 2.33, 3, 1.66, 1, 2.66, 5, 3.33, 1, 2.33, 1, 1.33, 
3.33, 5, 2, 1, 2.33, 3, 1.66, 1, 1, 2, 1, 1, 4.33, 2, 1, 3, 1, 
2.66, 3.33, 2.33, 1, 1, 3, 2.66, 1.33, 2, 1, 1, 1, 2, 3, 1.33, 
2.33, 4.66, 2, 2.66, 1, 1, 4, 4, 2, 3, 1, 3, 1, 2.33, 1, 1, 2, 
2.33, 3, 1, 3, 1, 4.33, 3.33, 1, 1.33, 3.33, 1.66, 2, 1, 1, 2.33, 
4, 3, 2.33, 4, 4, 1, 1.33, 1, 1, 1.66, 2, 2.66, 3.66, 3.33, 1, 
2.33, 2.33, 1, 1, 1, 4.66, 2.33, 3, 3.33, 4.33, 1.33, 1, 3.66, 
4.33, 1, 2.66, 6.33, 2.66, 1, 3.33, 4.33, 1, 1.33, 1, 1, 3, 1, 
4, 1.33, 1, 2, 1.66, 1, 4, 1.66, 1, 1, 1.66, 5, 2.33, 1.66, 3, 
2.66, 1, 3.33, 4, 3, 2.66, 1, 3.66, 3, 2, 4, 7, 2, 1, 3.66, 2.66, 
1, 1.66, 1, 1.33, 3, 4, 4.66, 4, 2.66, 1, 1, 1, 1.66, 2.33, 3, 
3, 1, 4, 2.33, 4.33, 2, 2.66, 2, 1, 1, 1.66, 1, 1, 1.33, 2.33, 
1, 4, 2, 1, 2, 3, 3.66, 3, 3.66, 4, 3.66, 1, 1, 1, 2, 1, 2.66, 
1, 4, 1, 2.33, 4.33, 1.66, 2.66, 3.33, 3, 1, 2.33, 4), affect = c(2.6, 
1, 2.4, 1.16, 1, 1.5, 1, 1.16, 1.33, 3, 3, 2, 1.83, 1.16, 1.16, 
1, 1.33, 1.5, 1.33, 3, 3.16, 1.5, 1.5, 1.83, 1, 1.33, 1.5, 1.33, 
2.16, 1.16, 2.16, 1.83, 1.4, 1, 1.33, 1, 2.33, 1.16, 1, 1, 1.16, 
1.5, 2.16, 1.5, 2.66, 1.5, 1.16, 1.83, 2.66, 1.33, 1, 1.33, 1.83, 
1, 1.5, 1, 1.33, 1.33, 1.33, 1.16, 3, 1, 1, 1.66, 1.5, 1, 1.83, 
3.66, 3, 1.66, 1.83, 1.5, 1.66, 1, 1.16, 2.16, 1.16, 1, 1.5, 
1, 1.5, 4.33, 1.16, 2.33, 3, 2.33, 1.16, 1, 1.33, 1, 1.33, 1, 
1.16, 1, 1, 1.66, 1.5, 1.66, 1.33, 3.16, 1, 1, 1, 1.33, 2, 2.16, 
1, 1, 1, 2.33, 1.16, 3.83, 1.66, 1.33, 1.66, 1, 1.16, 1.16, 1.33, 
2, 1.16, 1.33, 1, 1.16, 1.33, 1.16, 1, 1.83, 1.16, 1, 2.83, 1, 
1.66, 2.33, 1, 1, 2, 1, 1, 2, 2.83, 1.33, 2, 2, 1.16, 1.16, 4.16, 
1.33, 1.16, 1.5, 1, 2, 1.33, 1.66, 2.66, 1, 1, 1.5, 1.66, 1, 
1.5, 4, 1.16, 1, 2, 3.5, 1.33, 1.16, 1.33, 1.33, 1.16, 1, 1.5, 
1, 2, 2.66, 1.33, 1.16, 2.66, 5, 1.5, 1, 1.5, 1.5, 1.16, 1.5, 
1, 3.16, 1.83, 1.16, 1, 1.33, 3.5, 1, 2, 1.4, 1.66, 1.66, 5, 
2.16, 2, 1.5, 1.33, 1.66, 2.83, 1.16, 1, 1.16, 1.5, 1.5, 1.83, 
1.83, 1, 1, 1, 1.16, 1.83, 1.66, 2, 1, 1.66, 1.16, 2.5, 1.16, 
1, 2, 1, 1.16, 1.83, 1.16, 1.33, 1.16, 1.6, 1, 1.5, 1.33, 1, 
2.16, 1.16, 3.16, 2.33, 2.16, 2, 1.5, 1, 1.33, 1.83, 1.33, 1.16, 
1, 1, 1, 1, 1, 1.83, 1, 1.5, 2, 1.33, 1.16, 1.83, 1.5), estress = c(6, 
5, 5.5, 3, 4.5, 6, 5.5, 3, 5.5, 6, 5.5, 4, 3, 2.5, 3.5, 6, 4, 
6, 3.5, 4, 2.5, 4, 2.5, 4.5, 1, 4.5, 3, 2.5, 2.5, 6, 4, 6.5, 
4.5, 3.5, 2, 5, 6, 3, 3.5, 4.5, 3.5, 5, 6, 4.5, 5, 5, 3, 4, 6.5, 
4, 3, 5.5, 4, 5, 3, 3, 2.5, 3.5, 5.5, 5, 7, 5, 6, 5.5, 6, 5, 
5, 5, 7, 5.5, 6.5, 3, 6.5, 4.5, 3, 5, 4.5, 3.5, 4.5, 1, 4, 6.5, 
2, 6.5, 5.5, 5, 6, 5, 3, 4.5, 5.5, 5, 1.5, 3, 3, 4.5, 6, 4, 3, 
7, 4.5, 3.5, 3.5, 6, 4, 6, 2.5, 3, 3, 5, 5, 7, 6.5, 6.5, 2, 4.5, 
5.5, 4.5, 2.5, 3.5, 5.5, 4.5, 4, 5.5, 7, 5, 3, 2.5, 4, 5, 7, 
4, 5, 3.5, 6.5, 2, 6, 3.5, 1, 6.5, 7, 4, 5.5, 5.5, 5.5, 6.5, 
7, 4.5, 4.5, 6.5, 6, 5.5, 5, 6.5, 6.5, 5, 4.5, 4.5, 4.5, 7, 6, 
7, 4, 6, 7, 7, 4, 4, 5.5, 4.5, 2.5, 4, 5.5, 4, 4, 5.5, 4.5, 5.5, 
4.5, 6, 5, 5.5, 6, 4, 3.5, 5, 4.5, 3.5, 6, 3.5, 4, 4, 5.5, 7, 
5, 4.5, 3.5, 5, 1, 5.5, 6.5, 5.5, 3, 7, 7, 3, 5, 3, 3, 6, 2.5, 
7, 3, 1.5, 1.5, 5.5, 5.5, 6, 5.5, 6.5, 3, 6.5, 6.5, 4, 5, 7, 
4.5, 4, 4, 5.5, 7, 4, 4.5, 4, 3.5, 4, 4, 6, 5, 6, 6, 4.5, 5.5, 
4.5, 4.5, 6, 4.5, 2.5, 3.5, 1, 3.5, 3.5, 4.5, 4, 5, 3.5, 4, 4, 
3.5, 3, 5.5, 5.5), sex = structure(c(2L, 1L, 2L, 2L, 2L, 2L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 
2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 
2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 
1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 
2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 
1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 
2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 
1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L
), .Label = c("0", "1"), class = "factor")), row.names = c(NA, 
-262L), class = "data.frame")

For the data=论证中geom_vline您需要一个数据框,其列与您的方面变量相同,以及您可以使用计算的相应平均值colmeans.

library(magrittr);library(tidyr);library(ggplot2)
vars_2_plot <- names(estress.dat1)[!names(estress.dat1) %in% "sex"]

estress.dat1 %>%
  pivot_longer(cols=all_of(vars_2_plot),
               names_to="Predictors", values_to="Values"
  ) %>%
  ggplot(aes(x=Values, fill=factor(sex) )) +   
  geom_density(alpha=0.3) +
  geom_vline(data=data.frame(means=colMeans(estress.dat1[-4]),
                             Predictors=colnames(estress.dat1[-4])), 
             aes(xintercept=means), color="red") +
  facet_wrap(~ Predictors, scales="free") +
  theme_minimal() +
  labs(fill="sex", x="Predictor values")

Result

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 geom_vline 在多个面的密度图中插入平均线 的相关文章

  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • 将绘图调用拆分为多个块

    我正在编写一个图的解释 其中我基本上将在第一个块中创建图 然后描述该输出 并在第二个块中添加一个轴 然而 似乎每个块都会强制一个新的绘图环境 因此当我们尝试使用以下命令运行块时会出现错误axis独自的 观察 output html docu
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • 使用 Shiny 发布平行坐标图表时出现“错误:路径[1]="”:没有这样的文件或目录”

    我有一个似乎很常见但我还没有找到解决方案的问题 当尝试使用 rCharts Parcoords 发布 Web 应用程序时 出现以下错误 错误 路径 1 没有这样的文件或目录 奇怪的是 该应用程序在我的笔记本电脑上运行得很好 下面是我正在使用
  • 计算 R 中各列的唯一值

    我正在尝试创建一个新变量 其中包含来自两个不同列的字符串值的唯一计数 所以我有这样的东西 例如 A tibble 4 x 2 names partners
  • 在 Rcpp 中使用其他包中的 C 函数

    我试图从 C 函数中的 cubature 包调用 C 例程来执行多维积分 我试图重现的基本 R 示例是 library cubature integrand lt function x sin x adaptIntegrate integr
  • 如何在 R 或 Python 中制作旭日图?

    到目前为止 我一直无法找到一个可以创建旭日图的 R 库约翰 斯塔斯科 http www cc gatech edu gvu ii sunburst 有人知道如何在 R 或 Python 中实现这一点吗 在极坐标投影中使用 matplotli
  • 如何在 R 中匹配多个 ggplot2 图中的调色板?

    自从被问到这个问题以来已经有一段时间了 但我知道一个事实 我很快就会提取新数据 我想弄清楚如何用这种技术来绘制它 看起来评论和答案中的人知道如何做到这一点 但我无法完全弄清楚所给我的内容 还有人想尝试一下吗 我正在尝试使用具有多个级别的因子
  • 为什么 R 更新后 sim_slopes() 中会出现此错误?

    我正在尝试使用 交互 包来创建简单斜率的约翰逊 尼曼图 但是 当尝试运行 sim slopes 函数时 出现以下错误 直到我将R更新到4 2 2 我才没有遇到这个问题 我使用的是 macOS Ventura 13 1 Error class
  • ggplot2:如何标记事件发生的日期

    我想从第二个情节中获取第一个情节的信息 第二张图表示事件发生的天数 它看起来更宽 因为它没有图例 但它是相同的时间尺度 我选择在第一个图中手动分配颜色 I would like to overlay the second plot dots
  • read_html(url) 和 read_html(content(GET(url), "text")) 之间的区别

    我正在看这个很棒的答案 https stackoverflow com a 58211397 3502164 https stackoverflow com a 58211397 3502164 解决方案的开头包括 library httr
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 使用 template.docx 从 Shiny App 编织 Word 文档

    我正在尝试使用 template docx 文件从闪亮的应用程序编写一个 Word 文档 我收到以下错误消息 pandoc exe template docx openBinaryFile 不存在 没有这样的文件或目录 以下 3 个文件当前
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching

随机推荐