2013-07-10 83 views
3

我有興趣嘗試爲我在ggplot中準備的多面板圖創建簡單的轉角標籤。 This is similar to this previously asked question,但答案只解釋瞭如何將標籤包含在圖的頂部,而不是以許多期刊所要求的格式生成角點標籤。我希望能複製plotrix函數corner.label()類似ggplot2的內容。ggplot2中的轉角標籤

這裏是一個使用plottrix的例子,我想在ggplot2中重新創建。

require(plotrix) 

foo1<-rnorm(50,25,5) 
foo2<-rpois(50,25) 
foo3<-rbinom(50,25,0.5) 
foo4<-rnbinom(50,25,0.5) 

par(mfrow=c(2,2)) 
hist(foo1) 
corner.label(label='a',figcorner=T) 
hist(foo2) 
corner.label(label='b',figcorner=T) 
hist(foo3) 
corner.label(label='c',figcorner=T) 
hist(foo4) 
corner.label(label='d',figcorner=T) 

這將產生以下:

enter image description here

感謝您的幫助提前!

+0

你能澄清一下標籤應該是什麼樣子嗎?你只需要把小平面標籤全部推到左邊?或者您是否需要完全刪除facet標籤條? – joran

+0

我只需要將標籤對齊到每個面板的左上角。我不清楚你的意思是通過刪除方面的標籤帶。 – Thraupidae

+0

好的,然後看'?theme'並設置'strip.text'的hjust。 – joran

回答

5

我有同樣的問題,並與下面的解決方案,這是一個有點不同想出了:

裝載R封裝

library(ggplot2) 
library(grid) 
library(gridExtra) 

示例數據

a <- 1:20 
b <- sample(a, 20) 
c <- sample(b, 20) 
d <- sample(c, 20) 

創建一個數據幀

mydata <- data.frame(a, b, c, d) 

創建示例曲線

myplot1 <- ggplot(mydata, aes(x=a, y=b)) + geom_point() 
myplot2 <- ggplot(mydata, aes(x=b, y=c)) + geom_point() 
myplot3 <- ggplot(mydata, aes(x=c, y=d)) + geom_point() 
myplot4 <- ggplot(mydata, aes(x=d, y=a)) + geom_point() 

組邊角標籤

myplot1 <- arrangeGrob(myplot1, top = textGrob("A", x = unit(0, "npc") 
     , y = unit(1, "npc"), just=c("left","top"), 
     gp=gpar(col="black", fontsize=18, fontfamily="Times Roman"))) 

myplot2 <- arrangeGrob(myplot2, top = textGrob("B", x = unit(0, "npc") 
     , y = unit(1, "npc"), just=c("left","top"), 
     gp=gpar(col="black", fontsize=18, fontfamily="Times Roman"))) 

myplot3 <- arrangeGrob(myplot3, top = textGrob("C", x = unit(0, "npc") 
     , y = unit(1, "npc"), just=c("left","top"), 
     gp=gpar(col="black", fontsize=18, fontfamily="Times Roman"))) 

myplot4 <- arrangeGrob(myplot4, top = textGrob("D", x = unit(0, "npc") 
     , y = unit(1, "npc"), just=c("left","top"), 
     gp=gpar(col="black", fontsize=18, fontfamily="Times Roman"))) 

一個頁面上標出所有地塊

grid.arrange(myplot1, myplot2, myplot3, myplot4, ncol = 2) 

corner label

+0

這太好了。這比公認的解決方案IMO更簡單,更普遍適用,更容易實施。謝謝! –

4

一個例子:

d <- data.frame(x = runif(16), 
       y = runif(16), 
       grp = rep(letters[1:4],each = 4)) 

ggplot(d,aes(x = x,y = y)) + 
facet_wrap(~grp) + 
geom_point() + 
theme(strip.text = element_text(hjust = -0.05), 
     strip.background = element_blank()) 

enter image description here

+0

有什麼辦法可以在標繪/座標軸區域之外添加標籤嗎?類似corner.label()中的'figcorner = T'選項? – Thraupidae

+0

@ Thraupidae您可以將'hjust'設置爲負數,但之後b和d會移動到其他面板。 – joran

+0

@ Thraupidae看到我的編輯。我認爲這更接近你之後的事情。 (並且應該解釋爲什麼我詢問了關於方面絲帶的問題。) – joran

1

下面是使用自定義標籤功能的解決方案。這不會影響對數據的任何操作。目前它只適用於一維小平面(facet_wrap)。我還在努力研究如何沿着2-d網格增量...

  1. 定義貼標機功能

    make_labelstring <- function(mypanels) { 
        mylabels <- sapply(mypanels, 
            function(x) {LETTERS[which(mypanels == x)]}) 
    
        return(mylabels) 
    } 
    
    label_panels <- ggplot2::as_labeller(make_labelstring) 
    
  2. label_panels作爲貼標籤機,以facet_wrap

    library(ggplot2) 
    data("diamonds") 
    
    # create a faceted plot 
    ggplot(data = diamonds, aes(x = depth, y = price)) + 
        geom_point() + 
        facet_wrap(~cut, labeller = label_panels) + 
        theme(strip.text = element_text(hjust = -0), 
         strip.background = element_blank())