本文介绍了如何将数据从反应性光亮表达式传递到ggvis图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在熟悉ggvis,并且我正在尝试将其用于SHILINY。我很难理解ggvis是如何从反应性的闪亮表达式中获得数据的。以下是来自ggvis GitHub存储库的基本应用程序:
ui.R:
shinyUI(pageWithSidebar(
div(),
sidebarPanel(
sliderInput("n", "Number of points", min = 1, max = nrow(mtcars),
value = 10, step = 1),
uiOutput("plot_ui")
),
mainPanel(
ggvisOutput("plot"),
tableOutput("mtc_table")
)
))
server.R:
library(ggvis)
shinyServer(function(input, output, session) {
# A reactive subset of mtcars
mtc <- reactive({ mtcars[1:input$n, ] })
# A simple visualisation. In shiny apps, need to register observers
# and tell shiny where to put the controls
mtc %>%
ggvis(~wt, ~mpg) %>%
layer_points() %>%
bind_shiny("plot", "plot_ui")
output$mtc_table <- renderTable({
mtc()[, c("wt", "mpg")]
})
})
现在mtc
是反应式表达式,它实际上是一个函数(或者它是?),它的结果是一个data.frame。但是,它是作为函数通过管道传递给ggvis的。如果您尝试传递结果数据。框如下所示mtc() %>% ggvis(~wt, ~mpg) %>%
layer_points() %>%
bind_shiny("plot", "plot_ui")
SHILINY会开始抱怨"如果没有活动的反应上下文,操作是不允许的"。那么到底是怎么回事呢?我询问的原因是我想返回我想在ggvis中使用的其他对象。更准确地说,我想更改x和y轴标签,其中标签是在反应表达式中内部计算的,如下所示:
mtc <- reactive({ list(data=mtcars[1:input$n, ],
labx = "Computed x axis label",
laby = "Computed y axis label")
})
mtc %>% ggvis(data=data,~wt,~mpg) %>%
layer_points() %>%
add_axis("x",title=labx) %>%
add_axis("y",title=laby) %>%
bind_shiny("plot", "plot_ui")
是否有可能以某种方式利用ggvis调用内部mtc()
输出的结构?或者只能传递data.frame,然后将数据放入data.frame?还是有其他方法可以注册ggvis对象?在此question中,使用observe_ggvis
函数注册了ggvis输出,但它似乎不存在于当前的ggvis版本(0.3)中。我在R 3.1.1上使用的是ggvis版本0.3.0.1和SHINY 0.10.0
推荐答案
ggvis可以为数据集传递"裸反应"。执行此操作时,ggvis将在数据更改时自动重新绘制数据,但不需要重新绘制整个图形:
get_rct_df = reactive({ #code to change dataset from shiny input )}
get_rct_df %>% ggvis() #rest of plotting code %>% bind_shiny("plot")
这将在每次GET_RCT_DF中的数据更改时更新绘图中的数据点(但不会重新绘制整个绘图)。这也意味着,如果不重新绘制整个绘图(绘图标签、LAYER_MODEL_PRESTIONS的公式),则无法更新某些内容。您可以执行其他建议,并将整个情节包装在被动式中:
reactive({
get_rct_df %>%
ggvis() #rest of plotting code %>%
add_axis("x", title = input$title)
}) %>% bind_shiny("plot")
这将允许您更新绘图标题和绘图的其他部分。但这也迫使ggvis在某些情况发生变化时重新绘制整个曲线图,而不是仅仅重新绘制数据。如果您同时测试这两种方法,方法1看起来会更"流畅";当您的数据更改时,ggvis内置了过渡动画。 这篇关于如何将数据从反应性光亮表达式传递到ggvis图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!