【问题标题】:R shiny error: Error in html tools::validateCssUnit(height); CSS units must be a single-element numeric or character vectorR闪亮错误:html工具错误::validateCssUnit(高度); CSS 单位必须是单元素数字或字符向量
【发布时间】:2018-02-12 00:13:33
【问题描述】:

我正在学习使用 R shiny,我正在尝试创建一个热图,允许用户在 plotlyOutput 中指定高度,以防止标签聚集在一起。我的最小工作代码:

library(shiny)
library(plotly)

ui <- fluidPage(

titlePanel("Heatmap"),
sidebarLayout(
sidebarPanel(
  sliderInput("mapHeight", 
              "Heatmap Height", 
               min = 500, 
               max = 1000,
               value =500),
  sliderInput("L", "left adjust", min = 0, max =900, value = 80)
  ),
  mainPanel(plotlyOutput("heatmap"))
  )
  )

server <- function(input, output) {

 output$heatmap <- renderPlotly({ 
 p<- heatmaply(mtcars, plot_method = "plotly")%>% 
  layout(margin = list(l = input$L, r =50 , t=0, b=90))
 #not sure why this is being ignored
 ggplotly(p, height = input$mapHeight)
 })
 }

shinyApp(ui = ui, server = server)

【问题讨论】:

  • 如果您为sliderInput 设置初始值会发生什么?如果它以无效值开头,您将收到错误消息。如果您问题中的代码代表minimal reproducible example,那将很有帮助。
  • 我实际上将 sliderInput 设置为:sliderInput("mapHeight", "Heatmap Height", min= 500, max =1000, value = 500)。所以起始值是 500。我很抱歉没有发布可重现的代码,我只是觉得它太长了。

标签: r shiny


【解决方案1】:

约束与heatmaply 包有关,下面的解决方案是临时的,而plotly 继续接受layout 中的height 参数。

警告:现在不推荐在 layout() 中指定宽度/高度。 请在 ggplotly() 或 plot_ly() 中指定

您可以通过他们的GitHub 联系开发人员,并提出并发布或更好地提出包含您提议的更改的拉取请求。目前,以下解决方案适用于 Plotly 4.7.1。

app.R

library(shiny)
library(heatmaply)

ui <- fluidPage(

  titlePanel("Heatmap"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("mapHeight", "Heatmap Height",
                  min = 500, max = 1000, value = 500),
      sliderInput("L", "left adjust", min = 0, max = 900, value = 80)
    ),
    mainPanel(plotlyOutput("heatmap"))
  )
)

server <- function(input, output) {

  output$heatmap <- renderPlotly({

    heatmaply(mtcars) %>%
      layout(margin = list(l = input$L, r = 50, t = 0, b = 90),
             height = input$mapHeight)

  })
}

shinyApp(ui = ui, server = server)

【讨论】:

  • 您的代码完全符合我的需要。但是,正在使用的热图不是 ggplot 对象,因此当我尝试使用 ggploty 时,它会忽略输入(我对用户更改高度没有反应)。我正在使用热图来构建热图。你会碰巧知道调整高度的替代方法吗?我尝试了很多东西都无济于事。
  • 我已经编辑了我的原始帖子并提供了最少的工作代码。提前感谢您的帮助。
  • @EddyZavala,修改了我的解决方案
猜你喜欢
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 2014-08-30
  • 2021-01-17
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
相关资源
最近更新 更多