You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:42:03