From: Dan Bolser <dmb_at_mrc-dunn.cam.ac.uk>

Date: Sun 05 Jun 2005 - 00:53:57 EST

R-help@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 Received on Sun Jun 05 00:58:51 2005

Date: Sun 05 Jun 2005 - 00:53:57 EST

On Sat, 4 Jun 2005, Marc Schwartz wrote:

>On Sat, 2005-06-04 at 14:50 +0100, Dan Bolser wrote:

*>
**><snip>
**>
**>> This must be because of the "log='y'" option that I am using here.
**>>
**>> y <- c(2,4,6,8,NA,NA,NA,NA,18)
**>>
**>> barplot2(y,log='y')
**>>
**>> Above fails.
**>>
**>>
**>> I appreciate that what I am trying to do is somewhat artificial (handle
**>> zero values on a log scale), but it does reflect the data I have.
**>>
**>> I tried plot(..., type='h'), but that dosn't do the "beside=T" stuff that
**>> I want to do.
**>>
**>> I am now trying things like...
**>>
**>> barplot2(
**>> dat.y.plot + 0.11, # Dirty hack
**>> offset=-0.1, #
**>> xpd=F, #
**>> log='y',
**>> beside=T
**>> )
**>>
**>> Which looks messy.
**>>
**>> Any way to cleanly handle NA values with barplot2 on a log scale
**>> (log='y')?
**>
**><snip>
**>
**>Dan,
**>
**>You are actually close in the above example, using the 'offset'
**>argument.
**>
**>In this case, you still cannot use "NA"s, since their value is unknown
**>and so must set these elements to zero. Then using a small offset value,
**>you can adjust the base value of the y axis so that it is "just above"
**>zero. This should result in a minimal shift of the bar values above
**>their actual values and should not materially affect the plot's
**>representation of the data.
**>
**>Something like the following "should" work:
**>
**> > y <- c(2, 4, 6, 8, NA, NA, NA, NA, 18)
**> > y
**> [1] 2 4 6 8 NA NA NA NA 18
**>
**> > y[is.na(y)] <- 0
**> > y
**> [1] 2 4 6 8 0 0 0 0 18
**>
**>
**> barplot2(y, log = "y", offset = 0.01, las = 2)
**>
**>Note also that if you follow the above with:
**>
**> box()
**>
**>The residual bars from the (0 + 0.01) values are covered with the plot
**>region box, if that is an issue for you.
*

Actually it looks a bit strange (I guess you didn't check it?) - I see what is happening. It isn't much different from...

barplot2(y+0.01, log = "y",las = 1)

My previous fix looks best now I check it with the example ...

barplot2(

y + 0.11,

ylim=c(1,max(y)),

offset = -0.10,

log='y',

xpd=F

)

box()

Looks like the above is what I need :)

Thanks for teh help - its reasuring to see similar fixes :)

*>
*

>This is still something of a "hack", but it is a little cleaner. The key

*>of course is to avoid the use of a bar value of log(x), where x <= 0.
**>Selecting the proper offset value based upon your actual data is
**>important so as to minimally affect the values visually.
**>
**>HTH,
**>
**>Marc Schwartz
**>
**>
*

R-help@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 Received on Sun Jun 05 00:58:51 2005

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:32:22 EST
*