Hi Michael, Want to reverse the ordering of drugs on the y-axis. So tried scale_y_reverse() instead of scale_x_reverse(). Sure enough, the command exits. Unfortunately, it is "unsuitable for factors". I tried converting "drug" to character but this didn't work. Suspect scale_x_reverse() only works for something numeric which I don't think is helpful in my case. So changing "drug" to an ordered factor may make sense. I found some stuff online suggesting this approach.
The suggestion for setting the size of the image device directly was very helpful. My code now looks like: 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 == 2 & TestData$line == 1,] TestData require(reshape) TestData <- melt(TestData, measure.vars = c("start_drug", "stop_drug")) TestData TestData$drug <- factor(TestData$drug, levels = c("Drug D", "Drug C", "Drug B", "Drug A")) png(filename="plot21.png", width=600, height=300) ggplot(TestData, aes(value, drug)) + geom_line(size = 6) + xlab("") + ylab("") + theme_bw() + opts(title = "Pattern = Begin (A), Begin (B), End (B), End (A) \n (profile_key = 2, line = 1)") + opts(axis.text.x = theme_blank() ) dev.off() This produces a perfectly sized image. I imported the image created into Word and it looks like I would get 3 images per page. As far as the text at the top of the graphs goes, I have 4 patient x line combinations in my data (at least before I filter to get a single patient by line combination). So the text at the top of each graph (without any filtering) would be as follows: Pattern = Begin (A), Begin (B), End (B), End (A) (profile_key = 1, line = 1) Pattern = Begin (A, B, C), End (A, B), End (C) (profile_key = 1, line = 2) Pattern = Begin (A, B), End (A, B), Begin (C), End (C), Begin (D), End (D) (profile_key = 2, line = 1) Pattern = Begin (A, B), End (A, B) (profile_key = 2, line = 2) As far as I know, there's nothing like this online. I hope this makes it clear though. The last part would be looping. I think I could figure out how to do this using a for loop or some other means if I can get one of the graphs set up correctly. The graphs themselves might be called something like plot11, plot12, plot21, and plot22. Thanks, Paul --- On Thu, 3/22/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: Thursday, March 22, 2012, 4:11 PM > On Thu, Mar 22, 2012 at 4:47 PM, Paul > Miller <pjmiller...@yahoo.com> > wrote: > > Hi Michael, > > > > Made some progress but not there yet. > > > > Got point #1 by creating an ordered factor. There > doesn't appear to be a command called Scale_x_flip(). > > > > Sorry, my mistake: I meant scale_x_reverse() ... > > > Still not sure how to decrease vertical space between > the line segments for each drug. Thought this would be > necessary in order to get a fair number of graphs onto a > page in Word or in a pdf (say 4-5). I had imagined creating > graphs that would be wider than they are tall in order to > accomplish this. > > You can set the size of the image device directly, e.g., > png(...., > width = 400, height = 200) and then make your plots one per > image, > closing the device with dev.off() when you're done. I think > getting > multiple plots per page (without facetting) won't be super > easy and > requires a few tricks with grid tools; someone might know > better. > > I know pdf() supports multiple pages if you plot multiple > graphs and > don't close the device between, but I'm not sure that's > doable with > the other ones. > > > > > Removed numbering from the x-axis using > "opts(axis.text.x = theme_blank()". This is slightly > different from the "opts(axis.ticks.x = theme_blank())" that > you suggested. Having axis.ticks.x made it a lot easier to > figure out I needed axis.text.x though. > > > > Got the text for pattern at the top (point #4). > > > > Still struggling with the text for patient and line > (point #5). Managed to at least add some text manually to > show what the text would look like for one of the graphs. > > I'm not sure what you are looking for here -- is there an > image online > you can point me too? > > > > > Not sure how to get a separate graph for each patient x > line combination. Discovered facets earlier today. Think > this will just give me one giant graph though that contains > graph for each patient x line combination. > > This isn't so bad but it's not clear how one could > print it and have the graphs break properly across pages. > > > > As described above, you probably want to make multiple files > by > looping over your data and selecting subsets. I know Bert > pointed you > to xyplot in lattice graphics -- if you get that working, I > believe it > has some natural support for multi-page graphics but I don't > know the > package so well. > > > If you can provide any additional help, that's great. > If not that's OK too. As I said earlier, there's a big time > crunch around this. If I can't figure it out today, then > we'll just move forward without it. Then I can figure out > how to do it later for my own edification and at my own > leisure. Chances are that will be a lot more fun than trying > to learn under intense time pressure. > > > > 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 == 2 & > TestData$line == 1,] > > TestData > > > > require(reshape) > > TestData <- melt(TestData, measure.vars = > c("start_drug", "stop_drug")) > > TestData > > > > TestData$drug <- factor(TestData$drug, levels = > c("Drug D", "Drug C", "Drug B", "Drug A")) > > > > ggplot(TestData, aes(value, drug)) + geom_line(size = > 6) + xlab("") + ylab("") + theme_bw() + > > opts(title = "Pattern = Begin > (A), Begin (B), End (B), End (A) \n (profile_key = 2, line = > 1)") + > > opts(axis.text.x = > theme_blank() ) > > > > > > > > --- On Thu, 3/22/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: Thursday, March 22, 2012, 12:55 PM > >> Inline: > >> > >> On Thu, Mar 22, 2012 at 1:41 PM, Paul Miller <pjmiller...@yahoo.com> > >> wrote: > >> > Hello All, > >> > > >> > Want very much to learn how to plot patient > drug > >> timelines. Trouble is I need to figure out how to > do this > >> today. So not much time for me to struggle with it. > Hoping > >> someone can just help me out a bit. > >> > > >> > Below are some sample data and code that > produces what > >> I think is the beginning of a very nice graph. > >> > > >> > Need to alter the code to: > >> > > >> > 1. Get the lines for the drugs to appear on > the y-axis > >> in the order that they appear in the data. > >> > >> Scale_x_flip() > >> > >> > > >> > 2. Decrease the vertical space between the > line > >> segments for each drug so they are fairly close to > one > >> another. > >> > >> Why? This will happen automatically if needed.... > >> > >> > > >> > 3. Remove the numbering from the x-axis. > >> > >> opts(axis.ticks.x = theme_blank()) > >> > >> > > >> > 4. Put the text for pattern above the graph > (e.g., > >> "Begin (A), Begin (B), End (B), End (A)"), either > centered > >> or left aligned. > >> > >> > >> opts(title = "Begin (A), Begin (B), End (B), End > (A)") > >> > >> > > >> > 5. Put the patient and line information below > the text > >> for pattern (e.g., "profile_key = 1, line = 1") > >> > >> example(geom_text) > >> or > >> https://learnr.wordpress.com/2010/01/03/directlabels-adding-direct-labels-to-ggplot2-and-lattice-plots/ > >> > >> > > >> > 6. Output a separate graph for each patient > and line of > >> treatent. > >> > > >> > Ultimately, I want to combine all the graphs > into a > >> single Word document. Or perhaps better yet, to > create a pdf > >> using LaTeX. > >> > >> Google Sweave or (possibly easier) knitr > >> > >> > > >> > I'm going to continue to try and fugure this > out as > >> best I can. Any help with it will be greatly > appreciated > >> though. > >> > > >> > 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 > == 2 & > >> TestData$line == 1,] > >> > TestData > >> > > >> > require(reshape) > >> > TestData <- melt(TestData, measure.vars = > >> c("start_drug", "stop_drug")) > >> > TestData > >> > > >> > ggplot(TestData, aes(value, drug)) + > geom_line(size = > >> 6) + xlab("") + ylab("") + theme_bw() > >> > >> It would be easier if you could use dput() but this > was > >> helpfully reproducible. > >> > >> Hope this gets you started, > >> > >> Michael > >> > >> > ggsave(file = "plot21.pdf") > >> > > >> > > ______________________________________________ > >> > 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. > >> > ______________________________________________ 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.