[R] How to use the function "plot" as Matlab?

Robin Hankin r.hankin at noc.soton.ac.uk
Wed Jul 13 10:33:42 CEST 2005


Hi

Ted makes a good point... matlab can dynamically rescale a plot in  
response
to plot(...,add=TRUE) statements.

For some reason which I do not understand, the rescaling issue is  
only a problem
for me when working in "matlab mode".  It's not an issue when working  
in "R mode"

Ted pointed out that the following does not behave as intended:


>   x = 0.1*(0:20);
>   plot(x,sin(x))
>   lines(x,1.5*cos(x))


and presented an alternative method in which ylim was set by hand.  I  
would suggest:

x <- 0.1*(0:20)
y1 <- sin(x)
y2 <- 1.5*cos(x)

plot(c(x,x),c(y1,y2),type="n")
lines(x,y1)
lines(x,y2)

because this way, the axes are set by the plot() statement, but  
nothing is plotted.


best wishes

rksh





On 13 Jul 2005, at 09:12, (Ted Harding) wrote:
>>
>
> Although this is an over-worked query -- for which an answer, given
> that t="l" has been specified, is to use
>
>   plot(a,t="l",col="blue",ylim=c(0,10))
>   lines(b,t="l",col="red")
>
> there is a more interesting issue associated with it (given that
> Klebyn has come to it from a Matlab perspective).
>
> It's a long time since I used real Matlab, but I'll illustrate
> with octave which, in this respect, should be identical to Matlab.
>
> Octave:
>
> octave:1> x = 0.1*(0:20);
> octave:2> plot(x,sin(x))
>
> produces a graph of sin(x) with the y-axis scaled from 0 to 1.0
> Next:
>
> octave:3> hold on
> octave:4> plot(x,1.5*cos(x))
>
> superimposes a graph of 1.5*cos(x) with the y-axis automatically
> re-scaled from -1 to 1.5.
>
> This would not have happened in R with
>
>   x = 0.1*(0:20);
>   plot(x,sin(x))
>   lines(x,1.5*cos(x))
>
> where the 0 to 1.0 scaling of the first plot would be kept for
> the second, in which therefore part of the additional graph of
> 1.5*cos(x) would be "outside the box".
>
> No doubt like many others, I've been caught on the wrong foot
> by this more than a few times. The solution, of course (as
> illustrated in the reply to Klebyn above) is to anticipate
> what scaling you will need for all the graphs you intend to
> put on the same plot, and set up the scalings at the time
> of the first one using the options "xlim" and "ylim", e.g.:
>
>   x = 0.1*(0:20);
>   plot(x,sin(x),ylim=c(-1,1.5))
>   lines(x,1.5*cos(x))
>
> This is not always feasible, and indeed should not be expected
> to be feasible since part of the reason for using software
> like R in the first place is to compute what you do not know!
>
> Indeed, R will not allow you to use "xlim" or "ylim" once the
> first plot has been drawn.
>
> So in such cases I end up making a note (either on paper or,
> when I do really serious planning, in auxiliary variables)
> of the min's and max's for each graph, and then re-run the
> plotting commands with appropriate "xlim" and "ylim" scaling
> set up in the first plot so as to include all the subsequent
> graphs in entirety. (Even this strategy can be defeated if
> the succesive graphs represent simulations of long-tailed
> distributions. Unless of course I'm sufficiently alert to
> set the RNG seed first as well ... )
>
> I'm not sufficiently acquainted with the internals of "plot"
> and friends to anticipate the answer to this question; but,
> anyway, the question is:
>
>   Is it feasible to include, as a parameter to "plot", "lines"
>   and "points",
>
>     rescale=FALSE
>
>   where this default value would maintain the existing behaviour
>   of these functions, while setting
>
>     rescale=TRUE
>
>   would allow each succeeding plot, adding graphs using "points"
>   or "lines", to be rescaled (as in Matlab/Octave) so as to
>   include the entirety of each successive graph?
>
> Best wishes to all,
> Ted.
>
>
> --------------------------------------------------------------------
> E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
> Fax-to-email: +44 (0)870 094 0861
> Date: 13-Jul-05                                       Time: 09:12:34
> ------------------------------ XFMail ------------------------------
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting- 
> guide.html
>

--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
  tel  023-8059-7743




More information about the R-help mailing list