> -----Original Message-----
> From: r-help-boun...@r-project.org 
> [mailto:r-help-boun...@r-project.org] On Behalf Of baptiste auguie
> Sent: Thursday, June 10, 2010 11:50 AM
> To: Kim Jung Hwa
> Cc: r-help@r-project.org; ggplot2
> Subject: Re: [R] Order labels in qplot() - ggplot2 {help}
> 
> Hi,
> 
> You could reorder the factor levels before plotting,
> 
> x$n = factor(x$n, levels=c("va","vp", letters[1:3]))
> 
> last_plot() %+% x
> 
> or you could avoid using factors in the first place,
> 
>  x <- data.frame(cbind(n,p,pm,pn), stringsAsFactors=FALSE)

The idiom
    data.frame(cbind(x,y,z))
is almost always bad and should be replaced by
    data.frame(x,y,z)

If x, y, and z are ordinary vectors then the cbind()
in the former converts them all to be a common type
so it can make a matrix out of them.  If some of the
x, y, and z are factors and some are numeric the common
type will be numeric.  If some are character and some
are numeric the common type will be character.

data.frame(cbind(x,y,z)) will then take the matrix made
by cbind(x,y,z), split it into its columns, and if the
columns are character it will convert them to factors.

You will probably be surprised by the results of this:
  > str(data.frame(cbind(Char=letters[1:3], Num=11:13)))
  'data.frame':   3 obs. of  2 variables:
   $ Char: Factor w/ 3 levels "a","b","c": 1 2 3
   $ Num : Factor w/ 3 levels "11","12","13": 1 2 3
  > str(data.frame(cbind(Char=letters[1:3], Num=11:13),
      stringsAsFactors=FALSE))
  'data.frame':   3 obs. of  2 variables:
   $ Char: chr  "a" "b" "c"
   $ Num : chr  "11" "12" "13"
  > str(data.frame(cbind(Char=factor(letters[1:3]), Num=11:13)))
  'data.frame':   3 obs. of  2 variables:
   $ Char: int  1 2 3
   $ Num : int  11 12 13

Skip the call to cbind() and you will probably get what
you want.

Converting the character to a factor with the desired
order of levels is generally a good way to go.  Passing
that factor to cbind() is not.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com  
> 
> last_plot() %+% x
> 
> HTH,
> 
> baptiste
> 
> On Thu, Jun 10, 2010 at 8:42 PM, Kim Jung Hwa 
> <kimhwamaill...@gmail.com> wrote:
> > Hello,
> >
> > I want to arrage the label according to my preference eg.. 
> (va, vp, a, b,
> > c) but don't know how to supress default ordering. Any
> > suggestions?
> >
> > Please try the code below:
> >
> > n <- c("va", "vp", "a", "b", "c")
> > p <- c(2, 2,1, 3,5)
> > pm<- c(3,4,2,5,4)
> > pn <- c(1,1,1,2,3)
> > x<-data.frame(cbind(n,p,pm,pn))
> > library(ggplot2)
> > qplot(x=n, y=p, data=x, ymin=pn, ymax=pm,
> >   xlab='', ylab='', main='Order Label as: va vp a b c') +
> >   geom_hline(yintercept = 2) +
> >   geom_linerange() +
> >   coord_flip()
> >
> > Thanks!
> >
> > --
> > You received this message because you are subscribed to the 
> ggplot2 mailing
> > list.
> > Please provide a reproducible example: http://gist.github.com/270442
> >
> > To post: email ggpl...@googlegroups.com
> > To unsubscribe: email ggplot2+unsubscr...@googlegroups.com
> > More options: http://groups.google.com/group/ggplot2
> >
> 
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
> 

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to