尽管没有任何错误,Renderplotly还是不起作用

时间:2019-07-17 23:47:55

标签: r ggplot2 shiny r-plotly

我将renderPlotly用于闪亮的ggplot图。当我运行该应用程序时,未显示任何错误,但也未绘制任何图。我的代码有问题吗?

这是我的数据集的一个例子

year region     mean_price
  <int> <fct>           <dbl>
1  2007 Central       360769.
2  2007 East          255519.
3  2007 North         218453.
4  2007 North_East    263780.
5  2007 West          233401.
6  2008 Central       429607.

这是我的代码

library("shiny")
library("shinythemes")
library('plotly')
ui <-fluidPage(
    theme=shinytheme("superhero"),
    titlePanel("Average Resale Prices "),
    sidebarLayout(
        sidebarPanel(
            selectInput("year","Year", choices = c("All","2007","2008",
                                                   "2009","2010","2011",
                                                   "2012","2013","2014",
                                                   "2015","2016","2017"), selected="All"),
            selectInput("region",'Region',choices=c("All",'North','Central','North-East','West','East'),selected="All"),

            selectInput("type","Flat-Type",choices = c("All","3 ROOM",'4 ROOM',"5 ROOM"),selected = "All"),width = 2
        ),
        mainPanel(
            tabsetPanel(
                tabPanel("Summary", plotOutput(outputId = "lineChart")),
                tabPanel("Breakdown", plotOutput(outputId = "lineChart1")), 
                type="tab"

            )

        )
    )
)



# Define server logic required to draw a line graph ----

server <- function(input, output, session){
    #df1<-reactive({
    #if(input$type =="All"){
    # plotdata1%>%
    #dplyr::filter(flat_type %in% c("3 ROOM","4 ROOM","5 ROOM"))
    #  }

    # else{
    # plotdata1%>%
    # dplyr::filter(flat_type %in% input$type)
    #   }
    # })


    plotdata1<-data1 %>% 
        group_by(year, region) %>% 
        summarize(mean_price=mean(resale_price))



    options(scipen = 100000)

    output$lineChart <- renderPlotly({
        ggplot(data=plotdata1,aes(x=year,y=mean_price))+
            geom_line(stat = 'identity',aes(colour=region,group=region))+
            geom_point()+
            xlim(c(2006,2018))+
            ylab("Average Price")+
            xlab('Year')

})

}


# Create Shiny object
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

如上所述

如果您打算使用ggplotly来绘制图形,则需要使用plotly。这也意味着您需要在plotlyOutput中使用ui

另外,请确保已安装所有要使用的库。即使未安装shinythemes,我似乎也没有收到错误消息...虽然不太可能。

以下代码为我运行,生成一个plotly图。

library("shiny")
library("shinythemes")
library('plotly')
library("dplyr")

year <- c(2007,2007,2007,2007,2007,2008)
region <- c("central", "East", "North", "North_East", "West", "Central")
resale_price <- c(360769, 255519, 218453, 263780, 233401, 429607)
data1 <- data.frame(year,region,resale_price)

ui <-fluidPage(
  theme=shinytheme("superhero"),
  titlePanel("Average Resale Prices "),
  sidebarLayout(
    sidebarPanel(
      selectInput("year","Year", choices = c("All","2007","2008",
                                             "2009","2010","2011",
                                             "2012","2013","2014",
                                             "2015","2016","2017"), selected="All"),
      selectInput("region",'Region',choices=c("All",'North','Central','North-East','West','East'),selected="All"),

      selectInput("type","Flat-Type",choices = c("All","3 ROOM",'4 ROOM',"5 ROOM"),selected = "All"),width = 2
    ),
    mainPanel(
      tabsetPanel(
        tabPanel("Summary", plotlyOutput("lineChart")),
        type="tab"
      ))
  )
)

# Define server logic required to draw a line graph ----

server <- function(input, output, session){

  plotdata1<-data1 %>% 
    group_by(year, region) %>% 
    summarize(mean_price=mean(resale_price))

  options(scipen = 100000)

  output$lineChart <- renderPlotly({
   p <- ggplot(data=plotdata1,aes(x=year,y=mean_price))+
      geom_line(stat = 'identity',aes(colour=region,group=region))+
      geom_point()+
      xlim(c(2006,2018))+
      ylab("Average Price")+
      xlab('Year')
   p <- ggplotly(p)
   p
  })

}

# Create Shiny object
shinyApp(ui = ui, server = server)

输出

snippet