1
分組。我正在創建一條堆疊的條形圖,其中有多條水平線穿過它。這是在一個Shiny應用程序中完成的。用戶選擇一個選項,根據它是什麼,可能有2條或3條水平線。R,ggvis從兩個數據幀繪製圖形,這兩個數據幀都需要按照
這裏是一個最小的可重複的例子:
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)
這給了我下面的圖(它會每次都看,因爲樣本的不同())。
但我不想在中間的逆ž。我想要的是由df2 $ j分組的兩條平行線。但我不知道如何在我的ggvis中使用兩個數據框。
我有一個長形式的df2的原因是因爲用戶可以選擇一個可以創建2條以上水平線的選項。我不想用if和else來控制。在我的實際代碼中,df1和df2都是反應。
非常感謝您的幫助。
好像你需要給'layer_paths'在'y'變量分組的數據集。 'layer_paths(data = group_by(df2,i),x =〜a,y =〜i,strokeWidth:= 2)'做你想做的事情嗎? – aosmith
是的!謝謝。不知道你可以用那種方式使用group_by。很有用! – chungkim271