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

Kasper Daniel Hansen kasperdanielhansen at gmail.com
Mon Apr 16 22:43:15 CEST 2012

```On Mon, Apr 16, 2012 at 4:29 PM, baptiste auguie
> Hi,
>
> Using range wouldn't help if you wanted to restrict one of the limits,
> not stretch it
>
> plot(1:11, y <- seq(-5, 5), ylim= range(0, y))

range(pmin(0,y))

Kasper

>
> baptiste
>
> On 17 April 2012 08:20, Greg Snow <538280 at gmail.com> wrote:
>> 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
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

```