1

我在我的 shinydashboard 应用程序(https://plot.ly/r/shiny-tutorial/)中使用 Plotly 的教程进行闪亮。

出于某种原因,每当我运行应用程序并转到 Plotly 选项卡时,如果我尝试与绘图交互,通常位于 Plotly 绘图右上角的按钮会变得如此之大,它们会使绘图黯然失色。

大按钮

这是我的用户界面代码:

library(ggplot2)
library(plyr)
library(rCharts)
library(shiny)
library(xtable)
library(shinythemes)
library(shinydashboard)
library(dplyr)
library(plotly)
PopData <- read.csv("CountyPopLong.csv", header=T)
ChangeData <- read.csv("CountyChangeLong.csv", header=T)
CountyPop <- read.csv("CountyPopWide.csv", header=T)
CountyChange <- read.csv("CountyChangeWide.csv", header=T)
CntyInfo <- read.csv("CntyCensusInfo.csv", header=T)
CityPop <- read.csv("CityData.csv", header=T)
CityPopLong <- read.csv("CityPop.csv", header=T)
CityChange <- read.csv("CityChangeWide.csv", header=T)
CityChangeLong <- read.csv("CityChangeLong.csv", header=T)
CityInfo <- read.csv("CityCensusInfo.csv", header=T)
TwpInfo <- read.csv("TwpCensusInfo.csv", header=T)
TwpPop <- read.csv("TownshipPopWide.csv", header=T)
TwpPopLong <- read.csv("TownshipPopLongWithCounty.csv", header=T)
TwpChange <- read.csv("TwpChangeWide.csv", header=T)
TwpChangeLong <- read.csv("TwpChangeLong.csv", header=T)
MHIdata <- read.csv("CountyMHILong.csv", header=T)
PCIdata <- read.csv("CountyPCILong.csv", header=T)
CityACS <- read.csv("CityACSLong.csv", header=T)
TwpACS <- read.csv("TwpACSLong.csv", header=T)
CountyBGLong <- read.csv("CountyBG2000to2010long.csv", header=T)
CityBGLong <- read.csv("CityBG2000to2010long.csv", header=T)
TwpBGLong <- read.csv("TwpBrainGain2000to2010long.csv", header=T)
CountyBG90Long <- read.csv("CountyBG1990to2000long.csv", header=T)
CityBG90Long <- read.csv("CityBG1990to2000long.csv", header=T)
TwpBG90Long <- read.csv("TwpBrainGain1990to2000long.csv", header=T)
options(RCHART_WIDTH=500, RCHART_HEIGHT=500)

dashboardPage(
      header <- dashboardHeader(

      title = "CST Datapage"
      ),



      dashboardSidebar(
        sidebarMenu(
          sidebarMenu(
            menuItem("County Table", tabName="County-Table"),

            menuItem("Township", tabName="Township",
              menuSubItem("Table", tabName = "Table"),
              menuSubItem("Chart", tabName = "Chart")
          ),

            menuItem("Plotly Stuff", tabName = "Plotly-Stuff")
        )),

      tags$head(

        tags$style(HTML("
                        .sidebar{height: 90vh; overflow-y: auto; }
                        .dataTables_wrapper { overflow-x: scroll; }
                        .rChart {height: 500px, width: 100%}
                        "))
      )  

      ),

      dashboardBody(
      tabItems(
      tabItem(tabName =  "Table",

              tabBox(

              title = "Township Table",
              id= "TwpPopTable", height = "5000px", width = "1000px",
              tabPanel("Download Data", 
              fluidPage(
                              absolutePanel(draggable=F, top=125, left = 250, width = "40.2%",
                                            sidebarPanel(
                                              helpText("The township data is organized by county. To view a specific townshipâs population, first select the county it is located. You can compare multiple townships by holding down âCTRLâ while selecting your desired counties."),
                                              selectInput("County4", 
                                                          "Select a County:", 
                                                          c("All", 
                                                            unique(as.character(TwpPop$County))),
                                                          selected = "All",
                                                          multiple = TRUE
                                                          #                                                                               , selectize = FALSE
                                              ),
                                              helpText("To download the full dataset in .csv format, click the button below. Customized data can also be copied and pasted into an Excel spreadsheet with the formatting intact."),
                                              downloadButton('twpPopDownload', label = "Download Data"),
                                              width = 12)))),
              tabPanel("Table", 
                              mainPanel(dataTableOutput(outputId="TwpPopTable"),
                                        p("Source: U.S. Census Bureau, Decennial Censuses 1900-2010"))


               ))),


      tabItem((tabName = "Chart"),

                fluidRow(  
                  column(width=5,
                      box(   
                      showOutput("TwpPopChart", "nvd3"), status= "primary",
                      p("Source: U.S. Census Bureau, Decennial Censuses 1900-2010")
                      , widths = c(1, 10))), 

                  absolutePanel(draggable=T, top=200, left = 1000, width = "20%",
                                helpText("The township data is organized by county. To view a specific townshipâs population, first select the county it is located. You can compare multiple townships by holding down âCTRLâ while selecting your desired counties. Then select the communities you want to compare by clicking on the legend."),
                                selectInput("County5", 
                                            "Select a County:", 
                                            c(unique(as.character(TwpPopLong$County))),
                                            selected = "Aitkin",
                                            multiple = TRUE
                                            #                                                                               , selectize = FALSE
                                )))

      ),

      tabItem(
        (tabName = "County-Table"),

              h2("Ayyyyyy")

              ),



      tabItem(
        (tabName = "Plotly-Stuff"),

          fluidRow( 
          mainPanel(plotlyOutput("trendPlot", width="100%")),


          sliderInput("bins", "Numbner of bins:", min=1,max=50,value=10))
      )),

      #Below is for colors display of the 

      tags$head(tags$style(HTML('
                .skin-blue .main-header .logo{
                  font-family: Georgia, Times, "Times New Roman", serif;
                  font-weight: bold;
                  font-size: 24px;
                  color: #FFFF1C;
                }

                .skin-blue .main-header .logo{
                  background-color: #FF9900;
                }

                .skin-blue .main-header .navbar{
                  background-color: #FF9900;
                }

                .skin-blue .main-sidebar{
                  background-color: #FF9900;
                }

                .skin-blue .main-sidebar{
                  font-family: Georgia, Times, "Times New Roman", serif;
                  font-weight: bold;
                  font-size: 12px;
                  color:#FFFF1C;
                }

                .skin-blue .main-sidebar .sidebar .sidebar-menu .active a{
                  color: #FFFF1C;
                }

                .skin-blue .main-header .logo:hover{
                  background-color: #FF9900;
                }

                ')


      ))

))

这是我的服务器代码:

library(ggplot2)
  library(plyr)
  library(rCharts)
  library(shiny)
  library(xtable)
  library(RColorBrewer)
  library(shinythemes)
  library(shinydashboard)
  library(dplyr)
  library(plotly)
  PopData <- read.csv("CountyPopLong.csv", header=T)
  ChangeData <- read.csv("CountyChangeLong.csv", header=T)
  CountyPop <- read.csv("CountyPopWide.csv", header=T)
  CountyChange <- read.csv("CountyChangeWide.csv", header=T)
  CntyInfo <- read.csv("CntyCensusInfo.csv", header=T)
  CityPop <- read.csv("CityData.csv", header=T)
  CityPopLong <- read.csv("CityPop.csv", header=T)
  CityChange <- read.csv("CityChangeWide.csv", header=T)
  CityChangeLong <- read.csv("CityChangeLong.csv", header=T)
  CityInfo <- read.csv("CityCensusInfo.csv", header=T)
  TwpInfo <- read.csv("TwpCensusInfo.csv", header=T)
  TwpPop <- read.csv("TownshipPopWide.csv", header=T)
  TwpPopLong <- read.csv("TownshipPopLongWithCounty.csv", header=T)
  TwpChange <- read.csv("TwpChangeWide.csv", header=T)
  TwpChangeLong <- read.csv("TwpChangeLong.csv", header=T)
  MHIdata <- read.csv("CountyMHILong.csv", header=T)
  PCIdata <- read.csv("CountyPCILong.csv", header=T)
  CityACS <- read.csv("CityACSLong.csv", header=T)
  TwpACS <- read.csv("TwpACSLong.csv", header=T)
  CountyBGLong <- read.csv("CountyBG2000to2010long.csv", header=T)
  CityBGLong <- read.csv("CityBG2000to2010long.csv", header=T)
  TwpBGLong <- read.csv("TwpBrainGain2000to2010long.csv", header=T)
  CountyBG90Long <- read.csv("CountyBG1990to2000long.csv", header=T)
  CityBG90Long <- read.csv("CityBG1990to2000long.csv", header=T)
  TwpBG90Long <- read.csv("TwpBrainGain1990to2000long.csv", header=T)
  options(RCHART_WIDTH=800, RCHART_HEIGHT=600)


  function(input, output) {

    output$table <- renderDataTable(iris)

    set.seed(122)
    histdata <- rnorm(500)

    ######################## POPULATION OUTPUTS ########################
    output$PopTable <- renderDataTable({
      data <- CountyPop
      if (input$County != "All"){
        data <- data[data$County %in% input$County,]
      }
      data
    }, options =list(aoColumnDefs = list(list(sClass="alignCenter",aTargets=c(list("_all")) )),  pageLength=10))

    output$PopChart <- renderChart({
      names(PopData) = gsub("\\.", "", names(PopData))
      n1 <- nPlot(Population ~ Year, data = PopData, group = "County", type = 'lineChart')
      n1$addParams(dom = 'PopChart')
      n1$yAxis(axisLabel = "Population", width = 62)      
      n1$xAxis(axisLabel = "Year")
      n1$chart(forceY = c(0, 1))
      n1$xAxis(tickValues=c(1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010))
      return(n1)
    })

    output$countyPopDownload <- downloadHandler(
      filename = function() { paste('MNCountyPopData', '.csv', sep='') },
      content = function(file) {
        write.csv(PopData, file)
      }) 

    output$CityPopTable <- renderDataTable({
      data <- CityPop
      if (input$County2 != "All"){
        data <- data[data$County %in% input$County2,]
      }
      data
    }, options =list(aoColumnDefs = list(list(sClass="alignCenter",aTargets=c(list("_all")) )),  pageLength=10))

    output$CityPopChart <- renderChart({
      var <- reactive({input$County3})
      DF <- subset(CityPopLong, County %in% var())
      names(DF) = gsub("\\.", "", names(DF))
      n2 <- nPlot(Population ~ Year, data = DF, group = "Name", type = 'lineChart')
      n2$addParams(dom = 'CityPopChart')
      n2$yAxis(axisLabel = "Population", width = 62)      
      n2$xAxis(axisLabel = "Year")
      n2$xAxis(tickValues=c(1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010))
      n2$chart(forceY = c(0, 1))
      return(n2)
    })

    output$cityPopDownload <- downloadHandler(
      filename = function() { paste('MNCityPopData', '.csv', sep='') },
      content = function(file) {
        write.csv(CityPop, file)
      }) 

    output$TwpPopTable <- renderDataTable({
      data <- TwpPop
      if (input$County4 != "All"){
        data <- data[data$County %in% input$County4,]
      }
      data
    }, options =list(aoColumnDefs = list(list( sClass="alignCenter",aTargets=c(list("_all"))  )),  pageLength=10))


    renderChart_pct <- function(expr, env = parent.frame(), quoted = FALSE) {
      func <- shiny::exprToFunction(expr, env, quoted)
      function() {
        rChart_ <- func()
        cht_style <- sprintf("<style>.rChart {width: %s; height: %s} </style>",
                             #### change these here to desired %
                             "100%", "100%")
        cht <- paste(capture.output(rChart_$print()), collapse = '\n')
        HTML(paste(c(cht_style, cht), collapse = '\n'))
      }
    }

    output$TwpPopChart <- renderChart({
      var <- reactive({input$County5})
      DF <- subset(TwpPopLong, County %in% var())
      names(DF) = sub("\\.", "", names(DF))
      n2 <- nPlot(Population ~ Year, data = DF, group = "Name", type = 'lineChart')
      n2$addParams(dom = 'TwpPopChart')
      n2$yAxis(axisLabel = "Population", width = 62)      
      n2$xAxis(axisLabel = "Year")
      n2$xAxis(tickValues=c(1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010))
      n2$chart(forceY = c(0, 1))
      n2$chart(height=500)
      n2$set(width=500)
      return(n2)
    })

    output$twpPopDownload <- downloadHandler(
      filename = function() { paste('MNTownshipPopData', '.csv', sep='') },
      content = function(file) {
        write.csv(TwpPop, file)
      })

    ######################## POPULATION CHANGE OUTPUTS ########################

    output$ChangeTable <- renderDataTable({
      data <- CountyChange
      if (input$County6 != "All"){
        data <- data[data$County %in% input$County6,]
      }
      data
    }, options =list(aoColumnDefs = list(list(sClass="alignCenter",aTargets=c(list("_all"))  )),  pageLength=10))  

    output$ChangeChart <- renderChart({
      names(ChangeData) = gsub("\\.", "", names(ChangeData))
      n3 <- nPlot(PercentChange ~ Year, data = ChangeData, group = "County", type = 'lineChart')
      n3$addParams(dom = 'ChangeChart')
      #     n3$yAxis(tickValues=function(d) {return(d + "%")})
      ##    ^infinite recursion
      #     n3$yAxis(tickFormat="#!function(d) {return d3.format('%Y'));}!#" )
      ##    ^all axis values gone, chart turns static
      #     n3$yAxis(labelType='percent')
      ##     ^ only for pie charts
      #     n3$yAxis(tickFormat=function(d) { return(parseInt(d, 10) + "%")})
      ##     ^ "could not find function 'd3.format'"
      n3$yAxis(axisLabel = "Percent Change from Previous Decade", width = 62)      
      n3$xAxis(axisLabel = "Year")
      n3$xAxis(tickValues=c(1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010))
      return(n3)
    })

    output$countyChangeDownload <- downloadHandler(
      filename = function() { paste('MNCountyPopChangeData', '.csv', sep='') },
      content = function(file) {
        write.csv(ChangeData, file)
      }) 

    output$cityChangeTable <- renderDataTable({
      data <- CityChange
      if (input$County7 != "All"){
        data <- data[data$County %in% input$County7,]
      }
      data
    }, options =list(aoColumnDefs = list(list(sClass="alignCenter",aTargets=c(list("_all"))  )),  pageLength=10))  

    output$cityChangeChart <- renderChart({
      var <- reactive({input$County8})
      DF <- subset(CityChangeLong, County %in% var())
      names(DF) = gsub("\\.", "", names(DF))
      n4 <- nPlot(PercentChange ~ Year, data = DF, group = "Name", type = 'lineChart')
      n4$addParams(dom = 'cityChangeChart')
      n4$yAxis(axisLabel = "Percent Change from Previous Decade", width = 62)      
      n4$xAxis(axisLabel = "Year")
      n4$xAxis(tickValues=c(1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010))
      #     n3$chart(forceY = c(-100, 100))
      return(n4)
    })

    output$cityChangeDownload <- downloadHandler(
      filename = function() { paste('MNCityPopChangeData', '.csv', sep='') },
      content = function(file) {
        write.csv(CityChange, file)
      })

    output$twpChangeTable <- renderDataTable({
      data <- TwpChange
      if (input$County9 != "All"){
        data <- data[data$County %in% input$County9,]
      }
      data
    }, options =list(aoColumnDefs = list(list(sClass="alignCenter",aTargets=c(list("_all"))  )), pageLength=10))  

    output$twpChangeChart <- renderChart({
      var <- reactive({input$County10})
      DF <- subset(TwpChangeLong, County %in% var())
      names(DF) = gsub("\\.", "", names(DF))
      n5 <- nPlot(PercentChange ~ Year, data = DF, group = "Name", type = 'lineChart')
      n5$addParams(dom = 'twpChangeChart')
      n5$yAxis(axisLabel = "Percent Change from Previous Decade", width = 62)      
      n5$xAxis(axisLabel = "Year")
      n5$xAxis(tickValues=c(1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010))
      #     n3$chart(forceY = c(-100, 100))
      return(n5)
    })

    output$twpChangeDownload <- downloadHandler(
      filename = function() { paste('MNTownshipPopChangeData', '.csv', sep='') },
      content = function(file) {
        write.csv(TwpChange, file)
      })


    data(movies, package = "ggplot2")
    minx <- min(movies$rating)
    maxx <- max(movies$rating)

      output$trendPlot <- renderPlotly({
        # size of the bins depend on the input 'bins'
        size <- (maxx - minx) / input$bins

        # a simple histogram of movie ratings
        p <- plot_ly(movies, x = rating, autobinx = F, type = "histogram",
                     xbins = list(start = minx, end = maxx, size = size))
        # style the xaxis
        layout(p, xaxis = list(title = "Ratings", range = c(minx, maxx), autorange = F,
                               autotick = F, tick0 = minx, dtick = size))
      })




  }

目前有很多未使用的代码,因为我还没有完成ui。本质上,我从以前的闪亮代码中获取代码来组装闪亮仪表板。

4

3 回答 3

0

我在寻找相同问题的解决方案时遇到了这篇文章(尽管我使用的是闪亮的应用程序而不是使用闪亮的仪表板)。我不确定为什么会发生这种情况,但前两个图标将主导整个情节输出。

我认为情节模式栏在我的情况下并不太重要,并决定将其删除。使用:plot_ly(....) %>% config(displayModeBar = F)在此线程中找到从 R 绘图图中删除编辑图表链接完全消除了绘图模式栏和问题。

于 2016-02-29T14:56:48.920 回答
0

这是一个更通用的解决方案:

.plotly .modebar-btn svg {
  height: 1em!important;
  width: 1em!important;
}
于 2020-05-12T03:06:36.007 回答
-1

我面临着完全相同的问题。这绝对是因为rCharts$param$width中的param$height参数与plotly之间的冲突。这里有一些关于这个问题的活动

更新 手动编辑html并替换所有

<div class="modebar modebar--hover">

<div class="modebar modebar--hover" style="
    width: 200px;
    height: 35px;">

是一个可能肮脏和“hacky”的解决方案。

必须有更清洁的方法来做到这一点,但在那之前这应该会有所帮助。

于 2016-08-22T21:50:12.393 回答