Take care with codes()! (was [R] type of representation)

Warnes, Gregory R gregory_r_warnes at groton.pfizer.com
Fri Jan 3 20:46:43 CET 2003


Ahh yes, sorry about that.

Here's the corrected snippet:

# Create an Example Data Frame Containing Car x Color data
carnames <- c("bmw","renault","mercedes","seat")
carcolors <- c("red","white","silver","green")
datavals <- round(rnorm(16, mean=10, sd=4),1)
data <- data.frame(Car=rep(carnames,4),
                   Color=rep(carcolors, c(4,4,4,4) ),
                   Value=datavals )
# show the data
data

# plot the Car x Color combinations, using 'cex' to specify the dot size
plot(x=as.numeric(data$Car),     # as.numeric give numeric values
     y=as.numeric(data$Color), 
     cex=data$Value/max(data$Value)*12,  # standardize size to (0,12)
     pch=19,  # filled circle
     col="skyblue", # dot color
     xlab="Car", # x axis label
     ylab="Color", # y axis label
     xaxt="n", # no x axis lables
     yaxt="n", # no y axis lables
     bty="n",  # no box around the plot
     xlim=c(0,nlevels(data$Car  )+0.5), # extra space on either end of plot
     ylim=c(0.5,nlevels(data$Color)+1.5)  # so dots don't cross into margins
     )

# add text labels
text(x=1:nlevels(data$Car), y=nlevels(data$Car)+1, labels=levels(data$Car))
text(x=0, y=1:nlevels(data$Color), labels=levels(data$Color) )

# add borders between cells
abline(v=(0:nlevels(data$Car)+0.5))
abline(h=(0:nlevels(data$Color)+0.5))

# annotate with actual values
text(x=as.numeric(data$Car),     # as.numeric give numeric values
     y=as.numeric(data$Color), 
     labels=format(data$Value),       # label value
     col="black", # textt color
     )

# put a nice title
title(main="Car by Color Popularity\n(Dot size proportional to popularity)")


-Greg

> -----Original Message-----
> From: ripley at stats.ox.ac.uk [mailto:ripley at stats.ox.ac.uk]
> Sent: Friday, January 03, 2003 1:53 PM
> To: Warnes, Gregory R
> Cc: 'allende at gredos.cnb.uam.es'; 'r-help at stat.math.ethz.ch'
> Subject: RE: Take care with codes()! (was [R] type of representation)
> 
> 
> From the help page of codes():
> 
>      Normally `codes' is not the appropriate function to use with an
>      unordered factor.  Use `unclass' or `as.numeric' to extract the
>      codes used in the internal representation of the factor, as these
>      do not assume that the codes are sorted.
> 
> and this is one of the `normally' cases.  Your code will only work
> correctly if the levels are in alphabetical order (in the 
> locale in use).
> 
> On Fri, 3 Jan 2003, Warnes, Gregory R wrote:
> 
> > How about this snippet:
> >
> > # Create an Example Data Frame Containing Car x Color data
> > carnames <- c("bmw","renault","mercedes","seat")
> > carcolors <- c("red","white","silver","green")
> > datavals <- round(rnorm(16, mean=10, sd=4),1)
> > data <- data.frame(Car=rep(carnames,4),
> >                    Color=rep(carcolors, c(4,4,4,4) ),
> >                    Value=datavals )
> > # show the data
> > data
> >
> > # plot the Car x Color combinations, using 'cex' to specify 
> the dot size
> > plot(x=codes(data$Car),     # codes give numeric values
> >      y=codes(data$Color),
> >      cex=data$Value/max(data$Value)*12,  # standardize size 
> to (0,12)
> >      pch=19,  # filled circle
> >      col="skyblue", # dot color
> >      xlab="Car", # x axis label
> >      ylab="Color", # y axis label
> >      xaxt="n", # no x axis lables
> >      yaxt="n", # no y axis lables
> >      bty="n",  # no box around the plot
> >      xlim=c(0,nlevels(data$Car  )+0.5), # extra space on 
> either end of plot
> >      ylim=c(0.5,nlevels(data$Color)+1.5)  # so dots don't 
> cross into margins
> >      )
> >
> > # add text labels
> > text(x=1:nlevels(data$Car), y=nlevels(data$Car)+1, 
> labels=levels(data$Car))
> > text(x=0, y=1:nlevels(data$Color), labels=levels(data$Color) )
> >
> > # add borders between cells
> > abline(v=(0:nlevels(data$Car)+0.5))
> > abline(h=(0:nlevels(data$Color)+0.5))
> >
> > # annotate with actual values
> > text(x=codes(data$Car),     # codes give numeric values
> >      y=codes(data$Color),
> >      labels=format(data$Value),       # label value
> >      col="black", # textt color
> >      )
> >
> > # put a nice title
> > title(main="Car by Color Popularity\n(Dot size proportional 
> to popularity)")
> >
> >
> > -Greg
> >
> > > -----Original Message-----
> > > From: allende at gredos.cnb.uam.es [mailto:allende at gredos.cnb.uam.es]
> > > Sent: Friday, January 03, 2003 4:46 AM
> > > To: r-help at stat.math.ethz.ch
> > > Cc: allende at gredos.cnb.uam.es
> > > Subject: [R] type of representation
> > >
> > >
> > > Hi
> > >
> > > I have some data that i want to plot but i don't find how to
> > > do it. I have car
> > > types (bmw,renault,mercedes,seat ...), colors and a number
> > > for each car
> > > type-color relation.I want to come up with a matrix
> > > representation of cars vs
> > > colors where in each intersection i could set a dot
> > > proportional in size to my
> > > third variable.
> > >
> > >
> > > Can anybody give me a clue of hoe to come up with such 
> representation.
> > >
> > > Thanks
> > >
> > > Ramon
> > >
> > > ______________________________________________
> > > R-help at stat.math.ethz.ch mailing list
> > > http://www.stat.math.ethz.ch/mailman/listinfo/r-help
> > >
> >
> >
> > LEGAL NOTICE\ Unless expressly stated otherwise, this 
> message is ... [[dropped]]
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > http://www.stat.math.ethz.ch/mailman/listinfo/r-help
> >
> 
> -- 
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
> 


LEGAL NOTICE\ Unless expressly stated otherwise, this message is ... [[dropped]]




More information about the R-help mailing list