Я изучаю Shiny и хотел помочь в приложении, которое я создаю. Я создаю приложение, которое будет принимать динамические входы от пользователя и должно генерировать штриховые и линейные диаграммы. Мне удалось создать гистограмму, но она порождает неверный результат.
То, что я ищу, - это переменная, выбранная в строке, должна быть моей осью x, а ось y должна быть в процентах. масштаб должен быть 100%. переменная столбца должна быть переменной для сравнения, и для этого я использую position = "dodge"
. Мои данные большие, и я создал образец данных, чтобы изобразить ситуацию. Поскольку фактические данные находятся в формате data.table, я храню образцы данных в виде data.table. Поскольку я не уверен, как включить эти данные, которые не находятся в формате файла, я сначала создаю его, чтобы он находился в среде R, а затем запустил приложение -
Location <- sample(1:5,100,replace = T)
Brand <- sample(1:3,100,replace = T)
Year <- rep(c("Year 2014","Year 2015"),50)
Q1 <- sample(1:5,100,replace = T)
Q2 <- sample(1:5,100,replace = T)
mydata <- as.data.table(cbind(Location,Brand,Year,Q1,Q2))
Ниже приведен код Shiny, который я использую -
library("shiny")
library("ggplot2")
library("scales")
library("data.table")
library("plotly")
ui <- shinyUI(fluidPage(
sidebarPanel(
fluidRow(
column(10,
div(style = "font-size: 13px;", selectInput("rowvar", label = "Select Row Variable", ''))
),
tags$br(),
tags$br(),
column(10,
div(style = "font-size: 13px;", selectInput("columnvar", "Select Column Variable", ''))
))
),
tabPanel("First Page"),
mainPanel(tabsetPanel(id='charts',
tabPanel("charts",tags$b(tags$br("Graphical Output" )),tags$br(),plotlyOutput("plot1"))
)
)
))
server <- shinyServer(function(input, output,session){
updateTabsetPanel(session = session
,inputId = 'myTabs')
observe({
updateSelectInput(session, "rowvar", choices = (as.character(colnames(mydata))),selected = "mpg")
})
observe({
updateSelectInput(session, "columnvar", choices = (as.character(colnames(mydata))),selected = "cyl")
})
output$plot1 <- renderPlotly({
validate(need(input$rowvar,''),
need(input$columnvar,''))
ggplot(mydata, aes(x= get(input$rowvar))) +
geom_bar(aes(y = ..prop.., fill = get(input$columnvar)), position = "dodge", stat="count") +
geom_text(aes( label = scales::percent(..prop..),
y= ..prop.. ), stat= "count", vjust = -.5) +
labs(y = "Percent", fill=input$rowvar) +
scale_y_continuous(labels=percent,limits = c(0,1))
})
})
shinyApp(ui = ui, server = server)
Если вы видите проблему -
-
Все бары 100%. Пропорции не рассчитываются должным образом. Не знаю, где я ошибаюсь.
-
Если я пытаюсь использовать параметр группы, он дает мне ошибку, говорящую, что переменная "input" не найдена. Я попробовал дать группе как
group = get(input$columnvar)
-
Я считаю, что мне нужно реструктурировать свои данные для линейной диаграммы. Можете ли вы помочь с тем, как я могу динамически реструктурировать таблицу data.table, а затем повторно использовать для линейной диаграммы. Как я могу сгенерировать одну и ту же гистограмму в виде линейной диаграммы.
-
Я использую renderplotly, чтобы использовать функции plotly, чтобы отображать проценты с движением/увеличением мыши и т.д. Однако я могу видеть переменную $$ при перемещении мыши. Как я могу избавиться от него и иметь собственные имена.
Попробовали подробно изложить ситуацию. Предлагайте некоторое решение.
Спасибо!