2016-04-08 18 views
0

私はRでオフィスビルを表現しようとしています。後で複数のフロアを表現する必要がありますが、今は1フロアから始める必要があります。キューブのクラスタはすべて規則的な構造になっています。ジュニアスタッフ用に4つの小さなキューブ(4x4)があり、シニアエンジニアとマネージャー(4x6)には2つの大きなキューブがあります。これらがマップされたら、私は彼らが占有されているのか、新しい人には無料であるのかを色で示しておく必要があります。これらはすべて同じ方法でレイアウトされ、大きなものは片側に配置されます。例えば、R青写真/フロアプラン

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

は、私が最初に私がggplot、ちょうど散布図の皆を使うことができると思ったが、私はgeom_pointで異なるサイズのキューブをキャプチャする方法を見つけ出すことはできません。私は地図を見ていましたが、フロアプランの規則的な構造を実際に活用することはできないようです。地図を構築する際に、私の規則的な構造を利用するのは本当に方法でしょうか? Rには、このような構造のためにGoogleのコンセプトがありますか?

最後に、キュービクルのタイプ、クラスタのx座標とy座標、 "R"または "G"(4列)の長いデータファイルを取得します。

+0

はたぶん、あなたはggpolot2' 'から' geom_tile'を使用することができ、複雑なプロットから、より多くの成分を除去するよりもチューニングし、時には簡単ですか? http://docs.ggplot2.org/current/geom_tile.html –

+0

私はそれを見ましたが、すべてのタイルが同じサイズである必要があるように見えますか? – chrysrobyn

+0

最も単純な解決策は、フロアプランと 'geom_point' /' geom_rect'で背景画像を使用することです。十分でしょうか? –

答えて

0

また、低レベルのグラフィック機能を書くことができ、それは

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

どのようにですか?

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()にいくつかのX (またはY)タイルは他より大きくなります。私は何か簡単なものを逃しています – chrysrobyn

+0

各タイルに 'geom_tile(aes(width = w、height = h))'というパラメータを指定できます。 – rhole

関連する問題