The ggplot book is quite good, but be forewarned, there have been some
structural changes of late and some of the book code won't work quite
as is anymore: this document describes them (the changes, not the old
code) in some detail if you start hitting those sorts of things:
https://github.com/downloads/hadley/ggplot2/guide-col.pdf

Best of luck,

Michael

On Fri, Mar 23, 2012 at 2:15 PM, Paul Miller <pjmiller...@yahoo.com> wrote:
> Hi Michael and Petr,
>
> Apologize for my failure to grasp what you were saying. My code is up and 
> running now.
>
> Noticed what might be a shortcoming of my ggplot code. I have some instances 
> where a drug starts and stops and then starts and stops again. It looks like 
> my graphs show just a single unbroken line segment though.
> I ordered Hadley Wickham's ggplot2 book earlier today. So hopefully I'll be 
> able to figure that out myself once the book arrives.
>
> Thank you Michael, Petr, and Bert for your help with this. Thanks especially 
> to Michael for patiently answering all my questions over the last day or so.
>
> Paul
>
>
>
> --- On Fri, 3/23/12, R. Michael Weylandt <michael.weyla...@gmail.com> wrote:
>
>> From: R. Michael Weylandt <michael.weyla...@gmail.com>
>> Subject: Re: [R] Plotting patient drug timelines using ggplot2 (or some 
>> other means) -- Help!!!
>> To: "Paul Miller" <pjmiller...@yahoo.com>
>> Cc: "Petr PIKAL" <petr.pi...@precheza.cz>, r-help@r-project.org
>> Received: Friday, March 23, 2012, 9:37 AM
>> You didn't do what I said.....
>>
>> Once you make the list of data.frame()s "TempData", each
>> single
>> element is a data.frame and that is what you need to pass to
>> ggplot --
>> in the loop construct I set up, the individual data frame is
>> called
>> temp so you need to have ggplot(temp).
>>
>> As I said before,
>>
>>  ## Do all your stuff -- just change "TestData" to "temp" so
>> you are
>> using the right data.frame
>>
>> I'll be a little more direct this time:
>>
>> for(temp in TempData){
>>
>> png(filename = paste("plot", unique(temp$key_line), ".png",
>> sep = ""),
>> width=600, height=300)
>> p <- ggplot(temp, aes(value, drug)) + geom_line(size = 6)
>> +
>> xlab("Time") + ylab("") + theme_bw() +  opts(title =
>> paste("Pattern =
>> ", unique(temp$pattern), " \n (profile_key = ",
>> unique(temp$profile_key), ", line = ", unique(temp$line), ")
>> \n", sep
>> = "")) + opts(axis.text.x = theme_blank())
>> print(p)
>> dev.off()
>> }
>>
>> Michael
>>
>>
>> On Fri, Mar 23, 2012 at 10:22 AM, Paul Miller <pjmiller...@yahoo.com>
>> wrote:
>> > Hi Michael and Petr,
>> >
>> > You both seem to have hit on the idea of splitting the
>> TestData in order to do by group processing. Trouble is that
>> ggplot2 doesn't seem to like lists very much.
>> >
>> > When I run the code:
>> >
>> > TempData <- split(TestData, TestData$key_line)
>> > TempData
>> >
>> > for(temp in TempData){
>> >
>> > png(filename = paste("plot", unique(TempData$key_line),
>> ".png", sep = ""), width=600, height=300)
>> >
>> > ggplot(TempData, aes(value, drug)) + geom_line(size =
>> 6) + xlab("Time") + ylab("") + theme_bw() +
>> >                 opts(title = paste("Pattern =
>> ", unique(TempData$pattern), " \n (profile_key = ",
>> unique(TempData$profile_key), ", line = ",
>> unique(TempData$line), ") \n", sep = "")) +
>> >                     opts(axis.text.x =
>> theme_blank()  )
>> > dev.off()
>> >
>> > }
>> >
>> > I get the error message:
>> >
>> > "Error: ggplot2 doesn't know how to deal with data of
>> class list"
>> >
>> > Are there any other good ways of doing the looping?
>> Sorry to trouble you with this. If I had more time, I'd just
>> struggle with it for awhile and figure it out myself.
>> >
>> > I tried embedding my ggplot code into print() as Petr
>> suggested. I didn't think it would help but wanted to try
>> just in case. No dice -- ggplot just doesn't seem to like
>> lists.
>> >
>> > Thanks,
>> >
>> > Paul
>> >
>> >
>> >
>> > --- On Fri, 3/23/12, R. Michael Weylandt <michael.weyla...@gmail.com>
>> wrote:
>> >
>> >> From: R. Michael Weylandt <michael.weyla...@gmail.com>
>> >> Subject: Re: [R] Plotting patient drug timelines
>> using ggplot2 (or some other means) -- Help!!!
>> >> To: "Paul Miller" <pjmiller...@yahoo.com>
>> >> Cc: r-help@r-project.org
>> >> Received: Friday, March 23, 2012, 8:52 AM
>> >> Inline.
>> >>
>> >> On Fri, Mar 23, 2012 at 9:40 AM, Paul Miller <pjmiller...@yahoo.com>
>> >> wrote:
>> >> > Hi Michael,
>> >> >
>> >> > Added a little more to my code (see below). It
>> now
>> >> automatically sets the name of the file. It also
>> does a
>> >> better job of spacing the text for pattern and
>> patient x
>> >> line at the top of the graph.
>> >> >
>> >> > I really like the way this looks now. I just
>> need to
>> >> figure out how to loop through the data using my
>> "key_line"
>> >> (patient x line) variable.
>> >> >
>> >> > One of the things I've noticed while learning
>> R is that
>> >> things I think will be difficult often go
>> surprisingly well.
>> >> It's the things that I think will be easy that I
>> wind up
>> >> struggling with. Right now I'm struggling with
>> figuring out
>> >> how to loop through the data to produce plot11,
>> plot 12,
>> >> plot21, and plot22.
>> >> >
>> >> > Embarassing. But there it is.
>> >> >
>> >> > Can you show me how to do that? In the
>> meantime, I keep
>> >> working on it and may figure it out on my own.
>> >> >
>> >> > Thanks,
>> >> >
>> >> > Paul
>> >> >
>> >> >
>> >> > connection <- textConnection("
>> >> > 1/1/Drug A/ Begin (A), Begin (B), End (B),
>> End
>> >> (A)/0.0000/21.000
>> >> > 1/1/Drug B/ Begin (A), Begin (B), End (B),
>> End
>> >> (A)/0.7143/18.000
>> >> > 1/2/Drug A/ Begin (A, B, C), End (A, B), End
>> >> (C)/0.0000/20.000
>> >> > 1/2/Drug B/ Begin (A, B, C), End (A, B), End
>> >> (C)/0.0000/20.000
>> >> > 1/2/Drug C/ Begin (A, B, C), End (A, B), End
>> >> (C)/0.0000/36.000
>> >> > 2/1/Drug A/ Begin (A, B), End (A, B), Begin
>> (C), End
>> >> (C), Begin (D), End (D)/0.0000/7.429
>> >> > 2/1/Drug B/ Begin (A, B), End (A, B), Begin
>> (C), End
>> >> (C), Begin (D), End (D)/ 0.0000/7.429
>> >> > 2/1/Drug C/ Begin (A, B), End (A, B), Begin
>> (C), End
>> >> (C), Begin (D), End (D)/ 14.5714/21.857
>> >> > 2/1/Drug D/ Begin (A, B), End (A, B), Begin
>> (C), End
>> >> (C), Begin (D), End (D)/ 25.4286/231.286
>> >> > 2/2/Drug A/ Begin (A, B), End (A,
>> B)/0.0000/35.286
>> >> > 2/2/Drug B/ Begin (A, B), End (A,
>> B)/0.0000/35.286
>> >> > ")
>> >> >
>> >> > TestData <- data.frame(scan(connection,
>> >> list(profile_key=0, line=0, drug="", pattern="",
>> >> start_drug=0, stop_drug=0), sep="/"))
>> >> > TestData <- TestData[TestData$profile_key
>> == 1 &
>> >> TestData$line == 1,]
>> >> > TestData
>> >> >
>> >> > require(reshape)
>> >> > TestData <- melt(TestData, measure.vars =
>> >> c("start_drug", "stop_drug"))
>> >> > TestData$drug <- factor(TestData$drug,
>> levels =
>> >> c("Drug D", "Drug C", "Drug B", "Drug A"))
>> >> > TestData$key_line <-
>> >> with(TestData,paste(profile_key, line, sep = ""))
>> >> > TestData
>> >>
>> >> Useful trick: if you use dput() you can send this
>> all in a
>> >> much more
>> >> concise fashion:
>> >>
>> >> structure(list(profile_key = c(1, 1, 1, 1), line =
>> c(1, 1,
>> >> 1,
>> >> 1), drug = structure(c(4L, 3L, 4L, 3L), .Label =
>> c("Drug
>> >> D",
>> >> "Drug C", "Drug B", "Drug A"), class = "factor"),
>> pattern =
>> >> structure(c(4L,
>> >> 4L, 4L, 4L), .Label = c(" Begin (A, B, C), End (A,
>> B), End
>> >> (C)",
>> >> " Begin (A, B), End (A, B)", " Begin (A, B), End
>> (A, B),
>> >> Begin (C),
>> >> End (C), Begin (D), End (D)",
>> >> " Begin (A), Begin (B), End (B), End (A)"), class
>> =
>> >> "factor"),
>> >>     variable = structure(c(1L, 1L, 2L, 2L),
>> .Label
>> >> = c("start_drug",
>> >>     "stop_drug"), class = "factor"), value =
>> c(0,
>> >> 0.7143, 21,
>> >>     18), key_line = c("11", "11", "11", "11")),
>> >> .Names = c("profile_key",
>> >> "line", "drug", "pattern", "variable", "value",
>> "key_line"),
>> >> row.names = c(NA,
>> >> -4L), class = "data.frame")
>> >>
>> >>
>> >> >
>> >> > require(ggplot2)
>> >> >
>> >> > png(filename = paste("plot",
>> unique(TestData$key_line),
>> >> ".png", sep = ""), width=600, height=300)
>> >> >
>> >> > ggplot(TestData, aes(value, drug)) +
>> geom_line(size =
>> >> 6) + xlab("Time") + ylab("") + theme_bw() +
>> >> >                 opts(title =
>> paste("Pattern =
>> >> ", unique(TestData$pattern), " \n (profile_key =
>> ",
>> >> unique(TestData$profile_key), ", line = ",
>> >> unique(TestData$line), ") \n", sep = "")) +
>> >> >                     opts(axis.text.x
>> =
>> >> theme_blank()  )
>> >> >
>> >> > dev.off()
>> >> >
>> >> >
>> >>
>> >> If you want to loop over the different values of
>> "key_line",
>> >> I think
>> >> it's pretty easy:
>> >>
>> >> TempData <- split(TestData, TestData$keyline) #
>> List of
>> >> data frames
>> >>
>> >> for(temp in TempData){ # Loop over the list
>> >>
>> >> ## Do all your stuff -- just change "TestData" to
>> "temp" so
>> >> you are
>> >> using the right data.frame
>> >>
>> >>
>> >> }
>> >>
>> >> Hope this helps,
>> >>
>> >> Michael
>> >>
>>

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to