[英]How to display multiple rows in the table from plotly graphs using R Shiny and delete the last row from the table?
[英]Multiple line graphs using plotly in shiny R
我是 shiny R 和 Plotly 的新手。 我正在尝试构建一个具有两个下拉框的仪表板,我们通过这些下拉框和 plot Plotly 图表进行输入。 所有数据集都有时间、温度和重量列。 时间在 x 轴上,对于 y 轴,我们可以 select 温度或重量或两者兼而有之。
第一个下拉菜单将输入到 select 的数据集。
第二个下拉框将输入 select 来自所选数据集中的变量。 然而,我已经弄清楚的大多数事情,y 轴 label 不会动态变化。 label 正在获取(输入$变量)而不是温度或重量。
这是 shiny r output这里也是可重复的示例和我的代码
library(shiny)
library(plotly)
library(DT)
df1 <- data.frame("time" = 1:10, "temp" = c(21,15,31,12,23,45,67,34,54,10), "weight" = c(10,20,30,40,65,35,68,89,100,23), stringsAsFactors = FALSE)
df2 <- data.frame("time" = 1:10, "temp" = c(31,65,31,22,23,45,67,54,54,45), "weight" = c(30,20,40,40,65,85,68,89,14,24), stringsAsFactors = FALSE)
ui <- fluidPage(
titlePanel( div(column(width = 5, h2('title here')), )),
# Input: Selector for choosing dataset
selectInput(inputId = "dataset",
label = "Choose a dataset:",
choices = c("df1","df2")),
selectInput(inputId = "variable",
label = "Variable selection",
choices = c("temp","weight"),
selected = "weight",
multiple = FALSE),
mainPanel(
# Output
tabsetPanel(type = "tabs",
tabPanel("Plot", plotlyOutput('plot')),
tabPanel("Data", DT::dataTableOutput("table")),
tabPanel("Key_metrics", DT::dataTableOutput("Key_metrics")))
)
)
server <- function(input, output) {
dataDf <- reactive({
temp <- get(input$dataset)
})
output$plot <- renderPlotly(
plot_ly(dataDf(), x = ~time, y =~get(input$variable), type = 'scatter', mode = 'lines', name = "temp") %>%
add_trace(dataDf(), x = ~time, y = ~weight, type = 'scatter', mode = 'lines',name = "weight")
)
output$table <- DT::renderDataTable({
dataDf()
})
output$Key_metrics <- DT::renderDataTable({
})
}
shinyApp(ui,server)
您可以在layout()
中指定轴标签。 请注意, xaxis
和yaxis
需要一个列表作为参数(有关详细信息,请参见此处):
output$plot <- renderPlotly(
plot_ly(dataDf(), x = ~time, y =~get(input$variable), type = 'scatter', mode = 'lines', name = "temp") %>%
add_trace(dataDf(), x = ~time, y = ~weight, type = 'scatter', mode = 'lines',name = "weight") %>%
layout(xaxis = list(title = "Time"), yaxis = list(title = input$variable))
)
编辑:在评论之后,这里是如何 plot 如果选择了两个变量,则为两行,否则为另一行(不要忘记在selectInput()
中放置multiple = TRUE
:
library(shiny)
library(plotly)
library(DT)
df1 <- data.frame("time" = 1:10, "temp" = c(21,15,31,12,23,45,67,34,54,10), "weight" = c(10,20,30,40,65,35,68,89,100,23), stringsAsFactors = FALSE)
df2 <- data.frame("time" = 1:10, "temp" = c(31,65,31,22,23,45,67,54,54,45), "weight" = c(30,20,40,40,65,85,68,89,14,24), stringsAsFactors = FALSE)
ui <- fluidPage(
titlePanel( div(column(width = 5, h2('title here')), )),
# Input: Selector for choosing dataset
selectInput(inputId = "dataset",
label = "Choose a dataset:",
choices = c("df1","df2")),
selectInput(inputId = "variable",
label = "Variable selection",
choices = c("temp","weight"),
selected = "weight",
multiple = TRUE),
mainPanel(
# Output
tabsetPanel(type = "tabs",
tabPanel("Plot", plotlyOutput('plot')),
tabPanel("Data", DT::dataTableOutput("table")),
tabPanel("Key_metrics", DT::dataTableOutput("Key_metrics")))
)
)
server <- function(input, output) {
dataDf <- reactive({
temp <- get(input$dataset)
})
output$plot <- renderPlotly({
if (length(input$variable) > 1){
plot_ly(dataDf(), x = ~time, y =~get(input$variable[1]),
type = 'scatter', mode = 'lines', name = "temp") %>%
add_trace(dataDf(), x = ~time, y = ~get(input$variable[2]),
type = 'scatter', mode = 'lines',name = "weight") %>%
layout(xaxis = list(title = "Time"))
}
else {
plot_ly(dataDf(), x = ~time, y =~get(input$variable[1]), type = 'scatter', mode = 'lines', name = "temp") %>%
add_trace(dataDf(), x = ~time, y = ~get(input$variable[1]), type = 'scatter', mode = 'lines',name = "weight") %>%
layout(xaxis = list(title = "Time"), yaxis = list(title = input$variable))
}
})
output$table <- DT::renderDataTable({
dataDf()
})
output$Key_metrics <- DT::renderDataTable({
})
}
shinyApp(ui,server)
根据原始答案将您想要的内容作为 y 轴 label 。 请注意,此答案仅在有两种选择时才有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.