在ggplot2中用bquote折叠字幕

Posted

技术标签:

【中文标题】在ggplot2中用bquote折叠字幕【英文标题】:Collapse subtitle with bquote in ggplot2 【发布时间】:2021-11-17 22:24:00 【问题描述】:

我正在尝试将我的副标题更改为使用 7 个上标和 50 个下标读取“所有主题均以 5x10^7 TCID50 处理”。

我能够运行以下情节,其中有空格(“5 x 10”):

使用以下代码:

kmcurve1 <- ggsurvplot(km_p1p2_p2dose_fit, 
              palette = c("#202960", "#8CC63E"), 
              xlab = "Time (Months)", 
              legend.labs = c("Phase 1", "Phase 2"), 
              break.time.by = 6, 
              xlim = c(0,36), 
              conf.int = FALSE, 
              pval = TRUE, 
              pval.size = 5, 
              pval.method.size = 5, 
              pval.coord = c(30,0.9), 
              pval.method.coord = c(30,1), 
              pval.method = TRUE, 
              surv.median.line = "v", 
              risk.table = "abs_pct", 
              risk.table.col = "strata", 
              surv.plot.height = 2, 
              risk.table.height = 0.24, 
              censor.shape = "|", 
              censor.size = 5, 
              font.title = 28, 
              font.x = 14, 
              font.y = 14,
              font.tickslab = 12,
              risk.table.fontsize = 3.5)

kmcurve1$plot <- kmcurve1$plot +
  labs(title = "Overall Survival for Phase 1 and Phase 2",
       subtitle = bquote(All~Subjects~as~Treated~at~5.0~x~10^7~TCID[50]),
        caption = bquote(TCID[50]~-~Median~Tissue~Culture~Infectious~Dose)) +
        theme(#text = element_text(family = "serif"), #only run for PDF output
              plot.title = element_text(size = 20), 
              plot.subtitle = element_text(size = 16), 
              plot.caption = element_text(size = 12),
              legend.text = element_text(size = 12), 
              legend.title = element_text(size = 12), 
              legend.key.size = unit(16, "points"), 
              axis.title.x = element_text(size = 14), 
              axis.title.y = element_text(size = 14),
              axis.text.x = element_text(size = 12), 
              axis.text.y = element_text(size = 12))

kmcurve1

我已删除研究编号以避免识别信息。

对于字幕,我也试过bquote(All~Subjects~as~Treated~at~5.0x10^7~TCID[50]),它给了我以下错误信息:

错误:出现意外符号:" labs(title = "Overall Survival for 第一阶段和第二阶段”, subtitle = bquote(All~Subjects~as~Treated~at~5.0x10"

让我知道让 KM 的 reprex 拟合来复制曲线是否会有所帮助。

【问题讨论】:

【参考方案1】:

您唯一缺少的知识是当您不希望在它们之间出现空格时,需要使用星号来分隔表达式中的标记。标记不能以数字开头,因此您的表达式参数应该是:

  bquote(All~Subjects~as~Treated~at~5.0*x*10^7~TCID[50])

使用 xilliam 的示例,因为它与问题无关的材料要少得多。我使用了函数expression,因为您没有替换或访问调用环境中的值。

library(survminer)
library(survival)

fit<- survfit(Surv(time, status) ~ sex, data = lung)
p <- ggsurvplot(fit, data = lung)

p$plot +
    labs(title = "Overall Survival for Phase 1 and Phase 2",
         subtitle = expression(
            All~Subjects~as~Treated~at~5*x*10^7~TCID[50]),
         caption = expression(
            TCID[50]~-~Median~Tissue~Culture~Infectious~Dose))

给予:

【讨论】:

【参考方案2】:

显示“x”周围不带空格的字幕的一种方法是将部分数学表达式替换为字符串“5x10”。 bquote 能够将数学表达式与字符串结合起来。这是您的字幕以可重现的情节呈现。

library(survminer)
library(survival)

fit<- survfit(Surv(time, status) ~ sex, data = lung)
p <- ggsurvplot(fit, data = lung)

  p$plot +
  labs(title = "Overall Survival for Phase 1 and Phase 2",
       subtitle = bquote(All~Subjects~as~Treated~at~'5x10'^7~TCID[50]),
       caption = bquote(TCID[50]~-~Median~Tissue~Culture~Infectious~Dose))

【讨论】:

谢谢@xilliam!这就像一个魅力。我不经常使用bquote。我正在玩并将第一部分设置为单数字符串,效果也很好:subtitle = bquote('All Subjects as Treated at 5.0x10'^7~TCID[50]), 我认为接触bquote 是件好事,但您也可以轻松地将expression 用于这些应用程序。 bquote 的真正价值是允许替换评估的子表达式。

以上是关于在ggplot2中用bquote折叠字幕的主要内容,如果未能解决你的问题,请参考以下文章

bquote轴标签ggplot2中的换行符和上标

R:带多行文字的直方图字幕:如何在列中获得表格对齐?

ggplot2 没有坐标轴、图例等的绘图

底部的图例,在 r 中用 ggplot2 包裹的两行

在Python中用Request库模拟登录:字幕库(无加密,无验证码)

在R中用ggplot2区分多个图例的位置