我正在尝试R
使用ggplot package
in绘制一些图表ShinyDashboard
。现在我被一个问题困住了。
在这个例子中,我有 6 个不同的品牌和 2 个不同的类别。我喜欢做的是,所有品牌都会被绘制成Brand7
. 这意味着,所有品牌都应该有 2 列:Bike66
和Buss66
。更重要的是,我总是有 2 个类别,但它的名称可以更改(您可以在可重现的示例中使用滑块)。
可以使用 ggplot 设置解决问题,或者应该将一些零值的行添加到data.frame
?
总而言之,我无法找到合适的解决方案。
下面的可重现示例。
谢谢!
rm(list = ls())
library(shiny)
library(shinydashboard)
library(ggplot2)
# Header -----------------------------------------------------------
header <- dashboardHeader(title="Dashboard")
# Sidebar --------------------------------------------------------------
sm <- sidebarMenu(
menuItem(
text="Graph1",
tabName="Graph1",
icon=icon("home")
)
)
sidebar <- dashboardSidebar(sm)
# Body --------------------------------------------------
body <- dashboardBody(
# Layout --------------------------------------------
tabItems(
tabItem(
tabName="Graph1",
fluidPage(
fluidRow(
box(
title = "Season", width = 10, status = "info", solidHeader = TRUE,
sliderInput("Slider", "Size:",
min = 1, max = 99, value = c(66)),
plotOutput("Graph1"),
plotOutput("Graph2")
)
)
)
)
)
)
# Setup Shiny app UI components -------------------------------------------
ui <- dashboardPage(header, sidebar, body, skin="black")
# Setup Shiny app back-end components -------------------------------------
server <- function(input, output) {
# Generate data --------------------------------------
df <- reactive ({
set.seed(1992)
n=8
Category <- sample(c("Bike", "Bus"), n, replace = TRUE, prob = NULL)
Category <- paste0(Category, input$Slider)
Category <- as.factor(Category)
Brand <- sample("Brand", n, replace = TRUE, prob = NULL)
Brand <- paste0(Brand, sample(1:14, n, replace = TRUE, prob = NULL))
USD <- abs(rnorm(n))*1000
df <- data.frame(Brand, Category, USD)
})
# Inputs --------------------------------------
# Plot --------------------------------
output$Graph1 <- renderPlot({
ggplot(df(), aes(x=Brand, y=USD, fill=Category))+
geom_bar(stat='identity', position="dodge")