[R] R-help - Problem in drawing braplot with a huge value of data

Marc Schwartz MSchwartz at mn.rr.com
Thu Feb 16 05:50:34 CET 2006


On Thu, 2006-02-16 at 09:20 +0530, Subhabrata wrote:
> Hello R-experts,
> 
> I am facing a strange problem while creating a barplot. I have serise of
> data of which the first
> on is around 162589 while the remaining data are around 0-150. so when I am
> ploting the barplot
> with all the data I am getting a single line -> test1.jpg.
> 
> But If I remove the 1st value i.e 162589 then I am getting a normal
> barplot -> test2.jpg
> 
> Can some one help me regarding this matter.
> 
> Thank you for any help.
> 
> Regards
> 
> Subhabrata


You have a wide range for your data, so the smaller values are getting
lost.

You can try to use a log scale on the y axis and then set the tick marks
to reasonable values:

 # Do the barplot, setting 'log = "y"' to use a log
 # scale.
 # Set the range of the y axis to nice values. Note of
 # course that you cannot have 0 since log10(0) = -Inf
 # Also set the y axis so that the tick marks are not
 # drawn here

 barplot(c(162589,  50, 100, 150), log = "y", 
         ylim = c(1, 200000), yaxt = "n")


 # Use axTicks to get 'nice' values for the tick marks
 # The 'y' axis is '2'

 at <- axTicks(2)


 # Now use axis() to set the tick mark values and use
 # 'las' to make the labels horizontal
 # Use sprintf() to force non "1e+XX" labels

 axis(2, at = at, label = sprintf("%d", at), las = 2)


You can then add further annotation as you require.

If you would prefer nicer 10^x exponential notations where the exponent
is superscripted for the y axis tick marks, you could use 'plotmath' and
do something like this:

 barplot(c(162589,  50, 100, 150), log = "y", 
         ylim = c(1, 200000), yaxt = "n")

 at <- axTicks(2)

 axis(2, at = at, labels = parse(text = paste("10 ^", log10(at))), 
      las = 2)


The final line uses parse() to create math expressions for the tick mark
notations. The result of the paste() call is:

> paste("10 ^", log10(at))
[1] "10 ^ 0" "10 ^ 1" "10 ^ 2" "10 ^ 3" "10 ^ 4" "10 ^ 5"

These are then converted into expressions using parse() that can be
drawn on the axis by plotmath.

See ?axis, ?axTicks, ?sprintf, ?plotmath, ?parse and ?paste for more
information here.

HTH,

Marc Schwartz




More information about the R-help mailing list