如何在autoplot中放置不同的符号

时间:2016-10-06 23:11:39

标签: r plot ggplot2

我在生存对象中遇到autoplot()的麻烦。我将以下为例

library(ggplot2)
library(ggfortify)
library(survival)
    datalung <- lung
    fitlung<- survfit(Surv(time,status) ~ sex,type = "kaplan-meier",data=datalung)
    autoplot(fitlung,conf.int=FALSE,pVal=TRUE,pX=800)+scale_color_grey()

enter image description here

在上面的例子中,性别1和2有不同的灰度,只有2组可以看到不同的组。

我使用的真实数据集有9个不同的组,很难看到具有此灰度的不同曲线。我无法使用颜色。我正在寻找的是将符号放入不同群组的方法,但我无法在autoplot中找到此参数。

surv.linetype有选项soliddashed,但它会更改所有具有相同模式的曲线,我不想要它。以lung数据为例,我想为性别1和性别2设置不同的linetype

2 个答案:

答案 0 :(得分:4)

查看功能代码通常可以帮助我找出可以和不可以改变的内容。您可以通过在控制台中运行autoplot.survfit来查看ggfortify:::autoplot.survfit的代码。

通过查看,您会看到只有color美学用于分组。我没有看到一个简单的方法来改变它,但你可以轻松地按照功能中的配方来制作自己的情节。虽然构建自己的绘图需要更多的步骤,但它为您提供了很大的灵活性。

例如,如果您想更改每个组的线条和点的形状,您可以fortify模型,然后构建图。

plot.data = fortify(fitlung, surv.connect = TRUE)

ggplot(plot.data, aes(time, surv, shape = strata)) +
    geom_step(aes(linetype = strata)) +
    geom_point(data = subset(plot.data, n.censor > 0)) +
    scale_y_continuous(labels = scales::percent)

请注意,我只知道6种线型;即使有更多,他们也难以区分。虽然形状更多,但形状并没有好多少。

答案 1 :(得分:0)

基于@aosmith的答案,您可以通过取消隐藏ggfortify::autoplot()并手动添加行来保留surv.linetype的某些功能。虽然,您必须明确指定标签,否则每个“ geom”都会获得自己的一组标签。

autoplot(fitlung, surv.linetype = 'blank',
                      conf.int=FALSE, pVal=TRUE, pX=800) +
geom_step(aes(linetype=strata) ) +
scale_linetype_manual(values = c('solid', 'dotted'), 
    labels = c('sex1', 'sex2') ) +
scale_color_manual(values = c('black', 'black'), 
     labels = c('sex1', 'sex2') )