我正在使用gvisMerge
将几个gvisAnnotatedTimeLine
对象组合在一起。是否所有gvisAnnotatedTimeLine对象都可以使用相同的RangeSelector,即如果我在一个gvisAnnotatedTimeLine
图中选择两个日期/时间之间的范围,它随后会自动调整合并在一起的其他图的范围,以反映相同的范围?
我很确定答案是no。
如果gvisMerge可以更改传递给它的googleVis对象的参数值,那么它将需要一个访问器方法和一个赋值器方法(即getter和setter),而这两个方法都没有。
更重要的是,gVisMerge纯粹是为了在一个HTML页面上放置两个googleVis对象(事实上,一次格式化两个以上的Google Vis对象需要多次递归调用gVisMerge)。
如果您查看gVisMerge的方法签名:
gvisMerge(x, y, horizontal = FALSE,
tableOptions = "border="0"",
chartid
)
除了x和y(在一个HTML页面上合并的两个googleVis对象),以及chartid,这只是为了让新的mreged googleVis物体有一个唯一的chartid,gvisMerge的参数都与格式或样式有关:
horizontal=FALSE:两个图表是并排放置还是位于下方(默认)
tableOptions:纯HTML格式(例如,通过gvisMerge设置HTML页面的背景色或页面上两个图表之间的间距)
使用gvisMerge:的而非解决方案
从googleVis构造函数创建的图表是类gvis和类列表的R对象。
gvis对象的一个组件是jsDrawChart,它将数据和适当的google可视化API函数与用户选项(googleVis函数的参数值)相结合。
因此,您希望访问和修改传递给该函数的参数,但必须在将googleVis对象(图表)传递给gvisMerge之前执行,因为一旦您调用gvisMerge,就会有一个新的gvis对象,其中原始注释的时间轴图表是其中的一个组件。
更重要的是,谷歌Vis创建的图表是在Flash中渲染的;显然,您应该在工作流程中尽早修改googleVis对象。我的猜测是,这应该不难,因为你只需要设置公共min&轴的最大值是每个图表显示的数据集。因此,只需预先计算一个常见范围:
> r1 = range(d1)
> r2 = range(d2)
> r1
[1] 0.23 .75
> r2
[1] 0.11 0.46
将调用返回的值附加到每个AnnotatedTimeLine图表的范围中,然后为每个Annotated TimeLine调用传递这个聚合范围,这显然会给从构造函数中绘制的每个图表相同的min&给定轴上的最大值。
r12 = append(r1, r2)