Thank you! On Wed, Oct 13, 2021 at 12:00 PM Deepayan Sarkar <deepayan.sar...@gmail.com> wrote: > > On Wed, Oct 13, 2021 at 12:13 PM Luigi Marongiu > <marongiu.lu...@gmail.com> wrote: > > > > I have seen that the only package that easily rotate the plot is > > ggplot, so I ran: > > ``` > > library(ggplot2) > > df = data.frame(MR = c(negative_mr, uncertain_mr, positive_mr), > > FCN = c(negative_fcn, uncertain_fcn, positive_fcn)) > > p <- ggplot(df, aes(x=MR)) + > > geom_density() > > p + coord_flip() > > ``` > > Even in this case, the plot is correctly rotated, but I can't place it > > in the allocated panel. ggplot2 simply overwrites the whole plot. This > > means I need to do the whole thing in ggplot2 (would lattice have an > > equivalent?) and split the plot into uneven panels with ggplot2. > > Changing x into y is a clever approach, but it is not the same as > > rotating a plot. But YES, that is exactly what I wanted to plot. Thank > > you! > > Well, traditional R graphics (as well as lattice) requires a more DIY > approach. As Paul already indicated, you need to control what you are > plotting instead of relying on plot(density(...)) doing the right > thing. > > Modifying your original code: > > ``` > layout(matrix(c(1,2),nrow=1), widths=c(3,1)) # split panels unevenly > > plot(negative_x, negative_y, ylim=c(0,0.5), xlim=c(0,41), cex=1.5, > xlab=expression(bold("X")), > ylab=expression(bold("Y"))) > points(positive_x, positive_y, pch=16, cex=1.5) > points(uncertain_x, uncertain_y, pch=16, cex=1.5, col="grey") > legend("topleft", > legend = c("Positives", "Negatives", "Uncertains"), > pch = c(16, 1, 16), col=c("black", "black", "grey"), cex=0.8) > > ## calculate density (but don't plot yet) > d <- density(c(negative_y, uncertain_y, positive_y)) > > ## Your original code is equivalent to this > ## plot(d, > ## yaxt="n", xaxt="n", main=NA, ylab=NA, xlab=NA) > > plot(d$y, d$x, type = "l", > ##yaxt="n", > xaxt="n", main=NA, ylab=NA, xlab=NA) > ``` > > Note that in the last plot, I have plot(d$y, d$x, ...) instead of > plot(d$x, d$y, ...). > > I have commented out your yaxt="n" to highlight something that may not > be initially obvious, which is that the axis limits of your two plots > do not match. To ensure that, you would additionally need to match > ylim: > > ``` > plot(d$y, d$x, type = "l", ylim=c(0,0.5), > yaxt="n", xaxt="n", main=NA, ylab=NA, xlab=NA) > ``` > > Best, > -Deepayan > > > On Wed, Oct 13, 2021 at 1:17 AM Bert Gunter <bgunter.4...@gmail.com> wrote: > > > > > > I don't know the gridGraphics package, and I haven't looked closely at > > > what you are trying to do. But note that lattice functions construct grid > > > "grobs" that can be saved and plotted in arbitrary, including rotated, > > > viewports, using the print.trellis function. I frankly am pretty ignorant > > > about such things, but this simple little example might give you some > > > notion of how to proceed. You may also be able to do what you want with > > > grid.layout() and pushing a suitably rotated viewport onto a layout. > > > Others would have to advise on such details, if so. > > > > > > If I'm wrong and this is useless, just ignore without comment. > > > > > > > > > > > > dp <- densityplot(~y, main = "", > > > xlab = "", ylab = "") > > > grid.newpage() > > > pushViewport( > > > viewport(width = unit(.5,"npc"), > > > height = unit(.3,"npc"), > > > angle = 270)) > > > print(dp, newp = FALSE, ## this is the print.trellis method > > > panel.width = list(1,"npc"), > > > panel.height = list(1, "npc") > > > ) > > > > > > Bert Gunter > > > > > > "The trouble with having an open mind is that people keep coming along > > > and sticking things into it." > > > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > > > > > > > > On Tue, Oct 12, 2021 at 1:43 PM Luigi Marongiu <marongiu.lu...@gmail.com> > > > wrote: > > >> > > >> Hello, > > >> I would like to show a density plot of the Y axis. To do that, I would > > >> like to split the plot into a panel 2/3 long and a density plot 1/3 > > >> long. The problem is that, since the density is on the Y axis, the > > >> density plot should be rotated byb90 degrees. I tried with the package > > >> gridGraphics but it rotates both panels. > > >> ``` > > >> negative_y <- runif(50, 0, 0.099) > > >> negative_x <- runif(50, 1, 40) > > >> positive_y <- c(runif(30, 0.2, 0.5), runif(20, 0.4, 0.5)) > > >> positive_x <- c(runif(30, 25, 40), runif(20, 10, 25)) > > >> uncertain_y <- runif(10, 0.099, 0.2) > > >> uncertain_x <- runif(10, 2, 40) > > >> # plot on MR/FCN space > > >> layout(matrix(c(1,2),nrow=1), widths=c(3,1)) # split panels unevenly > > >> plot(negative_x, negative_y, ylim=c(0,0.5), xlim=c(0,41), cex=1.5, > > >> xlab=expression(bold("X")), > > >> ylab=expression(bold("Y"))) > > >> points(positive_x, positive_y, pch=16, cex=1.5) > > >> points(uncertain_x, uncertain_y, pch=16, cex=1.5, col="grey") > > >> legend("topleft", > > >> legend = c("Positives", "Negatives", "Uncertains"), > > >> pch = c(16, 1, 16), col=c("black", "black", "grey"), cex=0.8) > > >> # plot density > > >> plot(density(c(negative_y, uncertain_y, positive_y)), > > >> yaxt="n", xaxt="n", main=NA, ylab=NA, xlab=NA) > > >> library(gridGraphics) > > >> grab_grob <- function(){ > > >> grid.echo() > > >> grid.grab() > > >> } > > >> g <- grab_grob() > > >> grid.newpage() > > >> pushViewport(viewport(width=0.7,angle=270)) > > >> grid.draw(g) > > >> ``` > > >> How can I rotate only the second panel? I tried to assign the second > > >> plot to an object p and then call grid.draw(p), or to assign g to the > > >> second plot, but they did not work... > > >> Thanks > > >> > > >> > > >> -- > > >> Best regards, > > >> Luigi > > >> > > >> ______________________________________________ > > >> R-help@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. > > > > > > > > -- > > Best regards, > > Luigi > > > > ______________________________________________ > > R-help@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.
-- Best regards, Luigi ______________________________________________ R-help@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.