R Shiny

时间:2017-12-06 00:08:55

标签: r shiny plotly r-plotly

我认为,我的问题是这类问题的边缘情况。话虽如此,我在这里有一些可重现的代码可能会帮助很多人有类似的问题,特别是在RShiny中更改ggplot的绘图高度的问题(默认设置为400px)。

这是一个闪亮的应用程序的演示,其中ggplot的高度设置为等于ggplot的宽度:

mydf = data.frame(x = 1:5, y = 1:5)

# User Interface
# =================
ui <- fluidPage(theme = shinytheme('united'),
                fluidRow(
                  column(width = 12, align = 'center',
                         plotOutput('myplot', height = 'auto')
                  )             
))
# ====

# Server Code 
# ==============
server <- shinyServer(function(input, output, session) {

  # 3. Create the chart
  # ===-===-===-===-===-===
  output$myplot <- renderPlot({

    ggplot(mydf, aes(x = x, y = x)) + geom_point()
  }, height = function() { session$clientData$output_myplot_width })
})
# ====

shinyApp(ui, server)

通过启动这个闪亮的应用程序来播放窗口的宽度。通过在UI中设置 height ='auto',然后在服务器中设置 height = function(){session $ clientData $ output_myplot_width} ,动态更新高度。非常好。

我正在研究类似的东西,但是我有一个重要的约束,我现在需要将一个参数的高度和宽度传递给我的plotly()调用,因为我正在努力的非常具体的方式在我的情节上显示标记。我想要做的一个例子就是:

mydf <- data.frame(x = 1:5, y = 1:5)
myplotlyfunction <- function(mydf, myplotheight) {
  plot_ly(mydf, height = myplotheight, width = myplotheight * 1.2) %>%
    add_trace(x = ~x, y = ~y, type = 'scatter', mode = 'markers')
}

# User Interface
# =================
ui <- fluidPage(theme = shinytheme('united'),
                fluidRow(
                  column(width = 12, align = 'center',
                         plotlyOutput('myplotly')
                  )
))
# ====

# Server Code
# ==============
server <- shinyServer(function(input, output, session) {

  # 3. Create the chart
  # ===-===-===-===-===-===
  output$myplotly <- renderPlotly({

    this.height <- 600
    myplotlyfunction(mydf, myplotheight = this.height)

  })
})
# ====

shinyApp(ui, server)

我需要将一个高度和宽度参数传递给plot_ly()调用的具体原因是值得拥有它自己的帖子,不幸的是我还没有考虑过一个解决方法。这是我的plot_ly输出的一个真实示例 -

enter image description here

在较高级别,plot_ly散点图的标记大小参数会根据像素设置标记大小,而我的绘图需要非常特别大小的标记,因此这些标记大小是绘图大小的函数。

这是我试图使我的plot_ly情节在Shiny中动态,尽管最初必须将固定参数传递给plot_ly高度。这个想法是基于最初的ggplot()动态高度函数:

mydf <- data.frame(x = 1:5, y = 1:5)
myplotlyfunction <- function(mydf, myplotheight) {
  plot_ly(mydf, height = myplotheight, width = myplotheight * 1.2) %>%
    add_trace(x = ~x, y = ~y, type = 'scatter', mode = 'markers')
}

# User Interface
# =================
ui <- fluidPage(theme = shinytheme('united'),
                fluidRow(
                  column(width = 12, align = 'center',
                         plotlyOutput('myplotly', height = 'auto')
                  )
                ))
# ====

# Server Code
# ==============
server <- shinyServer(function(input, output, session) {

  # 3. Create the chart
  # ===-===-===-===-===-===
  output$myplotly <- renderPlotly({

    this.height <- function() { session$clientData$output_myplotly_width }
    myplotlyfunction(mydf, myplotheight = this.height)

  }, height = function() { session$clientData$output_myplotly_width })
})
# ====

shinyApp(ui, server)

这不起作用,事实上应用程序立即崩溃。

非常感谢任何在本文末尾发表的人。鉴于plot_ly函数本身需要高度参数,我可以根据应用程序窗口的高度或宽度动态调整R Shiny中的plot_ly()绘图,以获得任何帮助。关于如何解决首先需要一个高度参数到plot_ly()的根本问题的想法也很受欢迎,但这是一个单独的问题(我发布了关于我自己,在这里 - Set marker size based on coordinate values, not pixels, in plotly R - 并且其他帖子也是如此。

再次感谢您的帮助!

0 个答案:

没有答案