-- Возможное РЕШЕНИЕ в качестве ответа
Метки довольно длинные, в результате чего надпись «Нет риска» смещается вправо.
Кроме того, они больше не выравниваются по левому краю.
Таким образом, они не совпадают с осью X графика.
Как переместить метки слоев сверху, над номером риска? Есть ли возможность?
library(survminer)
library(survival)
library(dplyr)
lung <- lung %>%
mutate(timeyr = time / 365.25)
fit <- survfit(Surv(timeyr, status) ~ sex, data = lung)
ggsurv <- ggsurvplot(fit, size = 1,
xlab = "Follow-up time (years)",
ylab = "Survival probability (%)",
legend.labs = c("Drug 1234234", "Drug 25324"),
linetype = "strata",
xlim = c(0,2),
break.time.by = 1,
palette = c("#E7B800", "#2E9FDF"),
conf.int = FALSE,
pval = FALSE,
censor = FALSE,
risk.table = TRUE,
risk.table.title = "No. at risk",
risk.table.height = 0.2,
fontsize = 6,
tables.theme = theme_cleantable()
)
ggsurv





Если вы готовы к этому, я бы рассмотрел возможность использования другого пакета построения графиков под названием ggsurvfit. У него есть несколько преимуществ, но одно из основных заключается в том, что он создает настоящий объект ggplot, и вы можете добавить все настройки ggplot2 после создания графика выживания. Это позволит вам гораздо легче переключаться и манипулировать сюжетом. Вот как я бы это сделал ниже. Вам не нужно беспокоиться о длинных метках в таблице рисков, поскольку они будут помещены вверху группы, а не сбоку.
library(survival)
library(ggsurvfit)
lung <- lung %>%
mutate(timeyr = time / 365.25,
sex2 = ifelse(sex == 1 , "Drug 1234234", "Drug 25324"))
fit <- survfit2(Surv(timeyr, status) ~ sex2, data = lung)
ggsurvfit::ggsurvfit(fit) +
add_risktable() +
xlab("Follow-up time (years)") +
ylab("Survival probability (%)")
ggsurvfit::ggsurvfit(fit,
linetype_aes = TRUE) +
scale_color_manual(values = c("red", "blue")) +
add_risktable() +
xlab("Follow-up time (years)") +
ylab("Survival probability (%)")
Я добавил редактирование, чтобы показать, как использовать цвета и типы линий с ggsurvfit. Я попытался скорректировать метки рисунков слева, переведя новую строку и используя \n в тексте, но это не сработало. Я не слишком уверен в обходном пути для Survminer.
Есть обходной путь.
Просто добавьте строки кода и экспериментируйте, пока он не будет соответствовать вашим потребностям:
library(patchwork)
ggsurv$table <- ggsurv$table +
theme(
plot.title = element_text(margin = margin(l = 16, r = 0, t = 0), hjust = 0, vjust = 5), #Adjust "No. at risk"
axis.text.y = ggtext::element_markdown(margin = margin(l = 20, r = -100, t = -30), hjust = 0)) #Adjust Strata labels
Объедините график и таблицу:
combined_plot <- ggsurv$plot / ggsurv$table + plot_layout(heights = c(3,0.8))
combined_plot
Результаты:
Большое спасибо. А как насчет простого использования цветов слоев и выравнивания «Нет. в опасности», а также количество людей, подвергающихся риску, слева? Возможно ли это с помощью Survminer?