如何在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)
关键修改点说明
- 基因行斜体设置:将
labeltext的Gene列改为lapply(gene, fp_txt_italic),直接对每个基因名应用斜体样式,避免expression()的报错问题。 - 汇总行样式重置:在
fp_append_row中通过txt_gp参数将汇总行的字体设为普通样式,保证Cancer行不显示斜体。 - 表头样式:
fp_add_header添加的表头默认使用普通字体,无需额外修改。
内容的提问来源于stack exchange,提问作者gernophil
相关产品推荐
相关产品推荐

