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.

Reply via email to