【问题标题】:ggplot in Shiny r does not showShiny r中的ggplot不显示
【发布时间】:2019-03-06 08:44:32
【问题描述】:

我正在尝试在 R Shiny 中创建动态图,但该图未显示在仪表板中。

我将在闪亮的应用程序中上传以下测试数据:

Region.1=c( 375.00,375.00,370.00,350.00,350.00,305.00,300.00,250.00,245.00,240.00,235.00,225.00,215.00,200.00,100.00,100.00,100.00,100.00,100.00,100.00)
Region.2 =c(0.00,0.00,0.00,0.00,0.00,200.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,20.00,500.00,235.00,0.00)
Region.3 =c(100000.00,76000.00,60000.00,50000.00,50000.00,30000.00,30000.00,26000.00,19000.00,11000.00,10000.00,8000.00,7000.00,5000.00,4070.00,4000.00,3660.00,2585.00,2550.00,250.00)
Type=c("B","F","F","B","B","A","A","F","F","B","A","B","F","B","F","F","A","A","F","B")
data <- data.frame("Region.1"=Region.1, "Region.2"=Region.2, "Region.3"=Region.3, "Type"=Type)

我的 Shiny 脚本如下所示(简化代码)

服务器.R

function(input, output,session) {

  myData <- reactive({
    req(input$file)
    inFile <- input$file
    if(is.null(inFile)){return(NULL)}
    read.csv(inFile$datapath, header = TRUE, sep = input$sep,
             quote = '""')

  })

  df<-reactive({

    df<-myData()
    dfType <- df[ , grepl( "Type" , names( df ) ) ]
    dfRegion<-df[ , grepl( "Region" , names( df ) ) ]

    df4<-cbind(dfType, dfRegion)
    colnames(df4)[which(names(df4) == "dfType")] <- "Type"
    colnames(df4)[which(names(df4) == "dfRegion")] <- "Region"
    df4[df4==""] <- NA
    df4 <- na.omit(df4)
    return(df4)
  })


  df.datasets <- reactive({
      df<-df()
      df<- melt(df,id.vars=c("Type"),
                measure.vars=c("Region.1", "Region.2", "Region.3"))
      test<-aggregate(df$value, by=list(Region=df$variable, Type=df$Type), FUN=sum)
      test<-test %>% group_by(Region) %>% transmute(Type, percent = (x/sum(x))*100)
      test$percent<-round(test$percent, digits = 0)
      test[test==0] <- NA
      test<-test[complete.cases(test),]

  })


  output$plot1<-renderPlot({
    blank_theme <- theme_minimal()+
      theme(
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        panel.border = element_blank(),
        panel.grid=element_blank(),
        axis.ticks = element_blank(),
        plot.title=element_text(size=14, face="bold")
      )

    test<-df.datasets()
    levels(test$"Region")[levels(test$"Region") %in% c("Region.1")] <- "Region 1"
    levels(test$"Region")[levels(test$"Region") %in% c("Region.2")] <- "Region 2"
    levels(test$"Region")[levels(test$"Region") %in% c("Region.3")] <- "Region 3"
    levels(test$"Region")[levels(test$"Region") %in% c("Region.4")] <- "Region 4"

    p<-ggplot(test,
              aes(x =" ", y = percent, fill = Type))+
      geom_bar(width = 1, stat = "identity",position="fill", color="grey35")+
      coord_polar("y")+
      facet_grid(.~Region)+
      geom_text(aes( label= paste(percent, "%")) ,
                position=position_fill(0.5),  size=4.5)+
                 theme(axis.text.x=element_blank(),
                       strip.text.x = element_text(size=15, color="black", face="bold"),
                       strip.text.y = element_text(size=15, color="black", face="bold"),
                       legend.text = element_text(size=15),
                       legend.title = element_text(size=15, face="bold"),
                       plot.title = element_text(hjust = 0.5, size = 25),
                       axis.text=element_text(size=10))
      })
}

我的 ui.R

myData <- NULL
sidebar <- dashboardSidebar(
  sidebarMenu(
    fileInput('file', 'Upload File (.csv | .txt)',
              accept=c('text/csv', 
                       'text/comma-separated-values,text/plain', 
                       '.csv')),
    radioButtons('sep', 'File Type',
                 c(CSV=';',
                   Text='\t'))
    #actionButton("goButton", "  Legenda", icon = icon("play-circle"))

  )
)

dashboardPage(
  dashboardHeader(title = "Overview"),

  sidebar,
  dashboardBody(tags$style("image {max-width: 100%; width: 100%; height: auto}"),
                fluidRow(
                  tabBox(
                    title = " ",
                    # The id lets us use input$tabset1 on the server to find the current tab
                    id = "tabset1",
                    height = "1200px", width = "1000px"
                    ,
                    tabPanel( "Plots",  
                              column(12,
                                     plotOutput("plot1"))

                  )

                )
  )))

我试图删除我的代码以检测错误,但我找不到它。当我在 Shiny 之外运行代码时,情节确实显示为: 我也没有收到任何错误消息。所以我认为情节是有效的,但不知何故它没有显示。我尝试修改列的大小,但没有奏效..

我想要这样的结果:

有人有想法吗?非常感谢,谢谢:)

【问题讨论】:

    标签: r ggplot2 shiny


    【解决方案1】:

    看起来您将绘图分配给 p 然后从未在 renderPlot 块中调用 p,如果您只是在块的末尾添加 p 会发生什么?

    【讨论】:

    • 非常感谢!显然我在我的例子中犯了这个超级愚蠢的错误,但是在查看了我的完整代码之后,我确实发现 return() 结构根本不正确,所以感谢您指出它,帮了很多忙并修复了它:)跨度>
    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2019-05-25
    相关资源
    最近更新 更多