仪表板显示问题/布局/绘图/反应/UI
Dashboard display issues / layout / plot / reactive / UI
我正在尝试制作一个包含 3 页(dtable、销售、预测)的 shiny 仪表板,目前只有第一页 - 数据 table 显示。
销售选项卡显示了所有按钮,但没有显示任何图表。预测选项卡也是如此。另外,我该如何调整它,使所有按钮都以统一的方式位于左侧,然后是图表?
我的做法对吗?还是我应该使用条件面板?不能搞清楚这里出了什么问题。
我现在想让所有 3 个选项卡都响应各自的图。
任何帮助,将不胜感激。谢谢
wmp <- read.csv("ABC.csv",stringsAsFactors = FALSE)
UI 基本布局
ui <- dashboardPage(skin=c("blue"),
dashboardHeader(title = "Layout"),
dashboardSidebar(id="",
sidebarMenu(menuItem("Data Table", tabName = "Data_Table", icon = icon("table")),
menuItem("Sales Performance", tabName = "Sales_Performance",icon = icon("bar-chart-o")),
menuItem("Forecast",tabName = "Fore_Cast",icon = icon("bolt"))
)
),
#Main Body
dashboardBody(tabItems(
tabItem(tabName = "Data_Table",
box(title = "Data Table ",width=50,
column(2,
selectInput("PInput","Product:",c("All",unique(wmp$Product)))),
column(2,
selectInput("CInput","Category:",c("All",unique(wmp$Category)))),
column(4,
selectizeInput("PSCInput","Product Sub Category:",c("All",unique(wmp$sub.category))))), DT::dataTableOutput("table")),
tabItem(tabName = "Sales_Performance",
sidebarMenu(fluidRow(title= "Sales Breakdown",width = 500,
column(4,
sliderInput("monthInput","Month",min=1,max = 12,step = 1,c(25,45)),br()),
column(4,
selectizeInput("weekInput","Week",choices=unique(wmp$week),br())),
column(7,
selectizeInput("wdayInput","Week day",choices=unique(wmp$wday))),
column(4,
checkboxGroupInput("yearInput","Year",choices = unique(wmp$year))))),plotOutput("plot1")
#br(),br(),
#tableOutput("Results")
),
tabItem(tabName = "Fore_cast",width=400,
#UI buttons/options to be added later,
title="Plot2",plotOutput("plot2"))
)))
服务器反应部分
server <- function(input,output) {
#For Data table
output$table <- DT::renderDataTable(DT::datatable({
data1 <- wmp
if (input$PInput != "All") {
data <- data1[data1$Product == input$PInput,] }
if (input$CInput != "All") {
data <- data1[data1$Category == input$CInput,] }
if (input$PSCInput != "All") {
data1 <- data1[data1$sub.category == input$PSCInput,] }
data1
}))
#For interactive plot
filtered <- reactive({
if (is.null(input$yearInput)) {
return(NULL)
}
wmp %>% filter(
year == input$yearInput,
week == input$weekInput,
wday == input$wdayInput,
month >= input$monthInput[1],
month <= input$monthInput[2]
)})
output$plot1 <- renderPlot({
wmp2 <- data.frame(filtered())
avg <- mean((wmp2$Amount))
plotwmp2 <- ggplot(filtered(),aes(Date,Amount,group=filtered()$year,color=filtered()$year)) + scale_x_date() + geom_point() + geom_line() + xlab("Yearly Span") + theme_grey() + ggtitle("Weekly breakdown") + geom_hline(yintercept=avg,linetype="dashed", color = "red")
plotwmp2
})
#For Time series, sample plot.
output$plot2 <- renderPlot({
plot.ts(wmp$Amount)})}
#Final App
shinyApp(ui=ui, server=server)
如果您想在左侧放置按钮并在右侧放置绘图,我认为您应该将页面分成两部分。像这样:
tabItem(tabName = "Sales_Performance",
fluidRow(title= "Sales Breakdown",width = 500,
column(4,
sliderInput("monthInput","Month",min=1,max = 12,step = 1,c(25,45)),
br(),
selectizeInput("weekInput","Week",choices=unique(wmp$week)),
br(),
selectizeInput("wdayInput","Week day",choices=unique(wmp$wday)),
br(),
checkboxGroupInput("yearInput","Year",choices = unique(wmp$year))
),
column(8,
plotOutput("plot1")
)
)
)
也可以放在boxes.
如果您提供数据样本,绘图问题将更容易理解和解决。据我判断,plot2 的问题不应该。
plot1 代码部分 "plotwmp2" 的末尾有额外的字符,就在右方括号“})”之前。
更新。 Plot2 没有出现,因为您在 menuItem 和 tabItem 中有不同的标签 - "Fore_Cast" 和 "Fore_cast" 分别。
关于情节 1。当我 运行 应用程序时,我看到了这个:"Error:object 'Date' not found",所以我查看了代码输出 $plot1。你用这个:
aes(日期,金额,组=过滤()$年,颜色=过滤()$年)
我将其更正为 filtered()$Date,filtered()$Amount 并且出现了图。但前提是part
scale_x_date()
评论了。如果我使用 "scale_x_date()",则会出现错误:无效输入:date_trans 仅适用于 class 日期的对象。也许你应该通过 mutate 方法来转换此列。
销售选项卡显示了所有按钮,但没有显示任何图表。预测选项卡也是如此。另外,我该如何调整它,使所有按钮都以统一的方式位于左侧,然后是图表?
我的做法对吗?还是我应该使用条件面板?不能搞清楚这里出了什么问题。 我现在想让所有 3 个选项卡都响应各自的图。 任何帮助,将不胜感激。谢谢
wmp <- read.csv("ABC.csv",stringsAsFactors = FALSE)
UI 基本布局
ui <- dashboardPage(skin=c("blue"),
dashboardHeader(title = "Layout"),
dashboardSidebar(id="",
sidebarMenu(menuItem("Data Table", tabName = "Data_Table", icon = icon("table")),
menuItem("Sales Performance", tabName = "Sales_Performance",icon = icon("bar-chart-o")),
menuItem("Forecast",tabName = "Fore_Cast",icon = icon("bolt"))
)
),
#Main Body
dashboardBody(tabItems(
tabItem(tabName = "Data_Table",
box(title = "Data Table ",width=50,
column(2,
selectInput("PInput","Product:",c("All",unique(wmp$Product)))),
column(2,
selectInput("CInput","Category:",c("All",unique(wmp$Category)))),
column(4,
selectizeInput("PSCInput","Product Sub Category:",c("All",unique(wmp$sub.category))))), DT::dataTableOutput("table")),
tabItem(tabName = "Sales_Performance",
sidebarMenu(fluidRow(title= "Sales Breakdown",width = 500,
column(4,
sliderInput("monthInput","Month",min=1,max = 12,step = 1,c(25,45)),br()),
column(4,
selectizeInput("weekInput","Week",choices=unique(wmp$week),br())),
column(7,
selectizeInput("wdayInput","Week day",choices=unique(wmp$wday))),
column(4,
checkboxGroupInput("yearInput","Year",choices = unique(wmp$year))))),plotOutput("plot1")
#br(),br(),
#tableOutput("Results")
),
tabItem(tabName = "Fore_cast",width=400,
#UI buttons/options to be added later,
title="Plot2",plotOutput("plot2"))
)))
服务器反应部分
server <- function(input,output) {
#For Data table
output$table <- DT::renderDataTable(DT::datatable({
data1 <- wmp
if (input$PInput != "All") {
data <- data1[data1$Product == input$PInput,] }
if (input$CInput != "All") {
data <- data1[data1$Category == input$CInput,] }
if (input$PSCInput != "All") {
data1 <- data1[data1$sub.category == input$PSCInput,] }
data1
}))
#For interactive plot
filtered <- reactive({
if (is.null(input$yearInput)) {
return(NULL)
}
wmp %>% filter(
year == input$yearInput,
week == input$weekInput,
wday == input$wdayInput,
month >= input$monthInput[1],
month <= input$monthInput[2]
)})
output$plot1 <- renderPlot({
wmp2 <- data.frame(filtered())
avg <- mean((wmp2$Amount))
plotwmp2 <- ggplot(filtered(),aes(Date,Amount,group=filtered()$year,color=filtered()$year)) + scale_x_date() + geom_point() + geom_line() + xlab("Yearly Span") + theme_grey() + ggtitle("Weekly breakdown") + geom_hline(yintercept=avg,linetype="dashed", color = "red")
plotwmp2
})
#For Time series, sample plot.
output$plot2 <- renderPlot({
plot.ts(wmp$Amount)})}
#Final App
shinyApp(ui=ui, server=server)
如果您想在左侧放置按钮并在右侧放置绘图,我认为您应该将页面分成两部分。像这样:
tabItem(tabName = "Sales_Performance",
fluidRow(title= "Sales Breakdown",width = 500,
column(4,
sliderInput("monthInput","Month",min=1,max = 12,step = 1,c(25,45)),
br(),
selectizeInput("weekInput","Week",choices=unique(wmp$week)),
br(),
selectizeInput("wdayInput","Week day",choices=unique(wmp$wday)),
br(),
checkboxGroupInput("yearInput","Year",choices = unique(wmp$year))
),
column(8,
plotOutput("plot1")
)
)
)
也可以放在boxes.
如果您提供数据样本,绘图问题将更容易理解和解决。据我判断,plot2 的问题不应该。 plot1 代码部分 "plotwmp2" 的末尾有额外的字符,就在右方括号“})”之前。
更新。 Plot2 没有出现,因为您在 menuItem 和 tabItem 中有不同的标签 - "Fore_Cast" 和 "Fore_cast" 分别。
关于情节 1。当我 运行 应用程序时,我看到了这个:"Error:object 'Date' not found",所以我查看了代码输出 $plot1。你用这个: aes(日期,金额,组=过滤()$年,颜色=过滤()$年) 我将其更正为 filtered()$Date,filtered()$Amount 并且出现了图。但前提是part
scale_x_date()
评论了。如果我使用 "scale_x_date()",则会出现错误:无效输入:date_trans 仅适用于 class 日期的对象。也许你应该通过 mutate 方法来转换此列。