2011-12-21 53 views
4

這裏是我的數據:如何產生很好的定性酒吧組成圖

ind <- c(rep(1, 20), rep (2, 20), rep (3, 20), rep(4, 20)) 
bar <- c(rep(rep(1:4, each = 5), 4)) 

mark <- c(rep ("A", 5), rep("B", 5), rep("C",5), rep("D",5), 
      rep("B", 20), rep("C", 20), "A", "B", "C", "A", "C","A", 
      "D", "D", "D", "D","A", "C", "C", "A", "B", "B","B", 
      "C","C","C") 

dataf <- data.frame(ind, bar, mark) 

每個個體(IND)具有以4杆,並且顏色fomatted。個人之間應該有更大的空間。我可能有任何數量的個人。以下預期的圖表在Excel中繪製,我想在R中創建更漂亮的圖形。

enter image description here

請注意,每個IND等級(1:4)作爲四杆(1:4)。每個ind的所有四個小節都被分組在一個地方。

回答

5

您可以嘗試使用rect函數來分別繪製每個矩形。嘗試運行一個循環遍歷每個方塊堆疊中的迭代:

par(mfrow=c(2, 2)) 

for(i in unique(ind)) { 
    plot(0, col=0, bty="n", xaxt="n", yaxt="n", xlab = i, ylab = "", xlim=c(0, 5), ylim=c(-6, -1)) 
    for(j in 1:4) { 
    for(k in 1:5) { 
     rect(j-0.4, -k-1, j+0.4, -k, col = which(unique(mark)==matrix(mark[ind==i], 5, 4)[k,j])+1, border = rgb(0,0,0,0)) 
     text(j, -k-0.5, labels = matrix(mark[ind==i], 5, 4)[k,j]) 
    } 
    rect(j-0.4, -6, j+0.4, -1) 
    } 
} 

enter image description here

+0

感謝您的正確答案。我們可以在每個圖形周圍放置邊緣矩形 – jon 2011-12-23 13:03:52

4

下面是使用ggplot一個選項:

dataf$y <- rep(5:1,times = 16) 

ggplot(dataf,aes(x=bar,y=y)) + 
    facet_wrap(~ind) + 
    geom_tile(aes(fill = mark),colour = "black") + 
    geom_text(aes(label = mark)) + 
    labs(x = NULL,y = NULL) + 
    opts(axis.text.x = theme_blank(),axis.text.y = theme_blank()) 

enter image description here

由於我使用geom_tile,你失去了 '酒吧' 之間的距離。我認爲唯一的其他選擇是使用geom_rect,並且指定更多的座標。

+0

感謝你的答案...但我需要各條中條(爲象徵性的目的),沒有線之間的空間... – jon 2011-12-22 00:07:08

+0

@John好吧,這就是你付出挑剔的代價! ;)如果你已經有了Excel中的情節,就使用它。 – joran 2011-12-22 00:23:13

+0

@ joran謝謝你的解決方案 – jon 2011-12-22 00:36:27