web-dev-qa-db-ja.com

selectInputに基づいてプロットチャートのy変数を変更します

シャイニーで正しくレンダリングされる単純な折れ線グラフを作成しています。

データセットに表示されるとおりに記述された、2つの異なるメジャーの名前を持つselectInputを追加しました。それに応じてy変数を変更したいのですが。

p <- plot_ly(data = LineChartData(), x= Calendar.Month, y = input$Measure, type = "line", group = Calendar.Year, col = Calendar.Year)

残念ながら、グラフは1点でレンダリングされます。 input $ Measureを取得して、データセットでそのフィールドを見つけていません。

Ggplotを使用するときは、aesをaes_stringに切り替えます。プロットに同様の解決策はありますか?

編集:ここにいくつかの再現可能なコードがあります

これがui.Rファイルです

    #ui.R

shinyUI(
  fluidPage(
    titlePanel("Inbound Intermediary Performance"),

  sidebarLayout(
    sidebarPanel(
    h4("Parameters"),
    br(),
    selectInput("Measure", "Measure", c("Var1","Var2"))
    ),
    mainPanel(

      plotlyOutput("lineChart")

      )

  )

        )

)

server.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")

  })

})

上記の例では、ドロップダウンを使用してVar1とVar2を切り替えることができます。私のプロットはそれに応じて変わります。コードはggplotを使用し、入力を受け取るのはaes_string関数です。次に、これはggplotly関数を使用してプロット的にインタラクティブなプロットに変換されます。

これをplotlyでネイティブに実行できる方法はありますか?

15
user1923975

Base :: get()関数を使用します:

p <- plot_ly(data = data, x = ~Month, y = ~get(input$Measure), type = "line")

またはggplotを使用して同じ:

p <- ggplot(data = data, aes(x = Month, y = get(input$Measure))) +
geom_line(size = 1.5) + 
theme_minimal()
ggplotly(p)
23
Oleksii