2017-04-07 30 views
4

我試圖重建該地塊不可怕3D條形圖條形圖和不明確的X軸(這是不同的時間點,它是很難說的時候都)躲閃。結合堆棧,並且將在GGPLOT2

Bad plot

(from Science 291, no. 5513 (2001): 2606–8, otherwise a good paper.)

我的第一直覺是做類似於他們做了什麼事,有二維條碼的情節和獨特的x軸的標籤,使用基因型迴避吧,然後堆疊條形獲得前欄上的黑色和白色分裂,但在這裏的其他幾個很好的問題說,你不能這樣做。

我的下一個方法是使用小面(下面的代碼),它的工作相當不錯,但我很樂意看到一個更好的方式來做到這一點。有沒有辦法堆疊一些變量和其他人?或者只是一個更好的方式來做到這一點?

編輯:爲了澄清,我認爲重要的是要顯示疊加條的總數(在這種情況下,m和n是黑色和白色),因爲這代表了測量的數量,然後拆分單獨測量。

This is my faceted version.

library(tidyverse) 
library(cowplot) 

data = tribble(
    ~Timepoint, ~`Ancestral genotype`, ~Mutator, ~`Mean % of auxotrophs`, 
    100, 'mutS-', 'o', 10.5, 
    150, 'mutS-', 'o', 16, 
    220, 'mutS-', 'o', NA, 
    300, 'mutS-', 'o', 24.5, 
    100, 'mutS+', 'n', 1, 
    150, 'mutS+', 'n', NA, 
    220, 'mutS+', 'n', 1, 
    300, 'mutS+', 'n', 1, 
    100, 'mutS+', 'm', 0, 
    150, 'mutS+', 'm', NA, 
    220, 'mutS+', 'm', 2, 
    300, 'mutS+', 'm', 5 
) 

data <- data %>% mutate(Timepoint = as.character(Timepoint)) 

data %>% ggplot(aes(x = Timepoint, y = `Mean % of auxotrophs`)) + 
    geom_col(aes(fill = Mutator), position = 'stack') + facet_grid(~`Ancestral genotype`) + 
    guides(fill=FALSE) 

回答

3

在我看來,一個線圖更直觀這裏:

library(forcats) 

data %>% 
    filter(!is.na(`Mean % of auxotrophs`)) %>% 
    ggplot(aes(x = Timepoint, y = `Mean % of auxotrophs`, 
       color = fct_relevel(Mutator, c("o","m","n")), linetype=`Ancestral genotype`)) + 
    geom_line() + 
    geom_point(size=4) + 
    labs(linetype="Ancestral\ngenotype", colour="Mutator") 

enter image description here

要回復您的評論:這是單獨堆放哈克方式通過Ancestral genotype,然後閃避每一雙。我們分別繪製堆積條形圖爲mutS-mutS+,並且通過在相反方向上移位Timepoint少量手動躲閃條。設置width等於移位量的兩倍將導致成對的條相互接觸。我添加了少量的額外移位(5.5而不是5),以便在每對中的兩個柱之間創建一個很小的空間。

ggplot() + 
    geom_col(data=data %>% filter(`Ancestral genotype`=="mutS+"), 
      aes(x = Timepoint + 5.5, y = `Mean % of auxotrophs`, fill=Mutator), 
      width=10, colour="grey40", size=0.4) + 
    geom_col(data=data %>% filter(`Ancestral genotype`=="mutS-"), 
      aes(x = Timepoint - 5.5, y = `Mean % of auxotrophs`, fill=Mutator), 
      width=10, colour="grey40", size=0.4) + 
    scale_fill_discrete(drop=FALSE) + 
    scale_y_continuous(limits=c(0,26), expand=c(0,0)) + 
    labs(x="Timepoint") 

enter image description here

注意:在上述兩種實施例中,我已經把Timepoint作爲數值變量(即,我跳過了步驟,其中在轉換它字符),以確保x軸以時間單位爲單位,而不是將其轉換爲分類軸。三維圖是一種令人憎惡的事物,不僅是因爲三維透視造成的扭曲,還因爲它造成了每個測量以相同時間間隔分開的錯誤外觀。

+0

謝謝。這是做這件事的好方法。唯一的一點是我想表明,在mutS的應變+ N和O型實際上是來自同一個文化相比mutS-類型,它是獨立的,這就是爲什麼我認爲有意義的堆疊條是很重要的。 (雖然這個數字並不是很明顯)。 –

+0

查看更新後的答案。 – eipi10

+0

有沒有辦法做到這一點與x變量作爲一個因素? – masfenix