2017-01-03 35 views
0

我正在嘗試整合文件列的多個繪圖,其中每個文件都有兩個堆棧欄繪圖,並且繪圖很容易混淆而不會將它們包裝到一個網格中。不過,我打算改進此圖的結果,爲整個圖添加常見的圖例和標籤。我嘗試了幾次,以更清晰的方式爲每個文件集成多個繪圖,因此將它們放到一個文件欄的網格中可能會更加優雅,易於理解輸出。我對SO的幾個類似帖子的回答感到困惑,我用ggplot2進行了一些新的迴應,最後我無法制作出我想要的情節。任何可以給我可能的想法,以更好的方式改善目前的情節?我如何爲多個圖形添加通用標籤和圖例?請任何想法嗎?如何將常見標籤和圖例的文件欄的多個獨特情節整合起來?

重複性data.frame:

Qualified <- list(
    hotan = data.frame(begin=c(7,13,19,25,31,37,43,49,55,67,79,103,31,49,55,67), 
         end= c(10,16,22,28,34,40,46,52,58,70,82,106,34,52,58,70), 
         pos.score=c(11,19,8,2,6,14,25,10,23,28,15,17,6,10,23,28)), 
    aksu = data.frame(begin=c(12,21,30,39,48,57,66,84,111,30,48,66,84), 
         end= c(15,24,33,42,51,60,69,87,114,33,51,69,87), 
         pos.score=c(5,11,15,23,9,13,2,10,16,15,9,2,10)), 
    korla = data.frame(begin=c(6,14,22,30,38,46,54,62,70,78,6,30,46,70), 
         end=c(11,19,27,35,43,51,59,67,75,83,11,35,51,75), 
         pos.score=c(9,16,12,3,20,7,11,13,14,17,9,3,7,14)) 
) 

unQualified <- list(
    hotan = data.frame(begin=c(21,33,57,69,81,117,129,177,225,249,333,345,33,81,333), 
         end= c(26,38,62,74,86,122,134,182,230,254,338,350,38,86,338), 
         pos.score=c(7,34,29,14,23,20,11,30,19,17,6,4,34,23,6)), 
    aksu = data.frame(begin=c(13,23,33,43,53,63,73,93,113,123,143,153,183,33,63,143), 
         end= c(19,29,39,49,59,69,79,99,119,129,149,159,189,39,69,149), 
         pos.score=c(5,13,32,28,9,11,22,12,23,3,6,8,16,32,11,6)), 
    korla = data.frame(begin=c(23,34,45,56,67,78,89,122,133,144,166,188,56,89,144), 
         end=c(31,42,53,64,75,86,97,130,141,152,174,196,64,97,152), 
         pos.score=c(3,10,19,17,21,8,18,14,4,9,12,22,17,18,9)) 
) 

我categorzing數據,並以這種方式得到多個圖(mainly influenced by @Jake Kaupp's idea):

multi_plot <- function(x) { 
    p1 <- ggplot(x, aes(x = group)) + 
     geom_bar(aes(fill = elm), color = "black") 
    p2 <- ggplot(distinct(x), aes(x = elm)) + 
     geom_bar(aes(fill = group), color = "black") 
    arrangeGrob(p1, p2,nrow = 1, top = unique(x$list)) 
} 

singleDF <- 
    bind_rows(c(Qualified = Qualified, Unqualified = unQualified), .id = "id") %>% 
    tidyr::separate(id, c("group", "list")) %>% 
    mutate(elm = ifelse(pos.score >= 10, "valid", "invalid")) %>% 
    arrange(list, group, desc(elm)) 

plot_data <- singleDF %>% 
    split(.$list) %>% 
    map(~split_plot(.x)) 
grid.arrange(grobs = plot_data, nrow = 1) 

我想多情節與常見的文件欄整合標籤和常見的傳奇位置。在常用圖例方面,我打算撥打X軸爲sample,Y軸爲observation;在常見的傳奇位置方面,我打算在情節的右側(只有四個常見的傳奇)表示傳奇。

編輯

在我需要的輸出情節的groupelm堆棧柱狀圖中必須放在一個單獨的網格文件吧。對於整個圖表,追求共同的標籤和傳奇是需要的。

我怎樣才能達到我想要的輸出?原始實施需要做些什麼改變?對不起,這個簡單的問題在SO。在此先感謝

+0

「文件欄一個單一的網格」 - >我不明白你說「文件」在這裏是什麼意思。 – Axeman

+0

@Axeman在前一篇文章中,我基於你和Jake Kaupp的想法繼續這篇文章,提出了根據條件生成多個繪圖的解決方案。這個解決方案是否與之前的解決方案一致感謝您的青睞:) – Dan

+1

我提出了兩個獨立的圖,因爲您基本上是在x軸上繪製了兩個不同的變量。我不喜歡在一個情節中這樣做。我認爲這很混亂。但是既然你似乎堅持,我現在提供了一種將所有東西都繪製成一幅情節的方法。是的,結果是一樣的。 – Axeman

回答

4
combinedDF <- 
    bind_rows(mutate(singleDF, x = group, fill = elm), 
      mutate(singleDF, x = elm, fill = group) %>% distinct()) %>% 
    mutate(x = factor(x, levels = c('invalid', 'valid', 'Unqualified', 'Qualified')), 
     fill = factor(fill, levels = c('invalid', 'valid', 'Unqualified', 'Qualified'))) 

ggplot(combinedDF, aes(x = x, fill = fill)) + 
    geom_bar() + 
    geom_text(aes(label = ..count..), stat = 'count', position = 'stack') + 
    facet_grid(~list) 

enter image description here

+0

爲什麼不在以前的想法中使用多重陰謀解決方案? – Dan

+0

因爲你想要的輸出...... – Axeman

+0

我可以多分析一下你的分解部分,'line-4','line-5'嗎?謝謝 – Dan

相關問題