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.