2017-09-24 112 views
1

我想在ggplot的地塊外添加一個包含10條單獨堆疊行的文本框。我的文本是:t = c("a=1", "b=2", "c=3", ... , "j=10")但這些標籤獨立於data.frame,我做了我的原始ggplot。我如何在劇情區域之外添加10條線?ggplot:在地塊外添加多行文本註釋

例如,我想在下面的圖的右側添加在我的矢量t一個文本框:

df = data.frame(y=rnorm(300), test=rep(c(1,2,3),each=100)) 
t = c("a=1", "b=2", "c=3", "d=4", "e=5", "f=6", "g=7", "h=8", "i=0", "j=10") 
p <- ggplot(df, aes(x=factor(test), y=y)) 
p <- p + geom_violin() + geom_jitter(height=0, width=0.1) 
p <- p + theme(legend.title=element_blank(), plot.margin=unit(c(0.1, 3, 0.1, 0.1), "cm")) 
p 
+1

請提供可重複的例子,使我們能夠提供適合您的問題代碼。 – eipi10

回答

4

嘗試

library(gridExtra) 
grid.arrange(p, right = tableGrob(matrix(t,ncol=1), 
      theme = ttheme_minimal(padding = unit(c(3,1),"line")))) 
2

您可以使用標籤值創建一個geom_text層在t中,以便將標籤打印爲圖例。但我們在geom_text中設置了alpha=0,這樣這些標籤將不會包含在圖中,我們使用legend.key=element_blank()override.aes(list(size=0))來獲取沒有無意義圖例鍵的「圖例」標籤(t值)。

p + 
    geom_text(data = data.frame(t, test=NA, y=NA), aes(label=t, colour=t), alpha=0, x=1, y=1) + 
    theme(legend.key=element_blank(), 
     legend.margin=margin(l=-10)) + 
    guides(colour=guide_legend(override.aes=list(size=0))) 

enter image description here

+0

當我嘗試保存時,出現以下錯誤:'錯誤:美學必須是長度1或與數據(1)相同:label,colour' – jjjjjj

+0

您需要在'geom_text'數據中具有相同的列框架,就像主要調用ggplot2時用於審美的那樣(這就是'test = NA,y = NA'的用途)。他們在調用'geom_text'時沒有任何目的,但ggplot希望他們在那裏,所以你需要做一些與你的真實數據類似的東西。 – eipi10