I created a plot using ggcompetingrisks that is illegible. I would like to color code the time periods and differentiate the risk groups by using dashed vs dotted lines. Right now it's flipped.
p3 <- ggcompetingrisks(fit = TimePer_fit,
multiple_panels = F,
ggtheme = theme_minimal(),
coef = 1.96, #95% CI
conf.int = F,
xlim = c(0, 45),
ylim = c(0, 0.5),
xlab = "Days",
ylab = "Probability",
title = "Cumulative Incidence by Time Period")
theme(plot.title = element_text(hjust = 0.5), #center title
axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0)), #pad y axis label
axis.title.x = element_text(margin = margin(t = 10, r = 0, b = 0, l = 0))) #pad x axis label
scale_color_manual(labels = c("risk 1", "risk 2"),
values = c("#F8766D", "619CFF"),
name = element_blank()) # do not name legend
scale_linetype_manual(labels = c("Period 1","Period 2","Period 3","Period 4", "Period 5"),
values = c("solid", "longdash", "dashed","twodash", "dotted"),
name = element_blank())
CodePudding user response:
Perhaps what you could try is to choose two contrasting colors. Also you can use this function facet_wrap(. ~ x)
, using as parameter either risk or period, and in this way you can have a clean plot.
CodePudding user response:
We can look into the plot object and see that colour
is automatically mapped to event
and linetype
is mapped to group
. These are not easily swapped using normal methods, as they are in the quosure
form. (The quosure: a data structure that captures an expression along with its associated environment, as found in function arguments. -Hadley). But we can use other methods.
Here is a dummy example from the survminer
package.
library(ggplot2)
library(cmprsk)
library(survminer)
set.seed(2)
ss <- rexp(100)
gg <- factor(sample(1:3,100,replace=TRUE),1:3,c('BRCA','LUNG','OV'))
cc <- factor(sample(0:2,100,replace=TRUE),0:2,c('no event', 'death', 'progression'))
strt <- sample(1:2,100,replace=TRUE)
# handles cuminc objects
print(fit <- cmprsk::cuminc(ss,cc,gg,strt))
g<-ggcompetingrisks(fit,
multiple_panels = F)
g
We can see event is mapped to colour, and group to linetype.
g$mapping$colour <quosure> expr: ^event env: 0x00000295351a3b58
g$mapping$linetype <quosure> expr: ^group env: 0x00000295351a3b58
Now we access those elements in the plot object and swap them over.
library(rlang)
g$mapping$colour<-quo_set_expr(g$mapping$colour, quote(group))
g$mapping$linetype<-quo_set_expr(g$mapping$linetype, quote(event))
g