2017-08-10 46 views
1

這裏是我的數據並排小提琴地塊多個迭代

set.seed(42) 
dat = data.frame(iter = rep(1:3, each = 10), 
       variable = rep(rep(letters[1:2], each = 5), 3), 
       value = rnorm(30)) 

我知道我可以借鑑小提琴地塊爲ab

library(ggplot2) 
ggplot(data = dat, aes (x = variable, y = value)) + geom_violin() 

enter image description here

但我怎麼爲每個迭代ab繪製小提琴圖,以便將有三個圖表a旁邊的三塊地塊爲b。我以前使用基本繪圖做過,但我正在尋找更好的解決方案,因爲迭代次數以及'a和b'的數量不斷變化。

+1

你有沒有考慮增加AES (...,fill = as.factor(iter))?如果你不喜歡顏色,你可以重新定義scale_fill_manual()。這有幫助嗎? –

+2

如果你喜歡垂直線,你可以嘗試以下方法:ggplot(data = dat,aes(x = as.factor(iter),y = value))+ geom_violin(position =「dodge」)+ facet_wrap(〜variable) –

+2

,或者你可以使用'+ geom_vline(xintercept = 1.5)'作爲verticl行 – Nate

回答

3

有兩種可能的方式。其中之一是通過添加填充命令,另一個用facet_wrap(或facet_grid

隨着填充: ggplot(data = dat, aes (x = variable, y = value, fill = as.factor(iter))) + geom_violin(position = "dodge")

enter image description here

或者用facet_wrapggplot(data = dat, aes (x = as.factor(iter), y = value)) + geom_violin(position = "dodge") + facet_wrap(~variable)enter image description here

1

也許有一個更好的辦法,但在這種情況下我通常會創建一個新的變量:

set.seed(42) 
dat = data.frame(iter = rep(1:3, each = 10), 
       variable = rep(rep(letters[1:2], each = 5), 3), 
       value = rnorm(30)) 



dat <- dat %>% mutate(x_axis = as.factor(as.numeric(factor(variable))*100 + 10*iter)) 


levels(dat$x_axis)<- c("a1", "a", "a3", "b2", "b", "b3") 



ggplot(data = dat, 
     aes(x = x_axis, 
      y = value, fill =variable)) + geom_violin() + scale_x_discrete(breaks = c("a","b")) 

結果是:

enter image description here