2016-04-08 4 views
0

R.'de bir ofis binasını temsil etmeye çalışmak için çalışıyorum Daha sonra, birden fazla katı temsil etmem gerekecek, ancak şimdilik tek bir katla başlamalıyım. Düzenli bir yapıda küp kümeleri vardır. Gençler için dört küçük küp (4x4) ve bir üst düzey mühendis ve bir yönetici (4x6) için iki büyük küp vardır. Bunlar bir kez haritalandırıldıktan sonra, yeni işe alındıklarında ya da ücretsiz olarak işe yarayıp yaramadıklarını gösterebilmem gerekir. Bunların hepsi bir ucunda büyük olanlarla aynı şekilde ortaya konmuştur. Örneğin, R blueprints/floorplan

+----+--+--+ 
| S |J1|J2| 
+----+--+--+ 
<-hallway--> 
+----+--+--+ 
| M |J3|J4| 
+----+--+--+ 

Ben ilk ben ggplot ve adil dağılım çizim herkesi kullanabileceğini düşündüm ama geom_point ile farklı boyut küpleri yakalamak anlamaya olamaz. Haritalara bakmak için biraz zaman harcadım, ama yer planımın normal yapısından gerçekten yararlanamıyorum gibi görünüyor - belki de gidilecek yol budur ve düzenli bir yapıdan bir harita oluşturmamdan yararlanıyorum. R'nin bu tür bir yapıya sahip olmamız gereken bir konsepti var mı? Sonunda uzun bir veri dosyası alacağım, hücre tipi, kümenin x ve y koordinatları ve bir "R" veya "G" (4 sütun).

+0

Belki ggpolot2' 'dan' geom_tile' kullanabilirsiniz karmaşık bir arsa gittikçe daha fazla bileşenlerin çıkarılması daha ayarlamak için bazen kolay? http://docs.ggplot2.org/current/geom_tile.html –

+0

Bunu gördüm, ama tüm karoların aynı büyüklükte olması gerekiyormuş gibi görünüyor mu? – chrysrobyn

+0

En basit çözüm, zemin planı ve "geom_point"/"geom_rect" ile bir arka plan resmi kullanmak olacaktır, bu yeterli olur mu? –

cevap

0
Ayrıca düşük seviyeli grafik fonksiyonu yazabiliriz

; o

enter image description here

library(grid) 
library(gridExtra) 

floorGrob <- function(S = c(TRUE, FALSE), J = c(TRUE, FALSE, TRUE, TRUE), 
         draw=TRUE, newpage=is.null(vp), vp=NULL){ 
    m <- rbind(c(1,3,4), # S1 J1 J2 
      c(7,7,7), # hall 
      c(2,5,6)) # S2 J3 J4 
    fills <- c(c("#FBB4AE","#CCEBC5")[c(S, J)+1], "grey90") 
    cellGrob <- function(f) rectGrob(gp=gpar(fill=f, col="white", lwd=2)) 
    grobs <- mapply(cellGrob, f=fills, SIMPLIFY = FALSE) 
    g <- arrangeGrob(grobs = grobs, layout_matrix = m, vp = vp, as.table = FALSE, 
       heights = unit(c(4/14, 1/14, 4/14), "null"), 
       widths = unit(c(6/14, 4/14, 4/14), "null"), respect=TRUE) 

    if(draw) { 
    if(newpage) grid.newpage() 
    grid.draw(g) 
    } 
    invisible(g) 
} 

floorGrob() 
0

Peki ya?

df <- expand.grid(x = 0:5, y = 0:5) 
df$color <- factor(sample(c("green", "red"), 36, replace = T)) 
head(df) 
# x y color 
# 1 0 0 green 
# 2 1 0 green 
# 3 2 0 green 
# 4 3 0 red 
# 5 4 0 green 
# 6 5 0 red 

library(ggplot2) 
ggplot(df, aes(x, y, fill = color)) + 
    geom_tile() + 
    scale_fill_manual(name = "Is it open?", 
        values = c("lightgreen", "#FF3333"), 
        labels = c("open", "not open")) 

Plot

+0

Geom_tile() 'ye nasıl söyleyeceğimi anlayamıyorum. (veya Y) karoları diğerlerinden daha büyüktür. Basit bir şey mi eksik? – chrysrobyn

+0

Her çini için geom_tile (aes (width = w, height = h)) 'parametrelerini sağlayabilirsiniz. – rhole