我正在努力制作一个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"))))
我将非常感谢你的帮助!
答案 0 :(得分:3)
目前无法使用ggvis
执行此操作。
当ggvis
正在绘制时,会向您的浏览器发送三种不同类型的消息。
ggvis
命令。目前只有一个:update
。 虽然ggvis
允许您创建interactive plots,但请务必记住,您只能更新(2)中的数据。 (一旦更新(2)中的数据,则自动隐含(3)。
然而,(1)中的绘图规范打包在 JSON对象中,并在启动绘图时将浏览器仅发送一次。您可以阅读this post from ggvis's author了解相关信息。
这意味着,您要指定的所有绘图规范都必须是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
解决问题。但您可以使用Shiny解决此问题。你可以查看这个tutorial for Shiny。
另外,请参阅this article了解如何将ggvis
绘图集成到Shiny应用程序中。
简而言之,您必须:
sliderInput
(类似于input_slider
中的ggvis
),用于指定x轴字体大小。这部分进入Shiny应用程序的 ui.R 。 ggvisOutput
对象
ggvis
绘图表达式包装在被动环境中,您可以在其中fontSize
等于来自sliderInput
的价值。 这里的诀窍是将您的ggvis
电话打包在被动环境中。
因此,每次滑块输入发生变化时,都会重新评估反应环境,因此会再次调用ggvis
函数,并重新绘制整个图。
(还记得1. {3.阶段ggvis
吗?它们都会被更新,因为每次更改滑块输入时,你都会进行新的ggvis
函数调用。