r - Shiny :renderPlot 与 Fluidrow 重叠

标签 r plot shiny overlapping

在 Shiny 的例子中http://shiny.rstudio.com/gallery/plot-plus-three-columns.html如果我们替换 server.R

中的代码部分
print(p)

})

print(p)

}, height = 600)

我们得到了图形窗口的重叠以及下面与fluidrow集成的输入。 当在 renderPlot 中指定 height 时,我们如何避免这种重叠? 谢谢。

最佳答案

将绘图作为 UI 对象,然后在渲染时即可知道其大小。我将绘图大小设置为 slider ,当然这是可选的:)

ui.R

library(shiny)
library(ggplot2)

dataset <- diamonds

shinyUI(fluidPage(

  title = "Diamonds Explorer",

  uiOutput('sized_plot'),

  hr(),

  fluidRow(
    column(3,
           h4("Diamonds Explorer"),
           sliderInput('sampleSize', 'Sample Size', 
                       min=1, max=nrow(dataset),
                       value=min(1000, nrow(dataset)), 
                       step=500, round=0),
           sliderInput('plotSize', 'Plot Size', 
                       min=100, max=2000,
                       value=600, 
                       step=50, round=0),
           br(),
           checkboxInput('jitter', 'Jitter'),
           checkboxInput('smooth', 'Smooth')
    ),
    column(4, offset = 1,
           selectInput('x', 'X', names(dataset)),
           selectInput('y', 'Y', names(dataset), names(dataset)[[2]]),
           selectInput('color', 'Color', c('None', names(dataset)))
    ),
    column(4,
           selectInput('facet_row', 'Facet Row',
                       c(None='.', names(diamonds[sapply(diamonds, is.factor)]))),
           selectInput('facet_col', 'Facet Column',
                       c(None='.', names(diamonds[sapply(diamonds, is.factor)])))
    )
  )
))

服务器.R

library(shiny)
library(ggplot2)

shinyServer(function(input, output) {

  dataset <- reactive({
    diamonds[sample(nrow(diamonds), input$sampleSize),]
  })

  output$plot <- renderPlot({

    p <- ggplot(dataset(), aes_string(x=input$x, y=input$y)) + geom_point()

    if (input$color != 'None')
      p <- p + aes_string(color=input$color)

    facets <- paste(input$facet_row, '~', input$facet_col)
    if (facets != '. ~ .')
      p <- p + facet_grid(facets)

    if (input$jitter)
      p <- p + geom_jitter()
    if (input$smooth)
      p <- p + geom_smooth()

    print(p)

  })

  output$sized_plot <- renderUI({
    plotOutput("plot", height = input$plotSize)
  })

})

关于r - Shiny :renderPlot 与 Fluidrow 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613470/

相关文章:

R For循环删除从一个字符串到列中第二个字符串的行范围

r - 热删除某些部分的悬停文本 plotly

python - 如何在 Pandas 中绘制条形堆栈?

r - R Shiny 中响应式(Reactive)表达式中的全局赋值?

r - 匹配更大向量中的序列

r - Shiny 的 group_by dplyr 函数

python - 顶部为 0 度的顺时针极坐标图

r - R中轴刻度线与相应标签之间的距离

r - 在 R/Shiny 中如何使用 purrr::map 创建其他面板

r - 根据 Shiny R 中的单选按钮显示 slider 输入