2017-07-06 87 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订购的确可以解决问题。奇怪的! –