Hi John, Brilliant solution and the best sort - when you finally solve your problem by yourself. Jim
On Thu, Oct 1, 2020 at 2:52 AM array chip <arrayprofile at yahoo.com> wrote:
Hi Jim,
I found out why clip() does not work with lines(survfit.object)!
If you look at code of function survival:::lines.survfit, in th middle of the code:
do.clip <- getOption("plot.survfit")
if (!is.null(xx <- do.clip$plotclip))
clip(xx[1], xx[2], xx[3], xx[4])
This will reset the clipping to the defualt plot region!
So I just comment out the last 2 lines of the above 3 lines, and created a customized lines2 function. Now it works!
It's fun to learn clip().
Thanks,
John
On Wednesday, September 30, 2020, 01:47:55 AM PDT, Jim Lemon <drjimlemon at gmail.com> wrote:
Hi John,
Hmmm, this works:
plot(1:10)
xylim<-par("usr")
clip(5,xylim[2],xylim[3],xylim[4])
lines(10:1)
so I suspect that there is a "lines" method that resets the clipping
region out of sight. Fortunately Mark Schwartz provided a way to get
your plot so I will give the wall against which I have been banging my
head a break.
Jim
On Wed, Sep 30, 2020 at 1:57 PM array chip <arrayprofile at yahoo.com> wrote:
Jim,
I tried a few things, I found that clip() works if I just do some regular graphing tasks. But as long as I run lines(fit) with "fit" object is a survfit object, this would reset to default plot region. See the ovarian example below:
library(survival)
ovarian1<-ovarian
ovarian1$fustat[ovarian$futime>450]<-0
ovarian1$futime[ovarian$futime>450]<-450
ovarian2<-subset(ovarian,futime>450)
fit1 <- survfit(Surv(futime, fustat) ~ rx, data = ovarian1)
fit2 <- survfit(Surv(futime, fustat) ~ rx, data = ovarian2)
plot(fit1, xlim=c(0,1200), col = 1:2)
abline(v=450)
xylim<-par("usr")
points(-1,-1)
clip(450,xylim[2],xylim[3],xylim[4])
abline(h=0.5,col=2) ### YES, clipping() works!
lines(fit2, col = 3:4,lty=2) ### clipping does not work! reset to default plot region
abline(h=0.4,col=2) ### NO, clipping() does not work!
So disappointed with this, otherwise this would be such a simple method to do what I want.
Thanks,
John
On Tuesday, September 29, 2020, 07:58:53 PM PDT, Jim Lemon <drjimlemon at gmail.com> wrote:
Hi John,
I should have remembered this. For some reason, the clip() function
doesn't operate until you have issued a graphics command. Try:
points(-1,-1)
before calling lines()
Jim
On Wed, Sep 30, 2020 at 12:26 PM array chip <arrayprofile at yahoo.com> wrote:
Hi Jim,
I tried the clip() function below, surprisingly it did not work! I read the R help file and feel your script should work. To have a workable example, I used the ovarian dataset in the survival package as an example:
ovarian1<-ovarian
ovarian1$fustat[ovarian$futime>450]<-0
ovarian1$futime[ovarian$futime>450]<-450
ovarian2<-subset(ovarian,futime>450)
fit1 <- survfit(Surv(futime, fustat) ~ rx, data = ovarian1)
fit2 <- survfit(Surv(futime, fustat) ~ rx, data = ovarian2)
plot(fit1, xlim=c(0,1200), col = 1:2)
abline(v=450)
xylim<-par("usr")
clip(450,xylim[2],xylim[3],xylim[4])
lines(fit2, col = 3:4,lty=2)
I can still see that the extra horizontal line on the top.
Can you or anyone have any suggestion what went wrong?
Thanks,
John
On Tuesday, September 29, 2020, 01:35:48 AM PDT, Jim Lemon <drjimlemon at gmail.com> wrote:
Hi John,
Perhaps the most direct way would be:
plot(fit1, col=1:2)
xylim<-par("usr")
clip(4,xylim[2],xylim[3],xylim[4])
lines(fit2,col=1:2)
Remember that the new clipping rectangle will persist until you or
something else resets it.
Jim
On Tue, Sep 29, 2020 at 10:34 AM array chip via R-help
<r-help at r-project.org> wrote:
Hello, Can anyone suggest a simple way to generate a Kaplan-Meier plot with 2 survfit objects, just like this one: https://drive.google.com/file/d/1fEcpdIdE2xYtA6LBQN9ck3JkL6-goabX/view?usp=sharing Suppose I have 2 survfit objects: fit1 is for the curve on the left (survtime has been truncated to the cutoff line: year 5), fit2 is for the curve on the right (minimum survival time is at the cutoff line: year 5), but if I do the following: plot(fit1, col=1:2) lines(fit2,col=1:2) Then I will have an horizontal line on the top that connect from 0 to 4 years, which I do not want that to be drawn (see blue arrow below): https://drive.google.com/file/d/178mQGlhnaOg9PA-oE-W_W5CtrGD03ljH/view?usp=sharing Can anyone have a strategy to make this kind of plot happen? Thanks, John
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.