2013-07-15 80 views
16

我有和this user相同的問題:我想繪製一個具有離散x軸的facet_grid繪圖,並且我想讓x軸標籤應寫在每個面的下面,而不是隻寫在底面的一行面之下。例如:爲facet_grid繪圖的所有刻面強制X軸文本

# Drop some factor levels to make the plot smaller 
diamondSub <- subset(diamonds, (cut=="Ideal" | cut=="Premium") & 
        (color=="E" | color=="I")) 

# Note that scales="free_x" has no practical effect here 
ggplot(diamondSub, aes(x=clarity, y=price)) + 
    geom_blank()+ 
    geom_boxplot() + 
    facet_grid(cut~color, scales="free_x") 

enter image description here

不過,我寧願不使用來自該職位,這是該解決方案只使用facet_wrap代替facet_grid,因爲我喜歡的方式facet_grid標籤條的文本在列的頂部有一個變量,而在行的兩側有另一個變量。

有沒有辦法讓每個面在x軸標籤,當所有的X軸實際上是相同的,使用facet_grid

回答

15

您可以將gtable內軸的副本,

library(gtable) 
g <- ggplotGrob(p) 
# locate the panels 
panels <- grep("panel", g$layout$name) 
top <- unique(g$layout$t[panels]) 
# intersperse a copy of the bottom axes 
all <- gtable:::rbind_gtable(gtable:::rbind_gtable(g[seq.int(min(top)), ], 
                g[max(top)+1,], "first"), 
          g[seq(min(top)+1, nrow(g)),], "first") 
grid.newpage() 
grid.draw(all) 

enter image description here

+0

我得到錯誤運行線'所有<一段時間 - gtable ::: rbind_gtable(gtable ::: rbind_gtable( g [1:4],g [7,]),g [5:9,])''。我得到的誤差是'錯誤UseMethod(「grid.draw」): 施加到的類「功能」'的對象關於「grid.draw」不適用方法。我相信'p'指的是ggplot對象,這是真的嗎? –

+0

是的,p是你的ggplot。你用'print(all)'得到了什麼?它應該是一個'TableGrob(10×8) 「佈局」:16 grobs'等 – baptiste

+0

我現在得到的錯誤是如下:'>所有< -​​ gtable ::: rbind_gtable(gtable ::: rbind_gtable(克[1 :4],G [7,]),G [5:7,]) 錯誤MMM <每個:這些類型的比較是不implemented' –