2017-07-06 20 views
3

2つの同期変数の棒グラフを作成したい。起源とは、2つの特性が時間的に測定されるサイトへの個人の訪問である。この例では、個人 "a"がサイトを2回訪問します。Rプロットのサブプロットでは色の凡例が表示されない

バーは測定値を表示し、時間順に並び、タグに応じて色付けします(変数ではありません)。

まずデータを作成しましょう。

# R version 3.4.0 
set.seed(123) 
df <- data.frame(id=factor(rep(c("a", "b", "c", "a"), each=10)), 
       time=as.POSIXct(1:40, origin="2017-01-01"), 
       var1=abs(rnorm(40)), 
       var2=abs(rnorm(40))) 

# > head(df) 
# id    time  var1  var2 
# 1 a 2017-01-01 01:00:01 0.005764186 0.1176466 
# 2 a 2017-01-01 01:00:02 0.385280401 0.9474746 
# 3 a 2017-01-01 01:00:03 0.370660032 0.4905574 
# 4 a 2017-01-01 01:00:04 0.644376549 0.2560922 
# 5 a 2017-01-01 01:00:05 0.220486562 1.8438620 
# 6 a 2017-01-01 01:00:06 0.331781964 0.6519499 

次に、各別個の変数の二つのグラフを作る同じ凡例グループに割り当て、第2のプロットの凡例を隠します。

library(plotly) # version 4.7.0 
p1 <- plot_ly(df, x=~time, y=~var1, color=~id, type="bar", 
       legendgroup=~id) 
p2 <- plot_ly(df, x=~time, y=~var2, color=~id, type="bar", 
       legendgroup=~id, showlegend=FALSE) 

次に、両方のプロットを共有X軸を持つ1つのプロットに追加します。

subplot(p1, p2, shareX=TRUE, nrows=2) 

私はSOの質問でHTMLページを追加するかどうかはわかりませんが、上記のコードは、再現性の例を提供する必要があります。参照用に以下に追加されたPNG。

All IDs selected in the legend

右、よさそうですか?しかし何らかの理由で、伝説のセレクタが正しく動作しません。 「a」の選択を解除するとプロット1(予期しない動作)にのみ影響し、「c」を選択解除すると両方のプロット(期待値)に影響します。

IDs "a" and "c" deselected from legend

ここで何が起こっているの?バグの可能性がありますか、何か不足していますか?

私はggplotlyを知っていて、ファセットを使って同様のプロットを得ることができます。問題は、ページ幅でスケーリングするggplotly HTMLを出力することができないことです(少なくとも私が知る限り)。私は結果として得られる画像を、ブラウザウィンドウで拡大縮小するHTMLにしたい。これはデフォルトで陰謀的に行われる。

答えて

2

おそらくバグかもしれません。私は変数に応じてデータを並べ替えることが正しい結果を得ることに気づいた。 それはところで初めてではない、私は同様の動作に先端のための

df<-df[order(df$id),] 
library(plotly) # version 4.7.0 
p1 <- plot_ly(df, x=~time, y=~var1, color=~id, type="bar", 
       legendgroup=~id) 
p2 <- plot_ly(df, x=~time, y=~var2, color=~id, type="bar", 
       legendgroup=~id, showlegend=FALSE) 
subplot(p1, p2, shareX=TRUE, nrows=2) 
+0

感謝に気づきました。実際にIDで発注すれば問題は解決します。奇妙な! –

関連する問題