將多變量facet_wrap標籤我使用facet_wrap分裂我的散點圖如GGPLOT2:在一行
facet_wrap(x~y+z)
這根據需要在我的情況產生22個地塊。然而,這22個圖中的每一個的標籤都顯示在3行(x,y和z)中,這些行不必要地佔用了窗口中的空間,並將圖塊擠壓成一個小區域。我寧願讓我的地塊規模更大。由於變量y和z很短,我想將它們顯示在同一行而不是兩個。
我看着貼標機的選項,但他們似乎沒有做我想做的。我希望在這裏提出任何建議。
將多變量facet_wrap標籤我使用facet_wrap分裂我的散點圖如GGPLOT2:在一行
facet_wrap(x~y+z)
這根據需要在我的情況產生22個地塊。然而,這22個圖中的每一個的標籤都顯示在3行(x,y和z)中,這些行不必要地佔用了窗口中的空間,並將圖塊擠壓成一個小區域。我寧願讓我的地塊規模更大。由於變量y和z很短,我想將它們顯示在同一行而不是兩個。
我看着貼標機的選項,但他們似乎沒有做我想做的。我希望在這裏提出任何建議。
我不知道如何用標籤功能做到這一點,但另一種選擇是創建一個分組變量,將所有三個分類變量組合成一個可用於分面的變量。下面是一個使用內置mtcars
數據框和dplyr
程序包實時創建新分組變量的示例。接下來是一個更新函數,它允許從一個到三個分面變量進行動態選擇。
library(dplyr)
ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")),
aes(wt,mpg)) +
geom_point() +
facet_wrap(~group)
UPDATE:關於關於靈活性的評論,下面的代碼是一個函數,其允許用戶輸入所需的數據幀和變量名,包括動態選擇到小面的一個,兩列或三列。
library(dplyr)
library(lazyeval)
mygg = function(dat, v1, v2, f1, f2=NA, f3=NA) {
dat = dat %>%
mutate_(group =
if (is.na(f2)) {
f1
} else if (is.na(f3)) {
interp(~paste(f1,f2, sep='-'), f1=as.name(f1), f2=as.name(f2))
} else {
interp(~paste(f1,f2,f3,sep='-'), f1=as.name(f1), f2=as.name(f2), f3=as.name(f3))
})
ggplot(dat, aes_string(v1,v2)) +
geom_point() +
facet_wrap(~group)
}
現在,讓我們嘗試一下功能:
library(vcd) # For Arthitis data frame
mygg(Arthritis, "ID","Age","Sex","Treatment","Improved")
mygg(mtcars, "wt","mpg","cyl","am")
mygg(iris, "Petal.Width","Petal.Length","Species")
謝謝,這確實有效。但是,我想知道是否有一種方法可以使用ggplot2參數來執行此操作。我可能想要使用不同的變量來對我的圖進行構圖,並且還希望避免已經很大的數據表中的冗餘。 – beeprogrammer
查看更新的答案。另請注意,代碼不會將任何列添加到數據框對象。額外的列僅在ggplot函數中添加,並且不會更改數據框對象本身。 – eipi10