2017-04-07 12 views
4

私は恐ろしい3D棒グラフと不明瞭なx軸(これらは別個の時間点であり、それらがいつであるかを知るのは難しい)なしでこのプロットを作り直そうとしています。スタックを組み合わせてggplot2で棒グラフをかける

Bad plot

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

私の最初の本能は、取得するために遺伝子型についてかわしバーを使用して、2Dバープロットした別個のx軸ラベルと、彼らが何をしたかに似た何かをして、積み重ねられたバーですフロントバーの黒と白の分割がありますが、ここではいくつかの良い質問がありますが、そうすることはできません。

私の次のアプローチは、合理的にうまくいったファセット(下のコード)を使用することでしたが、これを行うためのより良い方法を見たいと思います。いくつかの変数をスタックし、他のものをスタックする方法はありますか?またはこれを一般的に行うより良い方法は?

編集:明らかにするために、積み重なったバーの合計(この場合はmとnは元々は黒と白)を表示することが重要です。これは計測量を表しているため、分割はa別の測定。

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をシフト量の2倍に設定すると、お互いに接触するバーのペアが作成されます。私は、各ペアの2つの棒の間にわずかなスペースを作成するために、少量の余分なシフト(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軸は、それをカテゴリ軸に変換するのではなく、時間単位で表される。 3Dプロットは、3Dパースペクティブによる歪みだけでなく、同じ時間間隔で各測定値が分離されているような誤った外観を生成するため、偽物です。

+0

ありがとうございました。これは良い方法です。唯一のことは、mutS +株のn型とo型は、別々のmutS型と比較して同じ培養物からのものであることを示すことが重要だと思います。 (それは図からはっきりと分かりません) –

+0

更新された回答を見てください。 – eipi10

+0

x変数を要素としてこれを行う方法はありますか? – masfenix

関連する問題