2017-05-04 65 views
2

我有一個4x4 geom_tile情節,其中右上角的單元格包含一個額外的4x4單元格。我想讓情節出現在下面。重構geom_tile ggplot2

Desired output visuals

的位置被列出爲清楚起見,然而,代碼使得放置在單元中的位置相對應的數據值在細胞內。我提供的代碼示例目前生產這樣的:

Current ggplot output

我不能操縱就位置而言的數據值(x值和y不能被改變)和含有額外擊穿單元將不總是在右上角,所以不會硬編碼這個位置的解決方案將不勝感激。

如果這是可能的,我將不勝感激,您可以提供任何幫助!

x <- c(0,0,1,0.5,0.5,1,1) 
y <- c(0,1,0,0.5,1,0.5,1) 
data_val <- sample(0:100, 7) 
alldata <-data.frame(x, y, data_val) 


    ggplot(data= alldata, aes(x, y)) + 
    geom_tile(colour = "black") + 
    geom_text(aes(label = data_val),colour="white") 

回答

3

這需要你的符號略有變化,使X和Y正確定位每個廣場的中心,和一個額外的寬度參數(這個系統真的只取決於x和y是偶數還是奇)。對於其他分區正方形,適當使用-1/+ 1而不是3/5。

x <- c(0,0,4,3,3,5,5) 
y <- c(0,4,0,3,5,3,5) 
w <- ifelse(x%%2==0, 4, 2) 
data_val <- sample(0:100, 7) 
alldata <- data.frame(x, y, w, data_val) 

ggplot(data= alldata, aes(x=x, y=y, width=w, height=w)) + 
    geom_tile(fill = "white", color="black") + 
    geom_text(aes(label = data_val), colour="black") + 
    coord_fixed() 

enter image description here

+0

安德魯,你能進一步解釋一下行'w^< - ifelse(X %% 2 == 0,4,2)',這樣我可以在不同的情況下適應了嗎?我的數據具有不同的x和y位置,不同的維度(3x3,4x4和5x5,而不是我給出的2x2樣本)等,我想了解該行的邏輯,以便我可以修改它適應各種各樣的輸入。 – User247365

+0

是 - w(方形的寬度)是2或4.大方塊以偶數爲中心('x %% 2 == 0'),小方塊以奇數爲中心。只要您使用此座標系,它應該適用於較大的網格。 –

+0

收集數據的方式並不能保證數字會落在「漂亮」的數字上。例如,我有一個5x5的數據集,其中'x = -0.84,-0.42,0,0.42,0.84'和y ='-0.71,-0.355,0,0.355,0.71'。然後有一個以點(0.84,0.71)爲中心的額外的5×5矩陣。我將如何構造定義寬度的代碼行,以便它能夠處理各種類型的位置輸入?我意識到這是一個非常深入的問題,對一篇文章發表評論,所以我可以問一個新的問題,如果需要額外的細節來傳達我的問題。 – User247365