私は、複数の水平線が走っている積み重なった棒グラフを作成しています。これは、シャイニーのアプリで行われます。ユーザーはオプションを選択し、それが何であるかに応じて、2本または3本の水平線があります。ここ R、ggvisは両方とも2つのデータフレームからグループ化する必要があります。
が最小再現可能な例である: 私に次のグラフを与えるdf1 <- data.frame(a=as.factor(rep(1:10,2)),
b=sample(1:5,20, replace=T),
c=c(rep("apple",10), rep("banana",10)))
df1 <- df1[order(df1$a, df1$c),]
df2 <- data.frame(a=as.factor(rep(1:10,2)),
i=c(rep(3,10),rep(4,10)),
j=c(rep("red",10), rep("green",10)) )
> df1
a b c
1 1 5 apple
11 1 2 banana
2 2 3 apple
12 2 3 banana
3 3 1 apple
13 3 2 banana
4 4 3 apple
14 4 1 banana
5 5 4 apple
15 5 3 banana
6 6 4 apple
16 6 2 banana
7 7 3 apple
17 7 4 banana
8 8 5 apple
18 8 1 banana
9 9 5 apple
19 9 2 banana
10 10 1 apple
20 10 3 banana
> df2
a i j
1 1 3 red
2 2 3 red
3 3 3 red
4 4 3 red
5 5 3 red
6 6 3 red
7 7 3 red
8 8 3 red
9 9 3 red
10 10 3 red
11 11 3 red
12 1 4 green
13 2 4 green
14 3 4 green
15 4 4 green
16 5 4 green
17 6 4 green
18 7 4 green
19 8 4 green
20 9 4 green
21 10 4 green
22 11 4 green
ggvis(data=df1, x=~a, y=~b) %>%
group_by(c) %>%
layer_bars(fill=~c) %>%
layer_paths(data=df2, x=~a, y=~i, strokeWidth:=2)
(それがあるため、サンプルのたびに違って見えるでしょう())。
しかし、私は途中で逆Zを望んでいません。私が望むのは、df2 $ jでグループ化された2つの平行な線です。しかし、私はggvisで2つのデータフレームでそれについてどうやって行くのか分かりません。
長いフォームでdf2を使用している理由は、2つ以上の水平線を作成するオプションをユーザーが選択できるためです。私はそれを制御するためにifとelseを使いたくありません。私の実際のコードでは、df1とdf2はどちらも反応です。
ありがとうございます。
は思えます。 'layer_paths(data = group_by(df2、i)、x =〜a、y =〜i、strokeWidth:= 2)'あなたは何をしたいのですか? – aosmith
はい!ありがとうございました。あなたはそのようにgroup_byを使うことができるか分からなかった。非常に便利! – chungkim271