Использование 2 отдельных сюжетных (или ggplotly) графиков в tabsetPanel в блестящем приложении

Я использую пакет plotly для создания двух графиков, оформленных посредством их интеграции ggplotly на основе входных данных пользователя. пользователь получает доступ к каждому графику, используя выбор панели вкладок. К сожалению, при тестировании мне не удалось использовать пакет plotly для создания обоих графиков, не вызвав сбоя экземпляра R.

Пользовательский интерфейс с обычными ggplot2 функциями

вот данные, предложенные комментариями:

generationData = read.csv("data/statedata.csv", #"https://docs.google.com/spreadsheets/d/1ZbDI31sSKatBoEVKo70TV_A4VwCBHK4pIoCWXB7yfx0/pub?gid=192701245&single=true&output=csv", 
                      header = TRUE) #read csv file
generationDataCleaned = generationData[!(is.null(generationData$Name) | generationData$Name==""), ]

statenames = as.character(generationDataCleaned$Name) 
row.names(generationDataCleaned) = statenames

result() — это реактивная функция для расчета кадра данных результата, который использует график.

result <- reactive({
state = input$stateInput
pctCoal = input$Coal / 100
if(state == "") {
  #handle onload
  print("it was blank!")
  state = "Alabama"
  pctCoal = 15 / 100 
  }
     baseCoal_Energy = generationDataCleaned[state, "Coal.Steam.Electric.Generation..MWh."]
     baseNGCC_Energy = generationDataCleaned[state, "NGCC.Electric.Generation..MWh."]

totalEnergy = sum(baseCoal_Energy,
                  baseNGCC_Energy
)
baseEnergy = totalEnergy

coalEnergy_Reduction = (pctCoal) * baseCoal_Energy

newCoal_Energy = (1 - pctCoal) * baseCoal_Energy
newNGCC_Energy =  baseNGCC_Energy + coalEnergy_Reduction

newEnergy = newCoal_Energy + newNGCC_Energy
Energy_Frame <- c(baseEnergy, newEnergy)

#Emissions Rate
baseCoal_CO2_Rate = generationDataCleaned[state, "Coal.Steam.Emission.Rate..lb.MWh."]
baseNGCC_CO2_Rate = generationDataCleaned[state, "NGCC.Emission.Rate..lb.MWh."]

totalCO2_Rate = sum(baseCoal_CO2_Rate,
                    baseNGCC_CO2_Rate
                    )
baseCO2_Rate = totalCO2_Rate

coalCO2_Rate_Reduction = (pctCoal) * baseCoal_CO2_Rate

newCoal_CO2_Rate = (1 - pctCoal) * baseCoal_CO2_Rate

newNGCC_CO2_Rate =  baseNGCC_CO2_Rate + coalEnergy_Reduction * baseNGCC_CO2_Rate / baseNGCC_Energy

newCO2_Rate = newCoal_CO2_Rate + newNGCC_CO2_Rate

CO2_Rate_Frame <- c(baseCO2_Rate, newCO2_Rate) 

#Emissions Mass

baseCoal_CO2_Mass = generationDataCleaned[state, "Coal.Steam.Carbon.Dioxide.Emissions..tons."]
baseNGCC_CO2_Mass = generationDataCleaned[state, "NGCC.Carbon.Dioxide.Emissions..tons."]


totalCO2_Mass = sum(baseCoal_CO2_Mass,
                    baseNGCC_CO2_Mass
                    )
baseCO2_Mass = totalCO2_Mass

coalCO2_Mass_Reduction = (pctCoal) * baseCoal_CO2_Mass

newCoal_CO2_Mass = (1 - pctCoal) * baseCoal_CO2_Mass

newNGCC_CO2_Mass =  baseNGCC_CO2_Mass + coalEnergy_Reduction * baseNGCC_CO2_Mass / baseNGCC_Energy

newCO2_Mass = newCoal_CO2_Mass + newNGCC_CO2_Mass

CO2_Mass_Frame <- c(baseCO2_Mass, newCO2_Mass) 

name_Frame <- c("Base", "New")

result <- data.frame(name_Frame, Energy_Frame, CO2_Rate_Frame, CO2_Mass_Frame)

colnames(result) <- c("Name", "Energy", "Rate", "Mass")

result
})

ui.R

column(8,
       tabsetPanel(type = "tabs", 
                   id = "tabset1",
                   tabPanel("Rate", value = "Rate", plotlyOutput("ratePlot")),
                   tabPanel("Mass", value = "Mass", plotlyOutput("massPlot"))#, plotOutput("massPlot"))
                  )

server.R

output$ratePlot <- renderPlotly({
  gg <- ggplot(result(), aes(x = Name, y = Rate, fill = Name)) +
    theme_minimal() +
    geom_bar(stat = "identity") + 
    scale_fill_brewer(type = "qual", palette = 1)
  #gg
  p <- ggplotly(gg)
  p
})

output$massPlot <- renderPlotly({
  gg2 <- ggplot(result(), aes(x = Name, y = Mass, fill = Name)) +
    theme_minimal() +
    geom_bar(stat = "identity") + 
    scale_fill_brewer(type = "qual", palette = 1)
  #gg2
  p2 <- ggplotly(gg2)
  p2
})

Но когда я делаю обычный ggplot2, tabPanel работает нормально:

ui.R

       tabsetPanel(type = "tabs", 
                   id = "tabset1",
                   tabPanel("Rate", value = "Rate", plotOutput("ratePlot")),
                   tabPanel("Mass", value = "Mass", plotOutput("massPlot"))#, plotlyOutput("massPlot"))
                  )

server.R

output$ratePlot <- renderPlot({ #ly
  gg <- ggplot(result(), aes(x = Name, y = Rate, fill = Name)) +
    theme_minimal() +
    geom_bar(stat = "identity") + 
    scale_fill_brewer(type = "qual", palette = 1)
  gg
  #p <- ggplotly(gg)
  #p
})

output$massPlot <- renderPlot({
  gg2 <- ggplot(result(), aes(x = Name, y = Mass, fill = Name)) +
    theme_minimal() +
    geom_bar(stat = "identity") + 
    scale_fill_brewer(type = "qual", palette = 1)
  gg2
})

Есть ли какие-то функции, которые мне нужно изменить?


person Alex Pawlowski    schedule 04.12.2015    source источник
comment
в вашем первом выходе $massPlot p2 не печатается   -  person MLavoie    schedule 04.12.2015
comment
ой, извините, я забыл указать это в этой строке кода, я отредактирую, чтобы отразить это изменение.   -  person Alex Pawlowski    schedule 04.12.2015
comment
Мне еще предстоит использовать ggplotly с блестящим, но разве у вас не должно быть имени пользователя или пароля для использования сюжета?   -  person MLavoie    schedule 04.12.2015
comment
@MLavoie Think изменился, теперь с открытым исходным кодом   -  person pssguy    schedule 04.12.2015
comment
@Alex поможет получить некоторые данные. Вы пытались просто вывести plotlyOutput(ratePlot) plotlyOutput(massPlot) без какой-либо панели/панели/колонки набора вкладок. Может помочь определить проблемную область   -  person pssguy    schedule 04.12.2015
comment
да, подкину данные. У меня есть имя пользователя и пароль, но те, которые вы упаковываете в инструмент при запуске с пакетом, вы устанавливаете его один раз, и все готово.   -  person Alex Pawlowski    schedule 05.12.2015
comment
@pssguy отличное предложение. Я попытался вывести plotlyOuput, но, к сожалению, это не решило проблему.   -  person Alex Pawlowski    schedule 05.12.2015
comment
Боюсь, без радости. Если я заменю if(state == ) на if(is.null(state) , я получу сюжетную версию ratePlot, отображаемую inc в версии вкладки, но не MassPlot, даже когда я закомментирую код ratePlot, что странно, но может быть до пива или два. Вы можете попробовать функцию plot_ly в качестве альтернативы   -  person pssguy    schedule 05.12.2015
comment
@pssguy :/ хорошо, спасибо, я ценю это. Я думаю, что это может быть ошибка с пакетом plotly или что-то за кулисами с распределением, которое позволяет использовать только 1. да, я попробую просто plot_ly вместо интеграции с ggplotly   -  person Alex Pawlowski    schedule 05.12.2015


Ответы (1)


На данный момент кажется, что нет решения для использования панелей с вкладками с ggplot2 интеграцией в plotly (ggplotly()). Обошел эту проблему, просто используя plotly() для каждого графика между вкладками.

person Alex Pawlowski    schedule 16.12.2015