0

我正在尝试R使用ggplot packagein绘制一些图表ShinyDashboard。现在我被一个问题困住了。

在此处输入图像描述

在这个例子中,我有 6 个不同的品牌和 2 个不同的类别。我喜欢做的是,所有品牌都会被绘制成Brand7. 这意味着,所有品牌都应该有 2 列:Bike66Buss66。更重要的是,我总是有 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")
4

1 回答 1

2

如果您想以当前形式执行此操作,则必须添加零计数

但是您也可以通过方面解决它(请注意,我认为这与Shiny本身没有任何关系):

样本数据

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)

创建绘图

ggplot(df, aes(x=Category, y=USD, fill=Category)) +
  geom_bar(stat='identity', position="dodge") + facet_grid(~Brand) +
  theme_classic()

结果

在此处输入图像描述

于 2015-12-10T15:50:46.993 回答