如何在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
相关产品推荐
相关产品推荐

