Я хочу, чтобы мое блестящее приложение могло отображать фреймы данных с различным количеством столбцов.Поскольку я не ожидаю, что данные будут содержать более 5 столбцов, я написал явный список всех возможных случаев для объекта ggplot.Я также хочу, чтобы размер первого объекта был переменным с помощью ползунка в пользовательском интерфейсе.
Проблема в том, что значение этого ползунка распознается только для данных с более чем одним столбцом.
Чтобы проверить это, вот пример данных с одним столбцом данных: https://drive.google.com/file/d/182Qi-2I37OscSeLir_AyXdoedstIxx6D/view?usp=sharing
И здесь с двумя: https://drive.google.com/file/d/1eB0eKvgfj94xIp80P0SG3QnoGZJ1Zq9a/view?usp=sharing
Это мой первый вопрос, и я не уверен, как в идеале предоставить примеры для блестящих приложений, использующих fileInput.Пожалуйста, дайте мне знать, если есть лучший способ, чем этот.
#The ui
shinyUI(
pageWithSidebar(
headerPanel(""),
sidebarPanel(
fileInput(inputId = "file", label = "Choose an Excel (.xlsx) File",
multiple = FALSE,
accept = c("text/xlsx", "text/microsoft-excel-pen-XML-format-spreadsheet-file", ".xlsx"),
width = NULL, buttonLabel = "Find...",
placeholder = "No File selected"
),
sliderInput(inputId = "width", label = "width", min = 0.01, max = 0.4, value = 0.2, step = 0.01)),
mainPanel(plotOutput("graph"), height = "600px", quoted = TRUE)
)
)
#and the server
library(shiny)
library(ggplot2)
library(readxl)
shinyServer(function(input, output, session) {
data <- reactive({
data.frame(read_xlsx(input$file$datapath))
})
output$graph <- renderPlot({
print(
#somehow the interactive heigth setting is now muted within the expression
ggplot(data(), aes(x = data()[,1], y = "", fill = as.factor(data()[2:ncol(data())])) ) +
{if(ncol(data()) >= 2)geom_tile(aes(x = data()[,1], y = 0, fill = as.factor(data()[,2])), data(), width = 0.2, height = input$width, size = 2)} +
{if(ncol(data()) >= 3)geom_tile(aes(x = data()[,1], y = 0.125, fill = as.factor(data()[,3])), data(), width = 0.2, height = 0.02, size = 2)} +
{if(ncol(data()) >= 4)geom_tile(aes(x = data()[,1], y = -0.125, fill = as.factor(data()[,4])), data(), width = 0.2, height = 0.02, size = 2)} +
{if(ncol(data()) == 5)geom_tile(aes(x = data()[,1], y = -0.145, fill = as.factor(data()[,5])), data(), width = 0.2, height = 0.02, size = 2)}
scale_y_continuous(breaks = NULL, labels = NULL)
)
})
})