如何绘制混合箱线图:一半箱线图,另一半有抖动点?

2023-12-11

我正在尝试制作与图 2d-f 类似的图文章发表在《自然》杂志上今年。它基本上是一半箱线图,另一半是点。

有人能给我一些提示吗?非常感谢!

doi:10.1038/nature25479

这些是我的数据和代码,它们生成了带有点的完整框

require(magrittr)
require(tidyverse)

dat <- structure(list(p1 = c(0.0854261831077604, 0.408418657218253, 
  0.577793646477315, 0.578028229977424, 0.48933166218204, 0.53117814324334, 
  0.526653494462464, 0.00687616283435221, 0.444300425796509, 0.00287319455358522, 
  0.949821402532831, 0.96832469523368, 0.953281969982759, 0.360125244759434, 
  0.407921095422844, 0.885776732104954, 0.159882184516691, 0.911094990767761, 
  0.0444367172734037, 0.144888951725151, 0.508858686640707, 0.694913731085945, 
  0.117270366119258, 0.78227546070467, 0.980457304886186, 0.711464034564424, 
  0.753944466390685, 0.0474210438747038, 0.00344183466223558, 0.0290017465534545, 
  0.75092385236303, 0.868873921257987, 0.744396990487425, 0.0140007244233847, 
  0.0332266395043963, 0.482897084793009, 0.0535516646483004, 0.452926358923891, 
  0.0144057727301603, 0.171918034525543), p2 = c(0.101262675229211, 
  0.196913109208586, 0.37814311161382, 0.0677625689405156, 0.12517090579686, 
  0.409083554335168, 0.158886941347288, 0.847394861862651, 0.180560031076741, 
  0.967122694294885, 0.000901627067665116, 0.00039495110143705, 
  9.70707318411806e-05, 0.546200038486894, 0.435475454787648, 5.95555269800323e-06, 
  0.0178837768834925, 8.42690065415846e-06, 0.00777059697751842, 
  0.0020397073541544, 0.486699073016371, 0.283679673247571, 0.857183359146641, 
  0.200712003853458, 0.0164911141652784, 0.0542250670734297, 0.232340206984506, 
  0.948523714169708, 0.169881661474024, 0.968983592882272, 0.00250367590158291, 
  0.000792323746977033, 0.000185068166140097, 0.0193600071757997, 
  0.114775271592724, 4.65931778380389e-05, 0.000754760900847164, 
  2.07521623816406e-05, 0.00782764273312856, 0.00276993826117348
  ), p3 = c(0.0118642223785376, 0.0267362912322735, 6.60753171741111e-08, 
  0.053576051466652, 0.00375873110094442, 9.85095078844696e-08, 
  0.0525436528683484, 0.0193735809639814, 8.44717454802822e-07, 
  0.00608007737576027, 0.0205563904131287, 0.0104638062130591, 
  0.0249997053664864, 0.0587924727726031, 0.0443600964770995, 0.067125687916273, 
  0.758612877724648, 0.0618158334848203, 0.0251025592849138, 0.790905778949543, 
  0.00126904829915329, 0.00760772364901772, 0.00119821088328392, 
  0.0115117347754715, 0.000863676435448072, 0.000996891439583434, 
  0.0115279148630096, 0.00249122388568909, 5.21508620418823e-05, 
  0.00144050407848742, 0.120373444447631, 0.0534773096149069, 0.110284261289338, 
  0.571243879053544, 0.438152084363961, 0.364887514202121, 0.696293189762153, 
  0.414870716968937, 0.0557358576822093, 0.783929426716999), p4 = c(0.000107231042599948, 
  0.000379648762557529, 8.25102162601208e-06, 0.000343829024899591, 
  0.000140680688077216, 1.90076798696051e-06, 0.000214507212681323, 
  1.38587688080716e-05, 3.48104084092359e-06, 6.50782599216903e-07, 
  0.0114584884733498, 0.00652170746426181, 0.0143309604192116, 
  0.0275718029789144, 0.0352327288308957, 0.022950800779703, 0.0569939247302654, 
  0.0190248244391564, 0.0305921420687752, 0.00589871320676732, 
  0.000805515847378872, 1.97674357551495e-05, 8.30853708305541e-06, 
  1.32462751169762e-06, 4.8731965929686e-05, 0.0057411315642433, 
  4.82406700397824e-05, 0.000204633566379066, 0.0552263911781015, 
  0.000181994007177494, 0.0585729576787707, 0.0273685460128338, 
  0.0568746134466117, 0.299309335625926, 0.278980446497419, 0.105600715225359, 
  0.176549247514501, 0.101420411455169, 0.01003894550707, 0.0010803018725911
  ), p5 = c(0.786823338804824, 0.151956168584644, 0.0433468890359269, 
  0.19556481029922, 0.380808150243027, 0.0389798680141623, 0.260481184897901, 
  0.101147673996922, 0.0184624278061585, 0.0222416874775066, 0.000113517761014704, 
  0.00329593083795693, 0.000476682365422989, 0.00571997662739322, 
  0.0697473913851358, 0.0216803412883361, 0.00631472476841249, 
  0.00628215584877364, 0.540944692186543, 0.0135127011440213, 0.00235752761214414, 
  3.10282042735927e-06, 0.0239147204208516, 4.97334784773176e-05, 
  0.00213837866453402, 0.000212207014031345, 0.00180443364400107, 
  8.15954685083038e-05, 0.00445169398173509, 0.000391265642772285, 
  0.0676128522356959, 0.0494864355994384, 0.0882575475549674, 0.0960799089263987, 
  0.134853114895623, 0.0465661014986807, 0.0728456746626632, 0.0307607877988244, 
  0.476388236185883, 0.00831263646470973), p6 = c(0.0145163494370677, 
  0.215596124993685, 0.00070803577599434, 0.104724510291289, 0.000789869989050939, 
  0.0207564351298348, 0.00122021921131791, 0.0251938615732845, 
  0.356672789562296, 0.00168169551566413, 0.0171485737520108, 0.0109989091496048, 
  0.00681361113427885, 0.00159046437476052, 0.00726323309637717, 
  0.00246048235803604, 0.000312511376490686, 0.00177376855883463, 
  0.351153292208846, 0.0427541476203625, 1.01485842454486e-05, 
  0.0137760017612841, 0.000425034892882118, 0.0054497425604112, 
  7.93882623673471e-07, 0.227360668344289, 0.000334737447758259, 
  0.0012777890350116, 0.766946267841861, 8.96835836820999e-07, 
  1.32173732897771e-05, 1.46376785664669e-06, 1.51905551715105e-06, 
  6.14479494697213e-06, 1.24431458762028e-05, 1.99110299298599e-06, 
  5.46251153509928e-06, 9.72690797485877e-07, 0.435603545161549, 
  0.0319896621589845), type = c("small", "small", "small", "small", 
  "small", "small", "small", "small", "small", "small", "small", 
  "small", "small", "small", "small", "small", "small", "small", 
  "small", "small", "big", "big", "big", "big", "big", "big", "big", 
  "big", "big", "big", "big", "big", "big", "big", "big", "big", 
  "big", "big", "big", "big"), loc = c("abro", "abro", "abro", 
  "abro", "abro", "abro", "abro", "abro", "abro", "abro", "dome", 
  "dome", "dome", "dome", "dome", "dome", "dome", "dome", "dome", 
  "dome", "abro", "abro", "abro", "abro", "abro", "abro", "abro", 
  "abro", "abro", "abro", "dome", "dome", "dome", "dome", "dome", 
  "dome", "dome", "dome", "dome", "dome")), .Names = c("p1", "p2", 
  "p3", "p4", "p5", "p6", "type", "loc"), class = c("tbl_df", "tbl", 
  "data.frame"), row.names = c(NA, -40L))
glimpse(dat)
#> Observations: 40
#> Variables: 8
#> $ p1   <dbl> 0.085426183, 0.408418657, 0.577793646, 0.578028230, 0.489...
#> $ p2   <dbl> 1.012627e-01, 1.969131e-01, 3.781431e-01, 6.776257e-02, 1...
#> $ p3   <dbl> 1.186422e-02, 2.673629e-02, 6.607532e-08, 5.357605e-02, 3...
#> $ p4   <dbl> 1.072310e-04, 3.796488e-04, 8.251022e-06, 3.438290e-04, 1...
#> $ p5   <dbl> 7.868233e-01, 1.519562e-01, 4.334689e-02, 1.955648e-01, 3...
#> $ p6   <dbl> 1.451635e-02, 2.155961e-01, 7.080358e-04, 1.047245e-01, 7...
#> $ type <chr> "small", "small", "small", "small", "small", "small", "sm...
#> $ loc  <chr> "abro", "abro", "abro", "abro", "abro", "abro", "abro", "...

将数据转换为长格式

dat_long <- dat %>%  
  gather(key, value, 1:6) %>% 
  mutate(loc = factor(loc, levels = c("abro", "dome")),
         type = factor(type),
         key = factor(key))

用点绘制箱线图

ggplot(dat_long, aes(x = type, y = value, color = key)) +
  facet_grid(loc ~ key) +
  geom_point(position = position_jitter(width = 0.3), alpha = 0.3, size = 2) +
  geom_boxplot(outlier.color = NA) +
  theme_light() +
  theme(legend.position = "bottom") +
  guides(col = guide_legend(nrow = 1))


我发现这个混合箱线图非常非常可爱,所以我也想重新创建它。

我写了一个geom_boxjitter继承自geom_boxplot并且只添加了微小的变化:

  • 它绘制了geom_rect仅在左半部分。
  • 它使用右半部分的默认宽度、默认高度 0.4*分辨率来抖动点,并且还可以采用种子参数。
  • 它增加了额外的晶须( 水平的)如果errorbar.draw被设定为TRUE。它们的长度 也可以调整。

您可以在此处查看代码。我认为改变现有的一切变得如此容易真是太棒了geoms 略有变化。使用您的部分数据:

library(tidyverse)
library(cowplot)
library(ggparl)

P <- ggplot(
  dat_long %>% filter(key %in% c("p1", "p2")), 
  aes(x = type, y = value, fill = key)) +
  geom_boxjitter(outlier.color = NA, jitter.shape = 21, jitter.color = NA, 
                 jitter.height = 0.05, jitter.width = 0.075, errorbar.draw = TRUE) +
  theme(legend.position = "none") +
  ylim(c(-0.05, 1.05)) + 
  scale_fill_manual(values = c("#ecb21e", "#812e91"))
P

enter image description here

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

如何绘制混合箱线图:一半箱线图,另一半有抖动点? 的相关文章

  • 将数据框中的 1 列拆分为 2 列 [重复]

    这个问题在这里已经有答案了 这是我的数据框 gt data Manufacturers 1 Audi RS5 2 BMW M3 3 Cadillac CTS V 4 Lexus ISF 所以我想将制造商和型号分开 就像这样 gt data
  • MATLAB 滚动图

    我有一个脑电图数据库 我想绘制它 数据库是一个19 1000 134的矩阵 其中 19 是通道数 在第一种方法中 我只使用一个渠道 1000 个样本大小 采样率为 500 Hz 时为 1000 个点 即 2 秒数据 134 epochs的数
  • 当 plt.plot() 调用在其他单元格中完成时, plt.show() 为空

    Context 我必须为物理作业编写一个 Jupyter 笔记本 并且必须绘制一些图表来显示某些数量的演变等 我必须通过每次在代码和 Markdown 单元之间交替来解释我编写的几乎每一行代码 包括plot 电话 这就是我的问题的来源 简而
  • R - 对矩阵的每行/列应用具有不同参数值的函数

    我试图将函数应用于矩阵的每一行或每一列 但我需要为每一行传递不同的参数值 我以为我熟悉 lapply mapply 等 但可能还不够 举个简单的例子 gt a lt matrix 1 100 ncol 10 gt a 1 2 3 4 5 6
  • 在 R 中,如何让 PRNG 在平台之间给出相同的浮点数?

    在 R 4 1 1 中运行以下代码会在平台之间产生不同的结果 set seed 1 x lt rnorm 3 3 print x 22 0 83562861241004716 intel windows 0 8356286124100471
  • R tidyr regex:从字符列中提取有序数字

    假设我有一个像这样的数据框 df lt data frame x c This script outputs 10 visualizations This script outputs 1 visualization This script
  • 我们如何获取R中的商品价格?

    正如标题 我知道我们可以使用quantmod包来获取股票价格 但我们如何检索黄金 石油或农产品等商品价格 Use Quandl包 这里有一些例子 Gold lt Quandl LBMA GOLD WTI lt Quandl CHRIS CM
  • 错误:列索引必须最多为 1,如果... heatmap.2

    我在 heatmap 2 中收到错误 我在这里发现了类似的错误R knnImputation 给出错误 https stackoverflow com questions 45117125 r knnimputation giving er
  • ggplot多个时间不等的时间序列

    我知道有一些与时间序列和多个数据帧相关的已回答问题 但我似乎无法弄清楚这一点 我想绘制 4 个不同压力传感器与时间的时间戳数据 pa 列 我有来自同一实验的 4 个带时间戳的压力读数 dfs 然而 由于传感器故障和数据中的其他信号 传感器收
  • 如何更改 R Markdown HTML 文档中目录的颜色和属性?

    我花了很多时间谷歌搜索这个 但似乎无法弄清楚 我正在使用 R Markdown 制作 HTML 文档 文档在这里 http rmarkdown rstudio com html document format html http rmark
  • Dplyr select_ 和starts_with 对变量列表中的多个值进行选择

    我正在从不同位置的不同传感器收集数据 数据输出类似于 df lt data frame date c 2011 2012 2013 2014 2015 Sensor1 Temp c 15 18 15 14 19 Sensor1 Pressu
  • 获得各州的边界

    编辑7 经过相当多的帮助后 我已经能够得到一张接近我需要的结果的地图 但我仍然需要在地图上显示州边界 但我无法弄清楚 为了制作一个合适的可重现示例 我需要链接到数据集 因为输出太大 为了使事情变得简单 我只对三个状态进行子集化 但边界线不显
  • R 中 bquote 中的拼接

    假设我正在使用 R 的反引号运算符构建一个表达式bquote 并且我想在列表中的特定位置 拼接 即丢失列表的外括号 例如 我有表达式 5 4 我想在其开头添加 6 而不使用字符串操作 即完全对符号结构进行操作 So gt b quote 5
  • 从上一列中减去一列

    样本数据 dfData lt data frame ID c 1 2 3 4 5 DistA c 10 8 15 22 15 DistB c 15 35 40 33 20 DistC c 20 40 50 45 30 DistD c 60
  • 如何在 ifelse 中使用示例

    我有以下清单 x rep a 100 如果我使用下表 ifelse x a sample c 1 100 1 0 当我第一次运行时 我得到以下输出 1 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
  • 通过 read.big.matrix 读取 R 中的大数据

    我正在使用 r 读取尺寸为 3131875 5 的数据read big matrix 我的数据既有字符列又有数字列 包括日期变量 我应该使用的命令是 as1 lt read big matrix C Documents and Settin
  • 使用 select_ 和starts_with R

    为什么这段代码不起作用 mtcars gt select starts with d Error in eval expr envir enclos could not find function starts with 这是简化的示例 我
  • 如何修剪 R 向量?

    我有以下排序向量 gt v 1 1 0 1 2 4 5 2 3 4 5 7 8 5 6 7 8 10 11 如何删除 1 0 和 11 条目无需循环整个向量 使用用户循环还是隐式使用语言关键字 也就是说 我想修剪每个向量edge并且仅在每个
  • 将代表扩展到矩阵?

    如果你打电话rep在矩阵上 它重复其元素而不是整个矩阵 传统的修复方法是调用rep list theMatrix 我想延长rep以便它自动执行此操作 我尝试使用 rep matrix lt function x rep list x 这确实
  • 在R中读写csv.gz文件

    有非常similar https stackoverflow com questions 9548630 read gzipped csv directly from a url in r关于这个主题的问题 但非在 R 下非常精确地处理这个

随机推荐

  • HIVE 枢轴和总和

    我有一个表格 我试图弄清楚如何根据第二列中的值进行透视和求和 输入示例 own pet qty bob dog 2 bob dog 3 bob dog 1 bob cat 1 jon dog 1 jon cat 1 jon cat 1 jo
  • JPA 和 Bean 验证的唯一约束

    我想要一个 UniqueBean Validation 的约束 但这不是标准提供的 如果我使用 JPA UniqueConstraint我不会有独特的验证和错误报告机制 有没有办法定义 Unique作为 Bean Validation 约束
  • 如何使用AJAX上传大型CSV文件? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我们有一些包含大量记录的 CSV 文件 需要使用 Web 界面将此文件上传到 MySQL 数据库 这些文件是从不同的现场工作中收集的 并通过网络应用程序上传到服务器 Web 应用
  • Android原生webrtc:已连接后添加视频

    我已经使用 Google 代码库中的 libjingle so 和 PeerConnectionClient java 等在我的 Android 应用程序中成功运行 WebRTC 一段时间了 但是 我现在遇到一个问题 用户仅以音频方式启动连
  • 在 Python 2.7 中,如何覆盖单个函数的字符串表示形式?

    如何覆盖 Python 中单个函数的字符串表示形式 我尝试过的 gt gt gt def f pass gt gt gt f
  • 异步 ReadDirectoryChangesW 调用会阻止线程退出

    介绍 我正在编写一个小应用程序 用于监视某个目录中是否有新添加的文件 我想将监控代码放在一个单独的线程中 这样我就可以让主线程自由用于其他事情 并在需要时取消监控线程 相关信息 我在用读取目录更改W进行监控 我正在使用原始 WIN32 AP
  • pandas DataFrame 的反向地理编码

    我们有经度和纬度数据 需要将它们转换为纽约市的邮政编码 有什么方法可以处理 20 000 行的 python 包吗 uszipcode 包可以满足您的需求 from uszipcode import SearchEngine search
  • 动态显示资源/可绘制图像

    我正在尝试将不同的图像 jpg png 动态地放入ListView from res drawable 我从数据库中获取的图像的名称 图像本身位于res drawable folder 这是我已经拥有的 错误为 D 字符串图像名称 gt 数
  • Java 和 C# 中的 getBytes() 等效项

    我想将 Java 中的类转换为 C 大部分更改已经完成 但我对此部分不太确定 我想转换这行代码 byte arrayOfByte1 paramString getBytes 我已经尝试过这个 byte arrayOfByte1 BitCon
  • Angular ui-router 嵌套视图不会刷新 Angular 服务检索到的数据

    我有一个不平凡的 Angular SPA 它使用 ui router 来管理多个视图 其中许多视图同时可见 我需要模型在控制器之间可见 因此我编写了服务 允许控制器拉取已更新的模型数据的新副本 我提前为问题的长度表示歉意 但我会先说明问题
  • 在 Google Maps API v3 中仅打开一个 InfoWindow

    我只需在 Google 地图上打开一个 InfoWindow 在打开新的 InfoWindows 之前 我需要关闭所有其他 InfoWindows 有人可以告诉我该怎么做吗 您只需创建一个InfoWindow对象 保留对其的引用 并为所有标
  • 使用 MVC 和实体框架实施审核日志/更改历史记录

    我正在使用实体框架在我的 MVC 应用程序中构建更改历史记录 审核日志 所以具体在编辑方法中public ActionResult Edit ViewModel vm 我们找到我们正在尝试更新的对象 然后使用TryUpdateModel o
  • 如何让 Homebrew 恢复到之前的状态?

    我删除了一些 rb 文件 cassandra rb 电子邮件受保护 and 电子邮件受保护 从文件夹 usr local Homebrew Library Taps homebrew homebrew core Formula 来自 mac
  • Win32 中的 Sleep() 使程序无响应

    基本上就是标题所说的 我想当用户按下特定按钮时每 1 秒更新一次按钮包含的文本 我注意到 当程序没有焦点时 它可以正常工作并且文本刷新正确 但是当我将鼠标悬停在程序上或尝试单击它的菜单时 Windows 通知我该程序没有响应 并询问我是否我
  • 关于传统解释器、编译器和 JIT 编译器/解释器的澄清

    我正在学习 Java 以下事情对我来说有点困惑 我的理解是 Java编译器 Java 编译器只是转换 java程序进入 class文件 这意味着将我们的源代码转换为字节码 它是虚拟机 JVM 的操作码列表 这使得 Java 平台无关 Jav
  • 这是一个错误的 REST URL 吗?

    我刚刚阅读了有关 REST URL 的内容并看到了以下示例 API 用户 获取用户 现在 如果使用动词 GET 通过 HTTP 进行访问 这不是一个错误的 URL 因为它描述了 URL 中的操作 GET 这更像是一个惯例 而不是硬性规则 但
  • 现在有人可以下载 Eclipse 吗?

    我无法下载 Eclipse 这是Eclipse的问题吗 这是链接https www eclipse org downloads packages 是的 在计划内的维护中断之后 eclipse org 网站是很遗憾无法到达的到目前为止 202
  • 调用未定义的方法 Illuminate\Pagination\Paginator::make()?

    这是我的代码 use Illuminate Support Collection use Illuminate Support Facades Input use Illuminate Pagination Paginator collec
  • CakePHP - 分页和排序二级关联

    我知道这个问题已经被问了 100 000 次 但我几乎阅读了所有 100 000 条回复 但似乎没有一个符合我的要求 我已经尝试了所有可能的组合 显然没有 但我担心我会在如此相对简单的事情上失败 这是我的第二个蛋糕项目 所以我绝不是专家 简
  • 如何绘制混合箱线图:一半箱线图,另一半有抖动点?

    我正在尝试制作与图 2d f 类似的图文章发表在 自然 杂志上今年 它基本上是一半箱线图 另一半是点 有人能给我一些提示吗 非常感谢 这些是我的数据和代码 它们生成了带有点的完整框 require magrittr require tidy