2013-10-16 56 views
1

如何唯一註釋每個主要方面,但在相應的邊緣方面沒有註釋?下面的代碼將文本放置在主要方面,我喜歡,但邊距顯示文本疊加。我如何壓制邊緣方面的文字?如何註釋ggplot2中的方面但不包含邊緣

frame_labels <- data.frame(
    frame = LETTERS[1:4], 
    vs = rep(0:1, each = 2), 
    am = rep(0:1, times = 2), 
    x = 5, y = 33) 

p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() 
p <- p + facet_grid(vs ~ am, margin = TRUE, as.table = FALSE) 
p <- p + geom_text(data = frame_labels, aes(x = x, y = y, label = frame)) 
print(p) 
+0

如果您想要這樣做,您可能需要預處理數據集。請參閱Winston在[此主題]上的回答(https://groups.google.com/forum/#!msg/ggplot2/3pomgBPRmyo/2vZnZ4Igc3IJ)。 – aosmith

+0

謝謝@aosmith,我看到那個線程,但我不明白。我將其解釋爲意味着在geom_text data.frame中爲稱爲「ALL」的分面變量添加一個額外的級別。我無法得到任何似乎與他的評論一致的東西。 – Dennis

回答

0

我對the thread I mentioned in a comment取的是,你必須基本上得到「邊緣」到您的數據集。我確信有一個很好的方法可以做到這一點,但目前它正在逃避我。這是一種似乎可行的「蠻力」方法,但並不美觀。

本質上,我做了三個額外的數據集副本,並添加第三級vsam合併邊距。然後我全部在一起。起初,我認爲它不工作,但我意識到我需要改變vs的等級順序,所以相反的順序與您示例中的順序相匹配。然後,您的數據集frame_labels就像一個魅力添加標籤。

mtcars2 = mtcars3 = mtcars4 = mtcars 
mtcars2$vs = mtcars3$am = mtcars4$am = mtcars4$vs = "all" 
mtcarsall = rbind(mtcars, mtcars2, mtcars3, mtcars4) 

mtcarsall$vs = factor(mtcarsall$vs, levels = c("all", "0", "1")) 

ggplot(mtcarsall, aes(x = wt, y = mpg)) + geom_point() + 
    facet_grid(vs ~ am, as.table = FALSE)+ 
    geom_text(data = frame_labels, position = NULL, aes(x = x, y = y, label = frame)) 
+0

太棒了!暴力與否,它完成工作。非常感謝@aosmith! – Dennis

0

只需刪除geom_text(...)部分。

代碼應該是這樣的,以具有所需的輸出

library(ggplot2) 

frame_labels <- data.frame(
frame = LETTERS[1:4], 
vs = rep(0:1, each = 2), 
am = rep(0:1, times = 2), 
x = 5, y = 33) 

p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() 
p <- p + facet_grid(vs ~ am, margin = TRUE, as.table = FALSE) 
print(p) 

希望這有助於。