# [Rd] I wish xlim=c(0, NA) would work. How about I send you a patch?

Greg Snow 538280 at gmail.com
Mon Apr 16 22:20:17 CEST 2012

```The simple work around is to use the range function, if you use
something like:  xlim=range(0,x) then 0 will be included in the range
of the x axis (and if there are values less than 0 then those values
will be included as well) and the max is computed from the data as
usual.  The range function will also accept multiple vectors and make
the range big enough to include all of them on the plot (this is what
I use when I will be adding additional information using points or
lines).

With this functionality in range I don't really see much need for the
proposed change, maybe an example on the plot help page to show this
would suffice.

On Mon, Apr 16, 2012 at 11:52 AM, Paul Johnson <pauljohn32 at gmail.com> wrote:
> I'm looking for an R mentor.  I want to propose a change in management
> of plot options xlim and ylim.
>
> Did you ever want to change one coordinate in xlim or ylim? It happens
> to me all the time.
>
> x <- rnorm(100, m=5, s=1)
> y <- rnorm(100, m=6, s=1)
> plot(x,y)
>
> ## Oh, I want the "y axis" to show above x=0.
>
> plot(x,y, xlim=c(0, ))
>
> ##Output: Error in c(0, ) : argument 2 is empty
>
>  plot(x,y, xlim=c(0,NA ))
> ## Output: Error in plot.window(...) : need finite 'xlim' values
>
>
> I wish that plot would let me supply just the min (or max) and then
> calculate the other value where needed.
> It is a little bit tedious for the user to do that for herself.  The
> user must be knowledgeable enough to know where the maximum (MAX) is
> supposed to be, and then supply xlim=c(0, MAX). I can't see any reason
> for insisting users have that deeper understanding of how R calculates
> ranges for plots.
>
> Suppose the user is allowed to supply NA to signal R should fill in the blanks.
>
> plot(x,y, xlim=c(0, NA))
>
>
> In plot.default now, I find this code to manage xlim
>
>   xlim <- if (is.null(xlim))
>        range(xy\$x[is.finite(xy\$x)])
>
> And I would change it to be something like
>   ##get default range
>   nxlim <- range(xy\$x[is.finite(xy\$x)])
>
>   ## if xlim is NULL, so same as current
>    xlim <- if (is.null(xlim)) nxlim
> ## Otherwise, replace NAs in xlim with values from nxlim
>    else xlim[ is.na(xlim) ] <- nxlim[ is.na(xlim) ]
>
>
> Who is the responsible party for plot.default.  How about it?
>
> Think of how much happier users would be!
>
> pj
> --
> Paul E. Johnson
> Professor, Political Science    Assoc. Director
> 1541 Lilac Lane, Room 504     Center for Research Methods
> University of Kansas               University of Kansas
> http://pj.freefaculty.org            http://quant.ku.edu
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

--
Gregory (Greg) L. Snow Ph.D.
538280 at gmail.com

```