我有交叉研究的数据,我需要绘制一些图表。 为所有受试者绘制“平均”图没有问题,但我还需要为每个受试者绘制单独的图,并叠加两种治疗(T 与 R)。还有另一个问题 - 如何为每个图分配一个主题 ID。以下是 4 名受试者的数据(可能更多,最多 100 名)。
结构(列表(主题 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4), seq = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), prd = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), 时间 = c(0, 0.333, 0.667, 1, 1.333, 1.667, 2, 2.5, 3, 3.5, 4、6、8、12、24、48、0、0.333、0.667、1、1.333、1.667、2、 2.5、3、3.5、4、6、8、12、24、48、0、0.333、0.667、1、1.333、 1.667、2、2.5、3、3.5、4、6、8、12、24、48、0、0.333、0.667、 1、1.333、1.667、2、2.5、3、3.5、4、6、8、12、24、48、0、 0.333、0.667、1、1.333、1.667、2、2.5、3、3.5、4、6、8、12、 24、48、0、0.333、0.667、1、1.333、1.667、2、2.5、3、3.5、 4、6、8、12、24、48、0、0.333、0.667、1、1.333、1.667、2、 2.5、3、3.5、4、6、8、12、24、48、0、0.333、0.667、1、1.333、 1.667, 2, 2.5, 3, 3.5, 4, 6, 8, 12, 24, 48), 浓度 = c(0, 0、103.041、301.731、371.722、341.099、326.791、279.52、262.657、 234.926、220.389、141.804、112.702、68.981、31.9、不适用、0、 0、0、0、11、24.436、57.257、122.065、159.702、271.629、402.88、 154.535、126.576、75.999、33.272、不适用、0、0、0、0、0、25.932、 134.108、257.836、250.676、237.466、248.142、142.511、116.839、 66.76、23.942、不适用、0、0、0、27.992、78.208、306.763、361.578、 303.356、248.948、193.574、184.743、104.518、76.36、44.371、 15.609、不适用、0、49.073、356.27、546.462、764.171、822.19、 910.403、818.073、687.538、601.246、598.949、301.036、265.579、 129.278、55.892、11.525、0、60.115、316.231、496.366、764.952、 1086.271、982.368、839.902、757.569、622.151、733.912、314.365、 242.839、138.138、67.617、15.515、0、0、51.362、135.969、 253.814、353.437、346.998、314.292、385.864、516.589、627.003、 263.782、274.407、127.667、45.013、不适用、0、0、0、59.682、237.216、 380.224、528.946、523.512、446.714、417.835、352.487、199.18、 195.568, 99.99, 39.81, NA), 药物 = c("T", "T", "T", "T", “T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、 “R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、 “R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、 “R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“T”、“T”、“T”、“T”、 “T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、 “R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、 “R”、“R”、“R”、“R”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、 “T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、 “T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、 “R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、 “R”,“R”,“R”,“R”)),row.names = c(NA,-128L),class = c(“tbl_df”, “tbl”,“data.frame”))
我用于“平均”图的代码如下:
data <-
Totalplot |>
group_by(drug, time) |>
summarise(conc = mean(conc, na.rm = TRUE))
plot <-
ggplot(
data = data, aes(x = time, y = conc, color = drug)) +
geom_point(
aes(
group = interaction(drug, time)), alpha = 0.5, shape = 2, position = position_jitter(width = 0.1, height = 0)) +
geom_line(data = data, linewidth = 0.5) +
xlab('Time, h') +
ylab('Drug X plasma conc. ng/ml') +
labs(title = 'Mean plasma concentration') +
theme_bw()
使用
lapply
:
subjectsIDs <- unique(Totalplot$subj)
plots <- lapply(subjectIDs, function(x) {
Totalplot %>% filter(subj == x) %>%
ggplot(
aes(x = time, y = conc, color = drug)) +
geom_point(
aes(
group = interaction(drug, time)), alpha = 0.5, shape = 2, position = position_jitter(width = 0.1, height = 0)) +
geom_line(linewidth = 0.5) +
xlab('Time, h') +
ylab('Drug X plasma conc. ng/ml') +
labs(title = 'Mean plasma concentration') +
theme_bw()
})
不确定这是否是您为每个图分配主题 ID 的意思,但您可以命名图列表中的每个元素:
names(plots) <- subjectIDs
让您像这样访问每个图:
plots[["1"]]
或者,如果您希望将所有绘图排列在网格中:
plot <- Totalplot %>%
ggplot(
aes(x = time, y = conc, color = drug)) +
geom_point(
aes(
group = interaction(drug, time)), alpha = 0.5, shape = 2, position = position_jitter(width = 0.1, height = 0)) +
geom_line(linewidth = 0.5) +
xlab('Time, h') +
ylab('Drug X plasma conc. ng/ml') +
labs(title = 'Mean plasma concentration') +
theme_bw() +
facet_wrap(facets = vars(subj))
plot