Сначала вам нужно взглянуть на код.
ggadjustedcurves
Похоже, что ggadjustedcurves
передает все свои аргументы вспомогательным функциям, которые зависят от аргумента «method», в данном случае «среднего», так что теперь посмотрим на эту (скрытую) функцию:
getAnywhere( ggadjustedcurves.average )
И обратите внимание, что нет положения, позволяющего принимать дополнительные аргументы помимо тех немногих, которые определены в «главной функции», то есть не использовать механизм многоточия R или спецификации других возможных аргументов aes, кроме размера. (Он также не использует geom_line
.) Поэтому вам нужно изменить и ведущую функцию и вспомогательную функцию, чтобы она принимала аргумент типа линии. Здесь я покажу, как изменить вспомогательную функцию (хотя это необходимо сделать и для функции ggadjustedcurves
, а также, возможно, для остальных вспомогательных функций, если вы хотите, чтобы это было полностью общим):
assignInNamespace('ggadjustedcurves.average',
function (data, fit, variable, size = 1, ..., linetype=linetype)
{
time <- surv <- NULL
lev <- sort(unique(data[, variable]))
pred <- survexp(as.formula(paste("~", variable)), data = data,
ratetable = fit)
curve <- data.frame(time = rep(c(0, pred$time), length(lev)),
variable = factor(rep(lev, each = 1 + length(pred$time))),
surv = c(rbind(1, pred$surv)))
ggplot(curve, aes(x = time, y = surv, color = variable)) +
geom_step(size = size, ..., linetype=linetype) # not geom_line
},
pos="package:survminer")
Если вы выполните SO-поиск по "geom_segment linetype", вы обнаружите, что geom_segment
(то, что использует geon_step
) не сконструирован таким образом, чтобы было легко дать ему короткие векторы для изменения "смежных" длин. результатов пошаговой функции. См. Ошибка ggplot с использованием типа линии и эстетики группы . Это означает, что вам нужно будет использовать for-loop
или lapply
для построения отдельных «кривых шага», если вам нужны разные типы линий.