#shiny
#блестящий
Вопрос:
Я потратил два дня, пытаясь создать блестящее приложение, но безрезультатно. Это нормально, просто запускать примеры, но когда я хочу изменить его по своему усмотрению, я просто получаю постоянные ошибки и недостаток функциональности.
У меня есть простой набор данных из 100 X наблюдений и 100 Y наблюдений. Я хочу построить гистограммы как для X, так и для Y с помощью ползунков для ячеек. Я также хочу создать диаграмму рассеяния Y на X. Я был бы очень признателен за помощь здесь.
Я не новичок в R, но я новичок в Shiny. Есть ли способ, которым я могу использовать ggplot для создания визуальных эффектов?
Большое спасибо.
Комментарии:
1. Начните со встроенной функциональности R, а также с шаблона примера shiny. Используйте
shiny::renderPlot()
. ВнутриrenderPlot()
вернитеhist()
(для гистограммы) иplot()
(для точечной диаграммы) с соответствующими параметрами, которые вы упомянули в своем сообщении. Кажется, что X и Y являются статическими, поэтому вы можете сохранить их, например, в своей глобальной области.2. Спасибо за ответ. 🙂
Ответ №1:
Это краткий пример с двумя разными макетами. Используйте один из пользовательских интерфейсов.R конечно. Поставьте глобальный.R в той же папке, что и пользовательский интерфейс.R и server.R
ui.R v1
library(shiny)
library(ggplot2)
shinyUI(fluidPage(
titlePanel("Quick Shiny Example"),
sidebarLayout(
sidebarPanel(
sliderInput("xBins",
"Number of bins for X variable:",
min = 1,
max = 50,
value = 30),
sliderInput("yBins",
"Number of bins for Y variable:",
min = 1,
max = 50,
value = 30)
),
mainPanel(
plotOutput("xDistPlot"),
plotOutput("yDistPlot"),
plotOutput("xyScatterPlot")
)
)
))
ui.R v2
library(shiny)
library(ggplot2)
shinyUI(fluidPage(
titlePanel("Quick Shiny Example"),
fluidRow(
column(width = 4,
sliderInput("xBins",
"Number of bins for X variable:",
min = 1,
max = 50,
value = 30)
),
column(width = 4,
sliderInput("yBins",
"Number of bins for Y variable:",
min = 1,
max = 50,
value = 30)
),
column(width = 4)
),
fluidRow(
column(width = 4,
plotOutput("xDistPlot")
),
column(width = 4,
plotOutput("yDistPlot")
),
column(width = 4,
plotOutput("xyScatterPlot")
)
)
))
server.R
library(shiny)
library(ggplot2)
shinyServer(function(input, output) {
output$xDistPlot <- renderPlot({
g <- ggplot(df, aes(x = x))
g <- g geom_histogram(bins = input$xBins)
g
})
output$yDistPlot <- renderPlot({
g <- ggplot(df, aes(x = y))
g <- g geom_histogram(bins = input$yBins)
g
})
output$xyScatterPlot <- renderPlot({
g <- ggplot(df, aes(x = x, y = y))
g <- g geom_point()
g
})
})
global.R
df <- data.frame(
x = rnorm(100),
y = rnorm(100)*2
)
Ответ №2:
Вот мой ответ, со случайными числами для X
и Y
, просто как быстрая идея. Добавление ggplot к этому должно быть простым.
library(shiny)
ui <- shinyUI(
fluidPage(
sliderInput("nrBinsX", "Number of bins to display for X", min = 2, max = 10, value = 5),
plotOutput("histX"),
sliderInput("nrBinsY", "Number of bins to display for Y", min = 2, max = 10, value = 5),
plotOutput("histY"),
plotOutput("scatterXY")
)
)
server <- shinyServer(function(input, output, session) {
dataFrame <- data.frame (
"X" = sample(100,100,replace = T),
"Y" = sample(100,100,replace = T)
)
getHist <- function (var,nr){
return (hist(
x = var,
breaks = seq(0,100,100/nr),
freq = T
) )
}
output$histX <- renderPlot({
return(
getHist( var = dataFrame$X,
nr = input$nrBinsX
) ) })
output$histY <- renderPlot({
return( return(
getHist( var = dataFrame$Y,
nr = input$nrBinsY
)
) ) })
output$scatterXY <- renderPlot({
return(
plot(x = dataFrame$X,
y = dataFrame$Y)
)
})
})
shinyApp(ui = ui, server = server)
Комментарии:
1. Большое вам спасибо. Я потратил много часов на поиск в Интернете четкого, хорошо структурированного примера, подобного этому. 🙂