我正在努力制作一个ggvis图,其中X轴文本的字体大小将由一个滑块控制。现在我收到以下警告:
Warning message:
In toJSON(unclass(x), container, collapse, ..., .level = .level + :
converting an R function to JSON as null. To change this, define a method for toJSON() for a 'function' object.以下是代码:
mivector<-c(1.5,2,2.5,2,2.5,3,2.5,3,3.5)
treats<-c("A","A","A","B","B","B","C","C","C")
library(ggvis)
library(dplyr)
plotdf<-data.frame(mivector,treats)
plotdf %>% ggvis() %>% layer_points(x=~treats,y=~mivector) %>%
add_axis("y",grid=F,title="") %>%
add_axis("x",grid=F,title="",properties=axis_props(labels=list(fontSize=input_slider(min=8,max=20,value=14,label="Font size of the X-axis text"))))我将非常感谢您的帮助!
发布于 2014-08-12 18:15:27
目前使用ggvis是无法做到这一点的。
当ggvis正在绘图时,将向浏览器发送三种不同类型的消息。
ggvis命令。目前只有一个:update。尽管ggvis允许您创建互动情节,但是要记住,您只能在(2)中更新数据。(一旦更新了(2)中的数据,(3)就会自动隐含)。
但是,(1)中的绘图规范被打包在JSON对象中,并且在启动绘图时只发送浏览器一次。你可以读到这篇来自ggvis作者的文章关于这一点。
这意味着,您要指定的所有绘图规范都必须是JSON可序列化的。函数,不能打包到JSON中(除非,如指定的警告那样,为toJSON()对象定义function方法)。
input_slider()创建的滑块是一个函数:(更准确地说,是一个反应性变量,它是一个函数本身),
> slider <- input_slider(min=8,max=20,value=14,label="Font size of the X-axis text")
> typeof(slider)
[1] "closure"因此,它不可能是绘图规范的一部分。
解决方案
您无法单独在ggvis中解决问题。但是您可以通过使用闪闪发光来解决这个问题。您可以查看这个闪亮教程。此外,有关如何将这篇文章绘图集成到一个闪亮的应用程序中,请参见ggvis。
简言之,你必须:
sliderInput (类似于ggvis中的input_slider ),用于指定x轴字体大小。这一部分进入了一个闪亮应用程序的ui.R。ggvisOutput ui.R中创建一个对象。ggvis绘图表达式封装在反应性环境中,在该环境中,可以让fontSize等于来自sliderInput的值。这里的诀窍是将ggvis调用封装在反应性环境中。因此,每次滑块输入发生变化时,都会重新评估反应性环境,因此再次调用ggvis函数,并重新绘制整个图。(还记得ggvis的1.3阶段吗?)它们都将被更新,因为实际上每次更改滑块输入时都会调用一个新的ggvis函数)。
https://stackoverflow.com/questions/25269695
复制相似问题