2014-02-24 57 views
7

我正在製作一個使用ggplot2animation包的動畫圖。動畫的每個框架都包含一個帶有兩位信息的地圖,我想用它作爲標題/標籤。在面板外添加ggplot註釋?還是兩個頭銜?

在我看來,有兩種方法可以做到這一點。

  1. 調整繪圖邊距,使其沒有標題邊距,然後使用geom_text將「標題」添加爲繪圖上的文本註釋。
  2. 添加第二個標題。 (我嘗試用空格填充單個標題以模擬兩個標題,但由於字距縮小導致重複繪製,因此分解)

第一種方法並不理想,因爲我需要使用相同的繪圖限制每個框架,我從經緯度測量的地圖範圍中獲得這些數據。確定標籤所需的額外高度會導致單位的醜陋混雜。因此,添加第二個標題在語義上似乎對我更明智,但在玩了annotation_custom後,我似乎無法弄清楚。

這是我之後的模型,展示了兩個「標題」,每個都有獨立的路線,以確保它們在重複的框架中保持原位。我打開了情節邊界來幫助觀察位置。在最後的情節中,這將被刪除。

Mock-up of ggplot with two titles

感謝您的幫助!

編輯

感謝巴蒂斯特爲標誌張貼。我必須使用稍微不同的參數來(a)獲得定位權並(b)爲兩個標題使用相同的字體。這裏有一個例子:

require(gtable) 
require(ggplot2) 

## Create the basic plot 
df <- data.frame(x=1:10, y=1:10) 
gg <- ggplot(df, aes(x,y)) + geom_point() + labs(title="Left") + 
    theme(plot.title=element_text(hjust=0)) 

## Get the title style from the original plot 
g <- ggplotGrob(gg) 
title_style <- g$grobs[[8]]$gp 

## Add the second title and plot 
g2 <- gtable_add_grob(g, textGrob("Right", x=1, hjust=1, gp=title_style), 
         t=2, l=4, b=2, r=4, name="right-title") 
grid.draw(g2) 

這裏的結果:

ggplot figure with two titles

+0

我試圖與title_style玩,但我需要我的格羅是從標題的其餘部分不同的顏色,所以我不能從標題,也沒有從任何搶風格其他文字在我的圖表上。是否有另一種方法來改變grob的顏色? – zazu

回答

10

嘗試annotate裁剪此

p = qplot(1,1) 
g = ggplotGrob(p) 

require(gtable) 
g = gtable_add_grob(g, grobTree(textGrob("left", x=0, hjust=0), 
           textGrob("right", x=1, hjust=1)), 
        t=1, l=4) 

grid.draw(g) 
+0

請你能解釋如何選擇值t和l。例如,將l設置爲3或5會得到完全不同的結果。 – user20650

+1

t和l分別代表頂部和左側,它們對應於您希望插入grob的gtable佈局(單元矩陣)中的位置。我通過試驗和錯誤(受過教育的猜測)發現了這些指標,大致瞭解了典型的ggplot2(標題,座標軸,面板等)的佈局,但是您可以通過檢查'g $ layout'的名稱以編程方式進行編程。 – baptiste

+0

謝謝巴蒂斯特。我認爲這些數字可能以某種方式與g $佈局有關。我認爲在這個例子中,標題對應的值(t和l)是適當的,但我顯然不理解。試驗和錯誤將爲我工作。 – user20650

1

替代關閉(不推薦)

p = qplot(1,1) + annotate("text", label="left", 
          x=-Inf, y=Inf, vjust=-1, hjust=0) 
g = ggplotGrob(p) 
g$layout$clip[g$layout$name == "panel"] = "off" 
grid.draw(g) 
1

解決方案基於grid

require(ggplot2) 
require(grid) 

df <- data.frame(x = 1:10, y = 1:10) 
gg <- ggplot(df, aes(x, y)) + geom_point() + labs(title = "Left") + 
    theme(plot.title = element_text(hjust = 0)) 
gg 
grid.text("Right", x = unit(0.95, "npc"), y = unit(0.96, "npc")) 
+1

Stephan:是否可以通過ggsave()來保存用grid.text()完成的註釋? – Juanchi