2017-12-18 7 views
-1

皆さん、お手伝いをしたいと思いますが、ここに添付されているようなグラフを作成しようとしています。R/ggplot2でビヘイビアグラフが可能ですか?

proposed graph

完全な垂直バーは、(各地域でイベントをトリガする可能性が高いと)すべての領域間で共有体験を表しています。私はプロットの色の欠如についてお詫び申し上げます。私の現在の目的では、それぞれのラベルは重要ではありませんが、後でそれらを追加することができます。

ここにいくつかのサンプルデータがあります。私は現在、私ができるよう明らかなように、物事を保つために「運動二」など小さなバーの「運動の一つ」として、垂直バーのすべてとすべてを標識しています:

start end  label 
1 10 250 Movement One 
2 1000 1500 Movement One 
3 3000 4500 Movement One 

を与える

move_one <- 
    data.frame(
    start = c(10 , 1000, 3000) 
    , end = c(250, 1500, 4500) 
    , label = "Movement One" 
) 

move_two <- 
    data.frame(
    ind = rep(1:3, each = 3) 
    , start = c(275, 1600, 3800 
       , 20, 1010, 3010 
       , 240, 1400, 4400) 
    , end = c(295, 1750, 4400 
       , 30, 1700, 3600 
       , 290, 1800, 4500) 
    , label = "Movement Two" 
) 

それぞれ
ind start end  label 
1 1 275 295 Movement Two 
2 1 1600 1750 Movement Two 
3 1 3800 4400 Movement Two 
4 2 20 30 Movement Two 
5 2 1010 1700 Movement Two 
6 2 3010 3600 Movement Two 
7 3 240 290 Movement Two 
8 3 1400 1800 Movement Two 
9 3 4400 4500 Movement Two 

(これらはここにグラフを描かれた手と一致しません)。

+1

を与えます。そして、質問からジョークを削除してください。 – dmi3kno

+0

謝罪それはあまり明確ではない、私は残念ながらペンだけで電車に乗っていたので、対角と水平の陰影をつけてみると、違いが見られた。縦線は、2つの動き(動き1 =斜め陰影、動き2 =水平陰影)のうちの1つのインスタンスを参照します。水平バーは、シーン内のある領域を見て、本質的に2つのデータセットをオーバーレイしたいときのインスタンスです。ジョークに関しては、私があなたが何を指しているのか分かりません。 – James

+0

私は質問を編集する際に痛みを訴えますが、基本的な質問を変更するためには編集しないでください(基本的なグラフから特定の側面に移動する)。基本があるので、新しい質問をして詳細をフォローアップしてください(そして2つの間のリンク)。 –

答えて

2

「これはRです。 - Simon Blomberg

基本的には、各コンポーネントを別々にggplotに渡すだけです。まず、geom_rectを使用して、下にある垂直バーを作成します。次に、各領域の水平線をgeom_hlineで追加します。最後に、上部に小さいボックスを別のgeom_rectで追加します。あなたがそこから望む軸ラベルとその他のテーマ設定でポーランド語。

ggplot() + 
    geom_rect(
    aes(xmin = start 
     , xmax = end 
     , fill = label 
     , ymin = 0 
     , ymax = 4) 
    , move_one 
) + 
    geom_hline(aes(yintercept = ind) 
      , move_two) + 
    geom_rect(
    aes(xmin = start 
     , xmax = end 
     , fill = label 
     , ymin = ind - 1/3 
     , ymax = ind + 1/3) 
    , move_two 
) + 
    xlab("Time (milliseconds)") + 
    ylab("Area") 

あなたは、少なくとも垂直「バンドが」に対応するものを理解することも困難である運動1と運動2に対応する2つの異なる色を使用することができます

enter image description here

+0

そのマークをありがとう、私はこのプロジェクトを最後に試してみるために必要な動機とインスピレーションを私に与えました。あなたの例を試してみましたが、コードの一部を明確にしたかっただけです。 ind = rep(1:3、each = 3)では、領域の数を増やすために1:3に変更しますか?私は〜37を持っています。また、それぞれ= 3は何を達成するのですか?エリアの各ラインには現在3つの緑色のブロックがありますが、これはこれに関連していますか?私の実際のデータには、各行に異なる数の緑色のブロックがあります。現在、私は0,1,2の代わりにy軸上にテキストラベルを表示しようとしていますが、ggplot2を愛しています! – James

+0

私はあなたが既にどこかのデータを持っていると仮定しています。デジタイズする(紙の記録から転写する)場合は、Rにデータを入力しないでください** - データをCSV形式で保存します(LibreOffice、Google Sheets、Excelなど)。コードの各部分が何であるかを見るには、それらを別々に実行します( 'each'は' rep'に反復するベクトルの各要素を1回に何回置くかを指示します; )。このように実際のデータを入力すると、手早くエラーが発生しやすくなります。 –

+0

データラベルの場合、因子をy軸として使用できます。しかし、その背後にある縦線を制御するのが難しくなります。代わりに、因子指数(因子レベルに関連付けられた数)を使用してプロットしてから、スケールを変更してラベルを表示します。例えば'scale_x_continuous(breaks = 1:length(levels(move_two $ ind))、labels = levels(move_two $ ind))' –

関連する問題