我正在尝试找到一个 R 代码来绘制如下所示的图(如下所示)。我知道这个数字是用 python 创建的,因为我给创建这个代码的人发了电子邮件,但在与他承诺给我代码的来回沟通 2 个月后,他给我鬼魂了。我还尝试联系我的数据分析核心,并尝试搜索我可以构建的代码,但没有找到任何接近我想要完成的事情,所以我决定询问蜂巢思维。我过去使用过 python,所以我可以管理 python 脚本,但我主要使用 R 来绘制数据。
该图来自出版物- https://pubmed.ncbi.nlm.nih.gov/36599299/
我计划用来创建绘图的数据是昼夜节律数据。
它包含: 样本 = 三个数据集(BAT、WAT 和体外)。 过程 = 被发现受到昼夜节律调节的过程(即被测量的事物)。 ct = 子流程在昼夜节律中发生的时间,一天有 24 小时,并在 24/0h 结束。
这是我的“BAT”数据样本 - 样品过程ct
sample process ct
BAT CellCycle 1.140128762
BAT CellCycle 3.106516768
BAT CellCycle 3.738113578
BAT CellCycle 23.44912305
BAT CellCycle 23.49744379
BAT CellCycle 23.51422441
BAT CellCycle 23.33041125
BAT CellCycle 22.19656322
BAT CellCycle 22.84183477
BAT ECM 22.04149961
BAT ECM 23.45526633
BAT ECM 23.36802574
BAT ECM 23.40688727
BAT ECM 1.732071528
BAT ECM 1.529777828
BAT ECM 20.29377917
BAT Energy 2.19647636
BAT Energy 4.177766894
BAT Energy 2.624942744
BAT Energy 1.633080723
BAT Energy 2.25815373
BAT Energy 22.52527935
BAT Energy 21.844178
BAT Energy 1.44484992
BAT Energy 1.710318176
BAT Energy 1.721398481
BAT Energy 5.0700794
BAT Energy 3.252122282
BAT Energy 19.69284419
BAT Energy 2.521538024
BAT Energy 2.309621407
BAT Energy 1.979057875
BAT Energy 1.747326389
BAT Energy 1.620003554
BAT Energy 4.512535826
BAT Energy 19.48505391
BAT Energy 3.96613478
每个样本最终将有一个图(3 个图)显示每个过程的相位分布,并描述中值和 IQR。
仅凭一小部分数据样本很难知道,但以下是如何使用
ggplot
在 R 中做到这一点的基本原理:
library(tidyverse)
df %>%
mutate(ct = ifelse(ct > 12, ct - 24, ct)) %>%
ggplot(aes(as.numeric(factor(process)), ct, fill = process)) +
geom_vline(xintercept = 1:3, linewidth = 8, color = 'gray92') +
stat_boxplot(geom = 'errorbar', width = 0.5, aes(color = process)) +
geom_boxplot(width = 0.5, linewidth = 0, outlier.colour = NA) +
stat_boxplot(geom = 'errorbar', width = 0.5,
aes(ymax = after_stat(middle), ymin = after_stat(middle))) +
geom_hline(yintercept = c(-12, -8, -4, 0, 4, 8), linetype = 5,
alpha = 0.2) +
annotate('rect', xmax = 0.5, xmin = -Inf, ymin = -Inf, ymax = Inf,
fill = 'white') +
annotate('text', x = -1, y = 0, label = 'BAT', fontface = 2, size = 4) +
coord_polar(theta = 'y', start = pi) +
theme_void() +
scale_x_continuous(limits = c(-1, 3.25)) +
scale_y_continuous(limits = c(-12, 12), breaks = -12:11,
labels = ~sprintf('%02d:00', ifelse(.x < 0, .x + 24,.x))) +
theme(axis.text.x = element_text(),
legend.position = 'top') +
scale_color_manual(values = c('#ca6c28', '#aa2a25', '#538335')) +
scale_fill_manual(values = c('#ca6c28', '#aa2a25', '#538335'))