jiho.han wrote:
hello, useRs~
suppose i have a matrix as follows:
item    category      sub-category
  A           1                  11
  B           1                  12
  C           1                  12
  D           2                  21
  E           2                  22

i like to draw a plot that represent the proportion of each category at each level. that is, i want a plot like this: +-----+ +-----+ | | | 11 |
    |        |   +-----+
    |   1   |   |   12  |
    |        |   |        |
    +-----+   +-----+
    +-----+   +-----+
    |        |   |   21 |
    |   2   |   +-----+
    |        |   |   22 |
    +-----+   +-----+
  category   sub-cateory

hope my plot makes sense. anyone know how to make such plot?
any hint/suggestion would be much appreciate. thank you.

Hi jiho,
An interesting request. Here is a very basic function that does what you want (I think) with a slightly expanded dataset to show its generality.

item cat subcat subsubcat
A 1 11 111
B 1 12 121
C 1 12 122
D 2 21 211
E 2 22 221
F 3 31 311
G 3 31 312
H 3 32 322
I 3 32 322
J 3 33 331
K 3 34 341
L 3 34 341
M 3 34 342

bh<-read.table("bh.dat",header=TRUE)

barhier<-function(x) {
 dimx<-dim(x)
 plot(0,xlim=c(0,dimx[2]),ylim=c(0,dimx[1]),axes=FALSE,type="n",
  xlab="",ylab="")
 for(level in 1:dimx[2]) {
  top<-dimx[1]
  levelfreq<-freq(x[,level])
  valuenames<-names(levelfreq[[1]])
  for(value in 1:length(levelfreq[[1]])) {
   bottom<-top-levelfreq[[1]][value]
   rect(level-1,bottom,level,top)
   text(level-0.5,(bottom+top)/2,valuenames[value])
   top<-bottom
  }
 }
}

barhier(bh[,-1])

Jim

______________________________________________
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