2012-12-21 27 views
11

मैं संगठन संरचना (पदानुक्रम) के साथ एक त्रिभुज साजिश बनाना चाहता हूं जो विभिन्न कंपनियों में प्रत्येक स्तर पर कर्मचारियों की संख्या दिखाती है।संगठन चार्ट त्रिभुज साजिश

mylabd <- data.frame (company = rep(c("A", "B", "C"), each = 7), 
skillsDg = rep(c("Basic", "HighSc", "Undgd", "MAST", "PHD", "EXPD", "EXECT"), 3), 
number = c(200, 100, 40, 30, 10, 0, 0, 
      220, 110, 35, 10, 0, 4, 1, 
      140, 80, 120, 50, 52, 52, 3) 
      ) 
    company skillsDg number 
1  A Basic 200 
2  A HighSc 100 
3  A Undgd  40 
4  A  MAST  30 
5  A  PHD  10 
6  A  EXPD  0 
7  A EXECT  0 
8  B Basic 220 
9  B HighSc 110 
10  B Undgd  35 
11  B  MAST  10 
12  B  PHD  0 
13  B  EXPD  4 
14  B EXECT  1 
15  C Basic 140 
16  C HighSc  80 
17  C Undgd 120 
18  C  MAST  50 
19  C  PHD  52 
20  C  EXPD  52 
21  C EXECT  3 

उद्देश्य को प्रतिबिंबित करने के लिए कैसे अलग-अलग कंपनियों अलग कुशल या डिग्री श्रमिकों किराया है:

यहाँ कुछ उदाहरण डेटा है।

परिकल्पनात्मक आंकड़ा यह है (हालांकि रंग भरना सही नहीं है)। enter image description here विचार यह है कि प्रत्येक चरण में रेखा की चौड़ाई आनुपातिक है और फिर रेखाएं जुड़ी हुई हैं। यदि बाद के स्तर में कोई श्रेणी नहीं है, तो यह कनेक्ट नहीं होगा (जैसे कंपनी बी)। मुझे ऐसा कोई प्रोग्राम नहीं मिला जो ऐसा कर सके और न ही पता लगा सके। कोई उपाय ?

संपादित करें:

मैं आर बारे में एक बहुत नहीं है, लेकिन यहाँ मेरी कैसे मेरा विचार को आकार देने जाता है। यह प्रत्येक रेखा खंड को एक बिंदु से दो में विभाजित करता है ताकि इसे सममित बना दिया जा सके। खींची गई क्षैतिज रेखाएं तब जुड़ी हुई हैं।

enter image description here

+0

आप वायलिन भूखंडों की कोशिश की है? – James

+0

मुझे यकीन नहीं था कि यह voilin साजिश दो तरह के वर्गीकृत परिवर्तनीय (मात्रात्मक चर के आवृत्ति वितरण) के लिए काम करता है, इसे फिट करने के लिए चाल की आवश्यकता हो सकती है! – rdorlearn

उत्तर

15

मुझे लगता है कि कर किसी भी समारोह के बारे में पता नहीं है, लेकिन यहां खरोंच से एक है: आप निश्चित रूप से जो कुछ भी आप जोड़ सकते हैं :

my1 <- data.frame (company = rep(c("A", "B", "C"), each = 7), skillsDg = rep(c("Basic", "HighSc", "Undgd", "MAST", "PHD", "EXPD", "EXECT"), 3), number = c(200, 100, 40, 30, 10, 0, 0, 220, 110, 35, 10, 0, 4, 1, 140, 80, 120, 50, 52, 52, 3)) 

my2 <- split(my1,my1$company) #split your dataframe into a list where each element is a company 
# The next line create the layout 
layout(matrix(1:(length(my2)+1), nrow=1), width=c(1,rep(4,length(my2)))) 
# Then we draw the x-axis: 
par(mar=c(3,0,3,0)) 
plot(NA,axes=F, xlim=c(0,1),ylim=c(1,nlevels(my1$skillsDg))) 
axis(side=4,tick=F,labels=unique(my1$skillsDg), 
    at=seq_along(unique(my1$skillsDg)), las=2, line=-4) 
# Then we apply a graphing function to each company: 
lapply(my2,function(x){ 
    par(mar=c(3,0,3,0)) 
    plot(NA, xlim=c(-max(my1$number),max(my1$number)), 
      ylim=c(1,nlevels(my1$skillsDg)),axes=F) 
    title(sub=x$company[1],line=1) 
    abline(h=seq_along(x$skillsDg), col="grey80") 
    polygon(x=c(x$number,rev(-1*x$number)), 
      y=c(seq_along(x$skillsDg),rev(seq_along(x$skillsDg))), 
      col=as.numeric(x$company)) 
    }) 

enter image description here

संपादितlapply में ग्राफ़िंग फ़ंक्शन के अंदर चाहते हैं (लेकिन कुछ मामलों में इसका अर्थ ग्राफ के कुछ आयामों को बदलना हो सकता है):

layout(matrix(1:(length(my2)+1), nrow=1), width=c(1,rep(4,length(my2)))) 
par(mar=c(3,0,3,0)) 
plot(NA,axes=F, xlim=c(0,1),ylim=c(1,nlevels(my1$skillsDg))) 
axis(side=4,tick=F,labels=unique(my1$skillsDg), 
    at=seq_along(unique(my1$skillsDg)), las=2, line=-4) 
lapply(my2,function(x){ 
    par(mar=c(3,0,3,0)) 
    plot(NA, xlim=c(-max(my1$number)-50,max(my1$number)+50), 
     ylim=c(1,nlevels(my1$skillsDg)),axes=F) 
    title(sub=x$company[1],line=1) 
    abline(h=seq_along(x$skillsDg), col="grey80") 
    text(x=x$number+5, y=seq_along(x$skillsDg)+.1, label=x$number, pos=4) 
    polygon(x=c(x$number,rev(-1*x$number)), 
     y=c(seq_along(x$skillsDg),rev(seq_along(x$skillsDg))), 
     col=as.numeric(x$company)) 
    }) 

enter image description here

+0

बढ़िया! धन्यवाद !! मुझे लगता है कि लेबल को अल्बैबेटिक रूप से छोटा किया गया है - उदाहरण के लिए एक्सटेक्ट बेसिक है, मुझे लगता है कि डेटा पॉइंट सही हैं, बस लेबल – rdorlearn

+2

मेरा बुरा। मैंने इसे सही किया। मैं इस तथ्य का उपयोग करना चाहता था कि यह श्रेणी कारक थी लेकिन भूल गई कि कारकों के लिए डिफ़ॉल्ट वर्णानुक्रम का आदेश दिया जाना है। – plannapus

+1

बस थोड़ा अनुरोध (उम्मीद है कि मैं बहुत ज्यादा नहीं पूछ रहा हूं), क्या हम प्रत्येक चरण में संख्या जोड़ सकते हैं, प्रत्येक शिक्षा स्तर – rdorlearn

1

अलग चार्ट से आप के लिए कहा है, लेकिन कुछ सामान्य दृश्य सिद्धांतों का पालन करने की कोशिश: ग्रिड पैकेज, हम कर सकते हैं का उपयोग करना

library(ggplot2) 
mylabd$skillsDg <- factor(mylabd$skillsDg, levels = c("Basic", "HighSc", "Undgd", "MAST", "PHD", "EXPD", "EXECT")) 
p <- ggplot(data=mylabd, aes(x=skillsDg, y=number, fill = skillsDg)) 
p <- p + geom_bar(stat = "identity") + coord_flip() 
p <- p + facet_wrap(~ company, ncol = 1, nrow=3) 
plot(p) 

enter image description here

5

इस तरह कुछ है:

enter image description here

mylabd <- data.frame (company = rep(c("A", "B", "C"), each = 7), 
         skillsDg = rep(c("Basic", "HighSc", "Undgd", "MAST", "PHD", "EXPD", "EXECT"), 3), 
         number = c(200, 100, 40, 30, 10, 0, 0, 
           220, 110, 35, 10, 0, 4, 1, 
           140, 80, 120, 50, 52, 52, 3) 
) 



## to comapre we need o have the same scales for all organizations 
nskills <- nlevels(mylabd$skillsDg) 
ncompany <- nlevels(mylabd$company) 
barYscale <- c(0, nskills) * 1.05 
barXscale <- c(0, max(mylabd$number))* 1.05 
## the global scene 
vp <- plotViewport(c(5, 4, 4, 1), 
        yscale = barYscale, 
        layout = grid.layout(nrow=1,ncol=nbars)) 

pushViewport(vp) 
grid.rect() 
grid.yaxis(at=c(1:nlevels(mylabd$skillsDg)),label=unique(mylabd$skillsDg)) 
grid.grill() 

## split data by companya 
data.splitted <- split(mylabd,f=mylabd$company) 
lapply(1:3,function(company){ 

    x <- data.splitted[[company]] 
    vv <- x$number 
    companyName <- unique(x$company) 

    pushViewport(viewport(layout.pos.col=company,  
         xscale = barXscale, 
         yscale = barYscale)) 
    grid.rect() 
# grid.xaxis(at= mean(x$number),label = companyName) 
    grid.xaxis() 
    grid.polygon(x = unit.c(unit(0.5,'npc')-unit(vv/2,'native'), 
          unit(0.5,'npc')+unit(rev(vv)/2,'native')), 
       y = unit.c(unit(1:nmeasures,'native'), 
          unit(rev(1:nmeasures),'native')), 
       gp=gpar(fill = rainbow(nmeasures)[company])) 
    grid.polygon(x = unit.c(unit(0.5,'npc')-unit(vv/2,'native'), 
          unit(0.5,'npc')+unit(rev(vv)/2,'native')), 
       y = unit.c(unit(1:nmeasures,'native'), 
          unit(rev(1:nmeasures),'native')), 
       id = c(1:nmeasures,rev(1:nmeasures)), 
       gp=gpar(fill = NA)) 

    grid.text(x = unit(0.5,'npc'), 
      y = unit(0.5,'native'), 
      label = unique(x$company)) 

    popViewport() 

}) 

popViewport() 
+0

+1 के लिए लाइन के दाएं या बाएं हो सकते हैं !! – rdorlearn

संबंधित मुद्दे