如何在ggpubr的ggline分面图中为T和R线条设置不同颜色
为分面PK Spaghetti图指定不同药物的线条颜色
问题说明
使用ggpubr包的ggline()函数绘制分面PK spaghetti图时,需要为Drug为"T"的线条设置红色,Drug为"R"的线条设置蓝色。当前代码仅能通过color参数为两个分面设置统一颜色,无法按药物类别单独指定。
示例数据集
d2 <- structure(list(Subject = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), levels = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"), class = "factor"), Sequence = c(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, 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), Period = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), levels = c("1", "2"), class = "factor"), Time = c(0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 24, 48, 72, 0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 24, 48, 72, 0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 24, 48, 72, 0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 24, 48, 72), Conc = c(0, 3.65, 6.89, 12.58, 15.89, 18.91, 20.18, 22.29, 24.25, 26.89, 33.58, 30.22, 20.51, 9.85, 1.92, 0, 4.29, 7.91, 14.98, 20.54, 25.98, 28.2, 30.4, 25.4, 22.1, 19.55, 17.47, 14.32, 8.98, 1.51, 0, 3.93, 8.07, 14.43, 17.88, 20.98, 26.06, 27.38, 25.97, 24.01, 22.16, 18.68, 14.39, 8.29, 1.95, 0, 3.82, 8.95, 13.48, 17.43, 24.24, 28.99, 27.96, 22.55, 22.46, 19.71, 18.77, 12.65, 8.13, 1.73), Drug = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), levels = c("R", "T"), class = "factor")), row.names = c(NA, -60L), class = c("tbl_df", "tbl", "data.frame"))
当前代码
d2 |> ggline(x = "Time", y = "Conc", group = 'Subject', facet.by = 'Drug', numeric.x.axis = TRUE, panel.labs = list(Drug = c("Treatment R", "Treatment T")), ylab = 'Concentration, ng/ml', xlab = 'Time (h)', na.rm = TRUE, size = 0.3 ) |> ggpar( main = 'PK profile', submain = 'nat scale' ) + theme_minimal()
修改后代码(实现分药物指定颜色)
library(ggpubr) d2 |> ggline(x = "Time", y = "Conc", group = 'Subject', facet.by = 'Drug', numeric.x.axis = TRUE, panel.labs = list(Drug = c("Treatment R", "Treatment T")), ylab = 'Concentration, ng/ml', xlab = 'Time (h)', na.rm = TRUE, size = 0.3, # 按Drug映射颜色,并指定对应颜色 color = "Drug", palette = c("blue", "red") # 对应Drug水平"R"和"T"的颜色 ) |> ggpar( main = 'PK profile', submain = 'nat scale' ) + theme_minimal()
说明
- 通过
color = "Drug"让线条颜色与Drug变量关联,每个药物类别对应不同颜色 palette = c("blue", "red")指定颜色顺序,与Drug因子的水平顺序c("R", "T")对应,因此Treatment R分面的线条为蓝色,Treatment T分面的线条为红色- 分面后每个面板内仅包含对应药物的数据,不会出现颜色混淆的问题
内容的提问来源于stack exchange,提问作者Roman Maksvytis
相关产品推荐
相关产品推荐

