[R] About plot graphs
Gavin Simpson
gavin.simpson at ucl.ac.uk
Fri Aug 27 11:38:40 CEST 2010
On Fri, 2010-08-27 at 02:05 -0700, Stephen Liu wrote:
> Hi Gavin,
>
> Thanks for your advice which works for me.
>
>
> (rectangular window)
> dev.new(height = 6, width = 12)
> layout(matrix(1:2, nrow=1))
> plot(Test01$Day_of_year, Test01$Draft_No.)
> attach(Test01)
> plot(Day_of_year,Draft_No.)
1) I can't reproduce this; where/what is Test01? But don;t bother
sending, see my example below
2) Don't attach() things, you are asking for trouble
If a function has a formula method (which plot does) then use it like
this: plot(Draft_No. ~ Day_of_year, data = Test01)
If the function doesn't have a formula method, then wrap it in a with()
call:
with(Test01, plot(Day_of_year, Draft_No.))
No need for attach.
>
> (rectangular window in vertical position)
> dev.new(height = 12, width = 4)
> layout(matrix(1:2, nrow=2))
> plot(Test01$Day_of_year, Test01$Draft_No.)
> plot(Day_of_year,Draft_No.)
>
> (height = 12, width = 6) can't work. The graphs plotted are distorted off
> square shape. I must reduce "width = 4"
>
> Why? TIA
Because you don't appreciate that the dimensions of the device are not
the same as the dimensions of the plotting region *on* the device. Most
notably, the margins on the device are given by par("mar") for example
and are not square:
> par("mar")
[1] 5.1 4.1 4.1 2.1
So more space is set aside on the bottom then anywhere else, and the
margin on the right is quite small.
You have already been provided with an answer that you dismissed because
you didn't appear to appreciate what you were being told.
Compare this:
dev.new(height = 6, width = 12)
layout(matrix(1:2, ncol = 2))
plot(runif(100), rnorm(100))
plot(runif(100), rnorm(100), col = "red")
layout(1)
with this:
dev.new(height = 6, width = 12)
layout(matrix(1:2, ncol = 2))
op <- par(pty = "s") ## this is the important bit
plot(runif(100), rnorm(100))
plot(runif(100), rnorm(100), col = "red")
par(op) ## now reset the pars
layout(1)
So now the regions are square, we have the asymmetric margins like all R
plots and we have drawn this on a device that has ~ appropriate
dimensions.
If you want to fiddle more with this, then you'll need to make the
margins equal, but you don't want to do that really as you need more
space in certain areas to accommodate axis labels and tick labels etc.
For the vertical one, this works for me, though note that because of the
margins, pty = "s" is making the individual plotting regions smaller to
respect the square plotting region you asked for.
dev.new(height = 12, width = 6)
layout(matrix(1:2, ncol = 1))
op <- par(pty = "s") ## this is the important bit
plot(runif(100), rnorm(100))
plot(runif(100), rnorm(100), col = "red")
par(op) ## now reset the pars
layout(1)
This is because you have 5.1 plus 4.1 lines of margin in the vertical
direction per plot (so 18.4 lines in total) versus 4.1 + 2.1 = 6.2 lines
of margin in the horizontal direction. So to make the plots square, the
horizontal direction is restricted. If we take a bit of space out of the
top/bottom margins, things improve (note I reduce the height as it
doesn't fit properly on my monitor):
dev.new(height = 10, width = 5)
layout(matrix(1:2, ncol = 1))
op <- par(pty = "s", mar = c(4,4,3,2) + 0.1)
plot(runif(100), rnorm(100))
plot(runif(100), rnorm(100), col = "red")
par(op) ## now reset the pars
layout(1)
So as we reduce the vertical space required for margins, the square
panels start to occupy more and more of the total device.
Finally, notice how I provided examples that *you*, *me* and *anyone*
else on the list can use to test behaviour/point out problems. Ths is
what we call a reproducible example. If you want help without going
round the houses (lots of dead ends), specifying an example like I did
(your problem is not with *your* data but with using the R functions, so
who cares what the data are?) above allows us very quickly to home in on
the problem you have.
> Looked at ?dev.new
> can't resolve.
>
> Whether use another command such as;
> dev.cur()
> dev.list()
> dev.next(which = dev.cur())
> dev.prev(which = dev.cur())
> dev.off(which = dev.cur())
> dev.set(which = dev.next())
> graphics.off()
> ?
If you had read ?dev.new (and understood it), you would know that those
commands you list can't possibly help.
HTH
G
>
>
> B.R.
> Stephen L
>
>
>
>
> ----- Original Message ----
> From: Gavin Simpson <gavin.simpson at ucl.ac.uk>
> To: Stephen Liu <satimis at yahoo.com>
> Cc: "r-help at r-project.org" <r-help at r-project.org>
> Sent: Fri, August 27, 2010 4:21:13 PM
> Subject: Re: [R] About plot graphs
>
> On Thu, 2010-08-26 at 21:01 -0700, Stephen Liu wrote:
> > Hi Greg,
> <snip />
> > > windows(width=12, height=6)
> > Error: could not find function "windows"
>
> So you aren't on Windows then... Hence why the posting guide asks for
> sessionInfo() details; sometimes it matters.
>
> Anyway, a OS independent way of doing this is to use dev.new() and pass
> along the arguments you would have provided to the device via e.g.
> windows():
>
> dev.new(height = 6, width = 12)
>
> HTH
>
> G
>
> >
> > > ?windows
> > No documentation for 'windows' in specified packages and libraries:
> > you could try '??windows'
> >
> >
> > > window(width=12, height=6)
> > Error in hasTsp(x) :
> > element 1 is empty;
> > the part of the args list of 'attr' being evaluated was:
> > (x, "tsp")
> >
> >
> > > ?window
> > window {stats}
> > http://stat.ethz.ch/R-manual/R-devel/library/stats/html/window.html
> >
> > window package:stats R Documentation
> >
> > Time Windows
> >
> > Description:
> >
> > ‘window’ is a generic function which extracts the subset of the
> > object ‘x’ observed between the times ‘start’ and ‘end’. If a
> > frequency is specified, the series is then re-sampled at the new
> > frequency.
> >
> >
> > > window(layout(matrix(1:2, nrow=1), width=12, height=6))
> > [1] 2
> > attr(,"tsp")
> > [1] 1 1 1
> >
> >
> > Still pop up a square window
> >
> >
> > B.R
> > Stephen L
> >
> >
> >
> >
> >
> > ----- Original Message ----
> > From: Greg Snow <Greg.Snow at imail.org>
> > To: Stephen Liu <satimis at yahoo.com>; "r-help at r-project.org"
> > <r-help at r-project.org>
> > Sent: Fri, August 27, 2010 10:51:21 AM
> > Subject: RE: [R] About plot graphs
> >
> > When you run any graphics command (layout in this case) and there is not a
> > current graphics device (more technically only the null device) then a default
>
> > graphics device is opened, that is what you are seeing. What you need to do
> > instead is open the device yourself before calling layout. Which device that
> >is
> >
> > depends greatly on information that the posting guide strongly suggests that
> >you
> >
> > provide (another hint).
> >
> > One possibility is:
> >
> > > windows(width=12, height=6)
> >
> > Followed by layout and the plotting commands. But whether that will work on
> > your machine or not is still a bit of a mystery.
> >
> > --
> > Gregory (Greg) L. Snow Ph.D.
> > Statistical Data Center
> > Intermountain Healthcare
> > greg.snow at imail.org
> > 801.408.8111
> >
> >
> > > -----Original Message-----
> > > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> > > project.org] On Behalf Of Stephen Liu
> > > Sent: Thursday, August 26, 2010 8:02 PM
> > > To: r-help at r-project.org
> > > Subject: Re: [R] About plot graphs
> > >
> > > Hi Greg,
> > >
> > > Thanks for your advice.
> > >
> > > I'm not prepared altering the shape of the graphs to be plotted. What
> > > I'm
> > > trying to do is to pop up a rectangle layout window with following
> > > command.
> > >
> > > The command;
> > > layout(matrix(1:2, nrow=1))
> > >
> > > pop up a square window. What I need is a rectangular window for the
> > > graphs to
> > > be plotted. Otherwise the graphs are squeezed changing shape.
> > >
> > > I looked at ?layout but can't resolve how to make it. Can you help?
> > > TIA
> > >
> > > B.R.
> > > Stephen L
> > >
> > >
> > >
> > >
> > > ----- Original Message ----
> > > From: Greg Snow <Greg.Snow at imail.org>
> > > To: Stephen Liu <satimis at yahoo.com>; "r-help at r-project.org"
> > > <r-help at r-project.org>
> > > Sent: Fri, August 27, 2010 9:00:01 AM
> > > Subject: RE: [R] About plot graphs
> > >
> > > There is a graphical parameter that controls whether a plot is square
> > > or takes
> > > up the maximum amount of room (rectangle), see ?par and look at the
> > > entry for
> > > pty.
> > >
> > >
> > > It is possible that you set pty='s' or it may be that the plot method
> > > sets it,
> > > without us knowing what type of object Date and Test01$Date are we
> > > don't know
> > > which method is creating your plot and cannot be much more help (that
> > > is meant
> > > as a subtle hint to provide the information requested in the footer of
> > > every
> > > post and the posting guide).
> > >
> > > Some methods may set pty='s' as default but have an option to change
> > > it.
> > >
> > > --
> > > Gregory (Greg) L. Snow Ph.D.
> > > Statistical Data Center
> > > Intermountain Healthcare
> > > greg.snow at imail.org
> > > 801.408.8111
> > >
> > >
> > > > -----Original Message-----
> > > > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> > > > project.org] On Behalf Of Stephen Liu
> > > > Sent: Thursday, August 26, 2010 8:45 AM
> > > > To: r-help at r-project.org
> > > > Subject: [R] About plot graphs
> > > >
> > > > Hi folks,
> > > >
> > > > Following command prints 2 graphs side-by-side:-
> > > > layout(matrix(1:2, nrow=1))
> > > > plot(Date,Input_No.)
> > > > plot(Test01$Date, Test01$Input_No.)
> > > >
> > > > However each is a square graph I need a rectangular layout. Pls
> > > advise
> > > > how to
> > > > make it. TIA
> > > >
> > > > B.R.
> > > > satimis
> > > >
> > > >
> > > >
> > > >
> > > > ______________________________________________
> > > > R-help at 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 at 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 at 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.
>
--
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
Dr. Gavin Simpson [t] +44 (0)20 7679 0522
ECRC, UCL Geography, [f] +44 (0)20 7679 0565
Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk
Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/
UK. WC1E 6BT. [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
More information about the R-help
mailing list