2016-11-15 5 views
3

30個のユニークなサンプル(ID 1〜30)を持ち、各サンプルに3つの異なるしきい値( 'G1'カラム)、5e-03,5e -05,5e-08)。 90の観測のそれぞれは、p値(P列)を有する。最後に、30個のサンプルのそれぞれは、10個の異なるカテゴリ(「G2」)のいずれかに属することができ不均一カテゴリのファセットバープロット

# example data.frame 
df <- data.frame(
    'ID' = as.character(unlist(lapply(seq(1:30), function(x) rep(x,3)))), 
    'P' = runif(n = 90, min = 0, max = 1), 
    'G1' = as.character(c('5e-03','5e-05','5e-08')), 
    'G2' = as.character(unlist(lapply(sample(1:10, size = 30, replace = T), function(x) rep(x,3)))) 
) 

私は、このコマンドを使用して、素敵なバープロットを生成することができます[すべての数値変数のため申し訳ありません!]。このようになります

ggplot(df, aes(x = interaction(ID,G2), y = P, fill = G2)) + 
    geom_bar(stat = 'identity') + 
    coord_flip() + 
    facet_grid(. ~ G1) 

:しかし、私が本当にやりたいことは2つの側面を持っている

Plot 1: image with one facet, and 'G2' visualised using colour

。 (現在のように)列に 'G1'を追加し、変数 'G2'を区切るために棒グラフを使用するのではなく、G2の第2水平面が必要です。これは私が試したことです:

そしてそれは正しくありません。私がG2の面を見ると、すべてのサンプルが各面にプロットされています。これは、各サンプルが1つのG2カテゴリにしか属していないため、醜いです。そのグループに属する棒だけがプロットされる第2のファセットを生成するにはどうすればよいですか?私はfacet_gridの 'drop'、 'scale'、 'space'変数を調整しようとしましたが、改善されません。

This私が探しているのは、私が手作業で描いた矩形が、その面にあるはずのプロットの部分に描かれています。バーはG2ファセットに分割されていることを除いて、基本的にプロット1と同じです。

+0

なぜcoord_flip()を追加しましたか?これを削除して、同じコードを再度実行してください。私はあなたが何を探しているのかと思います。 –

+0

返事に感謝します。 coord_flip()を削除しても問題は解決されませんが、G2ファセットはまだ観測されていないデータをプロットしています。私はcoord_flip()を使用しています。なぜなら、美的理由からページ全体にわたってプロットをしたいからです。 – mbyvcm

+0

貼り付けを変更する可能性がありますか? 'paste(ID、G2、sep ="。 ")' – zx8754

答えて

2

最初に、G2とG1でファセット加工しているため、x=interaction(ID,G2)は不要です:x=IDで十分です。

デフォルトでは、プロットのすべてのファセットは、x軸とy軸に対して同じスケールを共有します。しかし、あなたは、私は、グリッドの定義にG1とG2を入れ替えscales引数

ggplot(df, aes(x = ID, y = P, fill = G2)) + 
    geom_bar(stat = 'identity') + 
    facet_grid(G1 ~ G2, scales="free_x") 

注意していることを変更することができます。私はそれがcoord_flip()で動作させることは可能だとは思わない。

+0

ありがとうピエール!あなたはそれをかなり解決しました、ありがとう!すべての個々のバーの幅を同じにする方法はありますか?あなたの解決策は、いくつかのバーがファセットを埋めるために伸びる結果となります。 – mbyvcm

1

ただ、ピエールの答えに追加する:

ggplot(df, aes(x = ID, y = P, fill = G2)) + 
    geom_bar(stat = 'identity') + 
    facet_grid(G1 ~ G2, scales="free", space="free") 

これは、すべてのバーで同じ幅を提供します。

+0

非常に良いクマール!残念ですが、coord_flip()と一緒にこれを行う方法はありません。しかし私はそれで生きることができます! – mbyvcm

関連する問題