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

如何在R的love.plot()中设置细菌名称为斜体?

如何在love.plot()中设置协变量名称为斜体?

问题描述

使用cobalt包的love.plot()绘制倾向得分匹配的协变量平衡图时,尝试用**标记和expression(italic())设置E.coli等细菌名称为斜体均无效,相关代码及环境信息如下:

if(!require("pacman")){
  install.packages('pacman') # install pacman if not already installed;
}

pacman::p_load(tidyverse,
               MatchIt, # propensity score matching
               cobalt) # covariate balance tables (and plots)

dat <- data.frame(
    stringsAsFactors = FALSE,
                    patients_unique_id = c("1","2","3","4",
                            "5","6","7","8","9","10","330","331","332",
                            "333","334","335","336","337","338","339","340",
                            "341","342","343","344","11","12","13","14","15"),
                                 EI_BL = c(0,0,0,0,0,0,0,0,0,0,
                                           1,0,0,0,0,0,0,0,0,0,0,0,
                                           0,1,0,0,0,1,0,1),
                                 ecoli = c(0,0,0,0,0,1,0,0,1,0,
                                           1,1,0,0,0,1,0,1,1,1,0,0,
                                           1,0,0,0,0,0,0,1),
                                   kpn = c(0,0,0,0,0,0,1,0,0,0,
                                           0,0,1,0,0,0,0,0,0,0,0,0,
                                           0,0,1,0,0,0,0,0),
                                   psa = c(0,0,0,0,0,0,0,1,0,0,
                                           0,0,0,0,0,0,0,0,0,0,0,0,
                                           0,0,0,1,0,0,0,0),
                                 pitt4 = c(0,0,0,0,0,0,0,1,0,0,
                                           0,0,0,0,0,0,0,1,0,0,0,0,
                                           0,0,1,0,0,0,0,0)
                  )

m.out <- matchit(EI_BL ~
                   ecoli +
                   kpn +
                   psa + 
                   pitt4,
                 data = dat,
                 method = "full",
                 distance = "glm")

new_names <- c(ecoli = "**E.coli**",
               kpn = "K.pneumonia",
               psa = "P.aeruginosa",
               pitt4 = "Pitt Bacteremia Score >= 4")

love.plot(m.out,
          drop.distance = TRUE,
          var.names = new_names,
          abs = TRUE)

Session信息:

sessionInfo()
#> R version 4.2.2 (2022-10-31 ucrt)
#> Platform: x86_64-w64-mingw32/x64 (64-bit)
#> Running under: Windows 10 x64 (build 19044)

解决方案

方法1:使用ggplot原生plotmath表达式

love.plot基于ggplot2构建,直接将变量名定义为expression()对象即可实现斜体效果:

# 用expression(italic())定义带斜体的变量名
new_names <- c(ecoli = expression(italic("E.coli")),
               kpn = expression(italic("K.pneumonia")),
               psa = expression(italic("P.aeruginosa")),
               pitt4 = "Pitt Bacteremia Score >= 4")

# 绘制平衡图
love.plot(m.out,
          drop.distance = TRUE,
          var.names = new_names,
          abs = TRUE)

方法2:使用ggtext包支持Markdown格式

如果需要混合多种文本格式(如斜体+普通文本),可以用ggtext包让ggplot支持Markdown语法:

# 安装并加载ggtext
pacman::p_load(ggtext)

# 用Markdown的*标记定义斜体
new_names <- c(ecoli = "*E.coli*",
               kpn = "*K.pneumonia*",
               psa = "*P.aeruginosa*",
               pitt4 = "Pitt Bacteremia Score >= 4")

# 绘制平衡图并设置y轴文本为markdown渲染
love.plot(m.out,
          drop.distance = TRUE,
          var.names = new_names,
          abs = TRUE) +
  theme(axis.text.y = element_markdown())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:37:49