如何使用 ggcuminc 或 survfit 将风险表图例文本和标题移动到图中的左侧

问题描述 投票:0回答:1

我希望将风险表标题和风险表文本定位并对齐到最左侧,如第一张图片所示。

暨公司情节的目标

我创建了一个对象:

library(survfit)
library(tidycmprsk)

fit.mh.male <- cuminc(Surv(time, status) ~ Exposure, data =  timesplit.mh.m)


fit.mh.male %>%
  ggcuminc()+
  add_risktable(
    risktable_stats = `n.risk`,
    stats_label = list(n.risk = "No. at Risk"), 
    size = 3)+
  add_confidence_interval()+
  scale_ggsurvfit()+
  labs(title = "FTMH male",
       x = "Time since surgery")+
  theme(axis.test.y = element_text(hjust = 1))+
  coord_cartesian(xlim = c(0, 10), 
                  ylim = c(0, 0.04)) + 
  scale_color_jama()+
  scale_fill_jama()+
  theme_minimal()+
  theme(legend.position = "bottom")+
  guides(color = guide_legend(nrow = 1))

在我的代码中,风险表文本是向右对齐的 - 它涵盖了在时间 = 0 时面临风险的一些数字,并且风险表标题在时间 = 0 的数字上对齐,而不是在时间 = 0 时的数字上对齐。风险表文本。

我的代码输出

r ggplot2 ggsurvfit
1个回答
0
投票

为了更好地理解这个问题,至关重要的是要认识到

ggcuminc
对象的 print 方法创建了两个 ggplot 对象:顶部带有曲线的主面板,以及底部的一个仅文本的 ggplot 对象风险表。标签“No. at Risk”是底部图的title,标签“Cataract”和“Victrection”是 y 轴标签。

使用此信息,我们可以传递参数以将这些元素作为

theme
对象传递给
theme
add_risktable
参数:

fit.mh.male %>%
  ggcuminc() +
  add_risktable(
    risktable_stats = "n.risk",
    stats_label = list(n.risk = "    No. at Risk"), 
    size = 3,
    theme = list(theme_risktable_default(),
                 theme(plot.title.position = "plot",
                       axis.text.y.left = element_text(hjust = 0,
                            margin = margin(0, 20, 0, 0))))
    ) +
  add_confidence_interval() +
  scale_ggsurvfit() +
  labs(title = "FTMH male",
       x = "Time since surgery")+
  theme(axis.test.y = element_text(hjust = 1)) +
  coord_cartesian(xlim = c(0, 10), 
                  ylim = c(0, 0.04)) + 
  scale_color_jama() +
  scale_fill_jama() +
  theme_minimal() +
  theme(legend.position = "bottom") +
  guides(color = guide_legend(nrow = 1))

enter image description here


使用的数据

请注意,我们没有您的数据集,因此我必须创建一个具有相似特征和相同变量名称的数据集。这是我在上图中使用的数据:

set.seed(1)

timesplit.mh.m <- data.frame(Exposure = sample(c("Cataract", "Virectomy"), 
                                               300000, TRUE, prob = c(20, 0.1)))

timesplit.mh.m$status <- rbinom(300000, size = 1, 
    prob = ifelse(timesplit.mh.m$Exposure == "Cataract", 0.008, 0.02))

timesplit.mh.m$time <- runif(300000, 0, 120)/10

timesplit.mh.m$status <- factor(timesplit.mh.m$status)

fit.mh.male <- cuminc(Surv(time, status) ~ Exposure, data =  timesplit.mh.m)
© www.soinside.com 2019 - 2024. All rights reserved.