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