R. plotly - Shinyapp 内图形的填充或边距?

Posted

技术标签:

【中文标题】R. plotly - Shinyapp 内图形的填充或边距?【英文标题】:R. plotly - padding or margin for graph inside Shinyapp? 【发布时间】:2019-02-15 12:37:53 【问题描述】:

我有一个没有左右边距的情节图(底部都没有)。找不到添加此额外空间的文档,因此我的 y 轴(此图处于水平模式)不会被剪切。

ui.R:

tabItem(tabName = "ga",        
            column(12, offset = 2,
            plotlyOutput("plot")
            )         
    )

server.R:

  sesiones_por_fuente <- reactive( 


    sesiones_ga <- read_csv("https://www.dropbox.com/s/w2ggnb0p4mz2nus/sesiones-2018.csv?dl=1", skip = 0)

    sesiones_ga <- sesiones_ga %>%
                  group_by(sources) %>%
                  summarise(sessions = sum(sessions))


  )



  m <- list(
    l = 200,
    r = 50,
    b = 100,
    t = 100,
    pad = 20
  )


  output$plot <- renderPlotly(
    plot_ly(sesiones_por_fuente(), x = ~sessions, y = ~sources, type = 'bar',
            width = 1200, height = 600, margin = m, orientation = 'h', pad=4) %>% 
      layout(title = "Sesiones por mes",
             xaxis = list(title = ""),
             yaxis = list(title = "")) %>%
      layout(hovermode = 'compare',
             separators = ',') 
  )

数据集:

您可以通过以下方式下载数据:

sesiones_por_fuente <- read_csv("https://www.dropbox.com/s/w2ggnb0p4mz2nus/sesiones-2018.csv?dl=1", skip = 0)

或使用 dput 函数重新创建它:

sesiones_por_fuente <- structure(list(sources = c("adwords", "ccl", "criteo", "directo", 
"email", "facebookads", "onesignal", "organico", "redes sociales", 
"referencias", "rpp", "spam"), sessions = c(4534932L, 265532L, 
3959787L, 4290376L, 3870548L, 3125880L, 2345860L, 7002943L, 75382L, 
15061160L, 222730L, 5971162L)), class = c("tbl_df", "tbl", "data.frame"
), .Names = c("sources", "sessions"), row.names = c(NA, -12L), spec = structure(list(
    cols = structure(list(date = structure(list(format = ""), .Names = "format", class = c("collector_date", 
    "collector")), hour = structure(list(), class = c("collector_character", 
    "collector")), deviceCategory = structure(list(), class = c("collector_character", 
    "collector")), source = structure(list(), class = c("collector_character", 
    "collector")), medium = structure(list(), class = c("collector_character", 
    "collector")), sessions = structure(list(), class = c("collector_integer", 
    "collector")), year = structure(list(), class = c("collector_integer", 
    "collector")), month = structure(list(), class = c("collector_character", 
    "collector")), sources = structure(list(), class = c("collector_character", 
    "collector"))), .Names = c("date", "hour", "deviceCategory", 
    "source", "medium", "sessions", "year", "month", "sources"
    )), default = structure(list(), class = c("collector_guess", 
    "collector"))), .Names = c("cols", "default"), class = "col_spec"))

【问题讨论】:

为了使您的问题可重现,您应该定义sesiones_por_fuente 函数或更好,提供最小数据集来重现问题。 @steveb 认为没有必要,因为该图可以使用任何数据集实现。我只需要知道如何在使用水平方向时添加额外的填充。 一般来说,如果你提供一个可重现的例子,你会更快得到答案。 @OmarGonzales 你可以自己发布一个内置的 R 数据集,以便我们可以使用你的代码来支持。现在在这种情况下,必须有人使用新数据集编写新代码。 @amrrs 添加了数据样本。谢谢。 【参考方案1】:

鉴于您的 dput 数据,您需要做两件事,一件解决您的问题,一件消除警告:

margin = m 从对plot_ly 的调用移至layout 调用,如下面的代码所示。 从对plot_ly 的调用中删除pad=4 选项,因为这会发出警告(即它是plot_ly 的无效选项)

这主要是你如何使用plot_ly 的问题,而不是一个闪亮的问题。我能够在 R 中使用 plot_ly 重现该问题,并且下面的代码修复了该问题。

plot_ly(sesiones_por_fuente, x = ~sessions, y = ~sources, type = 'bar',
        width = 1200, height = 600, orientation = 'h') %>% 
  layout(title = "Sesiones por mes",
         xaxis = list(title = ""),
         yaxis = list(title = ""),
         margin = m) %>%
  layout(hovermode = 'compare',
         separators = ',') 

这是结果图,边距中有多余的空间

【讨论】:

【参考方案2】:

我有两个可能的建议:

1) 将l 从 200 增加到更多。但是正如我所看到的,您按情节空间的话并没有帮助;

2) 将pad 增加到 100。但情节看起来并不好。

您有两个大小不同的pads,这可能是您遇到的问题

【讨论】:

以上是关于R. plotly - Shinyapp 内图形的填充或边距?的主要内容,如果未能解决你的问题,请参考以下文章

在基于 HTML 模板的 Shiny App 中使用 Plotly 失败

shinyApp 中的模块无法被 app.R 识别

shinyapp 中的绘图对输入没有反应

r 直接从Neo4j REST API获取图形数据到R.对于R igraph用户有用。

Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙?

X shell 5. R. 的安装