Кривая Каплана Мейера (с ggsurvplot) с прозрачным фоном

Я сделал кривую Каплана Мейера с помощью ggsurvplot как таковой:

kaplan_plot365d <- ggsurvplot(kmcurve365d,
                              conf.int = TRUE,
                         legend.labs = c('Trop-T normal and Trop-I normal', 'Trop-T elevated and Trop-I normal', "Trop-T elevated and Trop-I elevated"),
                         legend.title = '',
                         title = 'Kaplan-Meier Curve for 365-Day Mortality',
                         xlab = 'Time in Days', 
                         ylab = 'Survival probability', main = 'Kaplan-Meier Model',
                         ylim=c(min(0.7), max(1)),
                         xlim=c(min(0), max(366)),
                         break.time.by = 120,
                         palette = c('#FDE725FF', "#21908CFF", "#440154FF"),
                         risk.table = TRUE,
                         risk.table.y.text = TRUE, fontsize = 4, tables.theme = clean_theme(),
                         risk.table.title = "Survivors per group") +
guides(colour = guide_legend(nrow = 2))

kaplan_plot365d

Я хотел бы сделать весь фон прозрачным, а затем сохранить его с высоким качеством, чтобы использовать его для плаката.

Я попытался добавить эти строки в функцию ggsurvplot(): но это не работает:

    panel.background = element_rect(fill='transparent'), #transparent panel bg
    plot.background = element_rect(fill='transparent', color=NA), #transparent plot bg
    panel.grid.major = element_blank(), #remove major gridlines
    panel.grid.minor = element_blank(), #remove minor gridlines
    legend.background = element_rect(fill='transparent'), #transparent legend bg
    legend.box.background = element_rect(fill='transparent') #transparent legend panel
  

Затем я использую этот код, чтобы сохранить его:

grid.draw.ggsurvplot <- function(x){
  survminer:::print.ggsurvplot(x, newpage = FALSE)}

ggsave("Kaplan-Meier_365d_withCI_Troponine.jpg",
         path = ("I:\\Personal\\Poster/"),
         plot = kaplan_plot365d,
         dpi = 300)

Может ли кто-нибудь помочь мне сделать фон прозрачным?

Спасибо!

Пробовали сохранить в png? Я не уверен, что JPEG может делать прозрачный фон?

Andy Baxter 10.01.2023 16:28

Не могли бы вы поделиться некоторыми воспроизводимыми данными, используя dput?

Quinten 10.01.2023 16:52

@AndyBaxter, это хорошая идея! К сожалению, код не работает, а код, который я пытался добавить, не работает.

esptang 11.01.2023 11:14

@Quinten, извините, но я не нахожу простого способа обобщить мой (тихий большой) фрейм данных. Попробуем объяснить переменные, которые я использую для этой кривой Каплана-Мейера: time365d.death = число от 0 до 366 (день смерти; 366 = прожил более года), t.i_h_l = число от 1 до 3 ( это категории уровней тропонина, которые я сравниваю на кривой КМ). А еще, это код для kmcurve365d: kmcurve365d <- survfit(Surv(time365d.death.2, death_365) ~ t.i_h_l, data=fukno_trop, type='kaplan-meier') Надеюсь, это как-то поможет.

esptang 11.01.2023 11:42
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Узнайте, как использовать теги &lt;ul&gt; и &lt;li&gt; для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
1
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что вижу, как это работает, и тонкости обеспечения того, чтобы все это сочеталось с ggsave, grid.draw и ggsurvplot. Главное, чтобы эти строки находились внутри вызова ggtheme = theme(...) в функции ggsurvplot:

library(survival)
library(survminer)

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

surv_plot_out <- ggsurvplot(fit, data = lung,
           legend.title = "Sex",
           legend.labs = c("Male", "Female"),
           conf.int = TRUE,
           risk.table = TRUE,
           tables.height = 0.2,
           tables.theme = theme_cleantable(),
           palette = c("#E7B800", "#2E9FDF"),
           ggtheme = theme(
             panel.background = element_rect(fill='transparent'), #transparent panel bg
             plot.background = element_rect(fill='transparent', color=NA), #transparent plot bg
             panel.grid.major = element_blank(), #remove major gridlines
             panel.grid.minor = element_blank(), #remove minor gridlines
             legend.background = element_rect(fill='transparent'), #transparent legend bg
             legend.box.background = element_rect(fill='transparent') #transparent legend panel
           ) # Change ggplot2 theme
) 

grid.draw.ggsurvplot <- function(x) survminer:::print.ggsurvplot(x, newpage = FALSE)

Затем сохраните как png, чтобы получить прозрачное изображение:

ggsave("test_survplot.png", surv_plot_out, bg = "transparent")  
#> Saving 7 x 5 in image

Результат:

Другие вопросы по теме