2017-07-06 49 views
3

我想製作兩個同步變量的情節條形圖。起源是個人訪問一個網站,其中有兩個屬性及時測量。在這個例子中,個人「a」兩次訪問該網站。顏色圖例在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 

現在製作每個單獨變量的兩個圖,分配到相同的圖例組並隱藏第二個圖的圖例。

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軸的單個繪圖。

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訂購的確可以解決問題。奇怪的! –