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

如何在forestplot()中设置Gene列指定元素为斜体

解决forestplot中Gene列特定行设置斜体的问题

我需要将forestplot的Gene列中,除表头和汇总行(Cancer)之外的所有基因名设置为斜体。尝试用expression(italic())时触发“could not find function "italic"”错误,现有类似方案不适用,以下是可行的修改方法:

修改思路

核心是针对**基因数据行的第一列(Gene列)**单独设置斜体样式,汇总行和表头保持默认样式。可以通过fp_txt_italic()格式化基因名,或在添加汇总行时重置字体样式来实现。

修改后的完整代码

library(forestplot)
library(dplyr)

mean <- c(0.9, 1.0, 1.1, 1.0 )
lower <- c(0.8, 0.9, 1.0, 0.9 )
upper <- c(1.0, 1.1, 1.2, 1.1 )
gene <- c("TP53", "KRAS", "CBP", "Cancer")
p_value <- c(0.06, 0.05, 0.01, 0.05 )
n_pos <- c(30, 40, 35, 50)
n_neg  <- c(470, 460, 465, 450)

base_data <- tibble(mean = mean,
                    lower = lower,
                    upper = upper,
                    gene = gene,
                    n_pos = n_pos,
                    n_neg = n_neg,
                    p_value = p_value)

base_data |>
  filter(gene != "Cancer") |>
  forestplot(
    # 将基因名用fp_txt_italic()包裹,设置为斜体
    labeltext = list(
      lapply(gene, fp_txt_italic),
      as.character(n_pos),
      as.character(n_neg),
      as.character(p_value)
    ),
    xlog = TRUE,
    vertices = TRUE,
    # 其他列保持默认字体
    txt_gp = fpTxtGp(
      label = list(
        NULL, # 第一列已通过fp_txt_italic设置,无需重复定义
        grid::gpar(),
        grid::gpar(),
        grid::gpar()
      )
    )
  ) |>
  fp_append_row(
    mean  = filter(base_data, gene == "Cancer")$mean,
    lower = filter(base_data, gene == "Cancer")$lower,
    upper = filter(base_data, gene == "Cancer")$upper,
    gene = filter(base_data, gene == "Cancer")$gene,
    n_pos = filter(base_data, gene == "Cancer")$n_pos,
    n_neg = filter(base_data, gene == "Cancer")$n_neg,
    p_value = filter(base_data, gene == "Cancer")$p_value,
    is.summary = TRUE,
    # 汇总行的Gene列恢复默认字体
    txt_gp = fpTxtGp(label = grid::gpar(fontface = "plain"))
  ) |>
  fp_add_header(
    gene = c("Gene"),
    n_pos = c("n(mutated)"),
    n_neg = c("n(wildtype)"),
    p_value = c("p")
  ) |>
  fp_set_zebra_style("#EFEFEF") |>
  fp_add_lines() |>
  fp_decorate_graph(graph.pos = 2)

关键修改点说明

  1. 基因行斜体设置:将labeltext的Gene列改为lapply(gene, fp_txt_italic),直接对每个基因名应用斜体样式,避免expression()的报错问题。
  2. 汇总行样式重置:在fp_append_row中通过txt_gp参数将汇总行的字体设为普通样式,保证Cancer行不显示斜体。
  3. 表头样式:fp_add_header添加的表头默认使用普通字体,无需额外修改。

内容的提问来源于stack exchange,提问作者gernophil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:55:17