在ShinyApp中,我想绘制一个名称具有交互式输入值的图形。所以在ui.R方面,用户选择0,1或2的输入值。在server.R方面,我希望App绘制一个名称为pl0,pl1或pl2的图形。也就是说,如果用户选择0作为输入值,则App绘制图形pl0,对于输入1的pl1和pl2和输入2也是如此。我使用绘图库来绘制图形。
我尝试过print(),plot(),return(),但它们都没有用。 任何解决方案或建议将不胜感激。非常感谢你!
这是我的ui.R
library(shiny)
shinyUI(fluidPage(
# Application title
titlePanel("Star Cluster Simulations"),
# Sidebar with a slider input for time
sidebarLayout(
sidebarPanel(
sliderInput(inputId = "time",
label = "Select time to display a snapshot",
min = 0,
max = 2,
value = 0)
),
# Show a plot of the generated distribution
mainPanel(
plotlyOutput("distPlot")
)
)
))
这是我的服务器.R
library(shiny)
library(plotly)
# load data
for(i in 0:2) {
infile <- paste0("Data/c_0", i, "00.csv")
a <- read.csv(infile)
b <- assign(paste0("c_0", i, "00"), a)
names(a) <- paste0("c_0", i, "00")
pl <- plot_ly(b, x = ~x, y = ~y, z = ~z, color = ~id) %>%
add_markers() %>%
layout(scene = list(xaxis = list(title = 'x'),
yaxis = list(title = 'y'),
zaxis = list(title = 'z')))
assign(paste0("pl", i), pl)
}
# shinyServer
shinyServer(function(input, output) {
output$distPlot <- renderPlotly({
# this doesn't work
print(paste0("pl", input$time))
})
})
答案 0 :(得分:0)
我无法对此进行测试,因为您的问题不可重复(即不包含数据),但有一种方法可以在文本值之间切换(即从Shiny输入返回的值)和R对象是通过制作使用switch
函数的反应式表达式。您可以在plot.data()
(或任何其他渲染函数)中调用反应式表达式(在下面的情况下为renderPlotly
)以在数据集之间切换。
shinyServer(function(input, output) {
plot.data <- reactive({
switch(paste0("pl", input$time),
"pl0" = pl0,
"pl1" = pl1,
"pl2" = pl2)
})
output$distPlot <- renderPlotly({
plot.data()
})
})