libreria - Cambie la gráfica del gráfico y la variable basada en selectInput
python plotly graphs (2)
Estoy creando un gráfico de líneas simple que se representa correctamente en Shiny.
Ahora agregué un SelectInput con los nombres de 2 medidas diferentes, escritas como aparecen en mi conjunto de datos. Me gustaría que mi variable y cambie en consecuencia.
p <- plot_ly(data = LineChartData(), x= Calendar.Month, y = input$Measure, type = "line", group = Calendar.Year, col = Calendar.Year)
Desafortunadamente, la tabla se representa con solo un punto. No está tomando la entrada $ Medir y encontrar ese campo en mi conjunto de datos.
Sé que al usar ggplot, cambiaría mi aes a aes_string. ¿Hay una solución similar en plotly?
EDITAR: aquí hay un código reproducible
Aquí está el archivo ui.R
#ui.R
shinyUI(
fluidPage(
titlePanel("Inbound Intermediary Performance"),
sidebarLayout(
sidebarPanel(
h4("Parameters"),
br(),
selectInput("Measure", "Measure", c("Var1","Var2"))
),
mainPanel(
plotlyOutput("lineChart")
)
)
)
)
servidor.R
#server.R
library(plotly)
library(shiny)
library(ggplot2)
#Create data
data <- data.frame(Month = c(1,2,3,4,5,6,7,8,9,10,11,12), Var1 = c(36,33,30,27,24,21,18,15,12,9,6,3), Var2 = c(4,8,12,16,20,24,28,32,36,40,44,48))
shinyServer(function(input, output) {
#Create plot
output$lineChart <- renderPlotly({
#using ggplot
p <- ggplot(data=data, aes_string(x=''Month'', y = input$Measure)) +geom_line(size = 1.5) + theme_minimal()
ggplotly(p)
#Using PLotly
#p <- plot_ly(data = data, x= Month, y = input$Measure, type = "line")
})
})
En el ejemplo anterior, puedo usar mi menú desplegable para cambiar entre Var1 y Var2. Mi trama cambia en consecuencia. El código usa ggplot y su función aes_string para tomar una entrada. Esto luego se convierte en un diagrama interactivo de plotly usando la función ggplotly.
¿Hay alguna manera de que pueda hacer esto de forma nativa con plotly?
Simplemente use los data[ ,input$Measure]
como su variable y:
p <- plot_ly(data = data, x= Month, y = data[ ,input$Measure], type = "line")
Use la función base :: get ():
p <- plot_ly(data = data, x = ~Month, y = ~get(input$Measure), type = "line")
o lo mismo usando ggplot:
p <- ggplot(data = data, aes(x = Month, y = get(input$Measure))) +
geom_line(size = 1.5) +
theme_minimal()
ggplotly(p)