R有光泽,如何在一列中添加一个情节

时间:2016-09-07 19:56:48

标签: r plot shiny

我想绘制3个测量值,以便用户感受到色散。 我使用以下代码创建了一个R闪亮的应用程序:

ui.R

shinyUI(fluidPage(

fluidRow(
h2("Enter 3 values"),
column(width=2,offset=0, numericInput("triceps.sf1", label = "1.", value = 0)),
column(width=2,offset=0, numericInput("triceps.sf2", label = "2.", value = 0)),
column(width=2,offset=0, numericInput("triceps.sf3", label = "3.", value = 0)),
column(width=8,offset=0, plotOutput("sfTricepsPlot"))
 )
)#fluidpage
)#shinyUI

和服务器代码,其中每个测量值都以十字形绘制:

server.R

library(graphics)
shinyServer(function(input, output) {

###################################
## Plot the values of sf measured
sfPlot <- function( m1, m2, m3 ){

par(mai = c(0.8, 0.8, 0.3, 0.8))
plot(1, axes=F, xaxt = "n", xlab = "Mesures", ylab = "sf (mm)", xlim = c(0.8, 3.2), ylim=c(0.8*m1, 1.2*m1))
axis( 1, at=1:3 )
axis(2, at=seq(from=0.8*m1, to=1.2*m1, by=10))
points( x=1, y=m1, pch=4, lwd=2, cex=1.5 )
points( x=2, y=m2, pch=4, lwd=2, cex=1.5 )
points( x=3, y=m3, pch=4, lwd=2, cex=1.5 )
}

######################################
## Plot the triceps sf
output$sfTricepsPlot <- renderPlot({
sfPlot(input$triceps.sf1, input$triceps.sf2, input$triceps.sf3)
})
})

您将看到该图显示在需要输入值的行下方。 我怎么能把那个情节放在右边呢? 我的目标确实是在最终代码中有许多输入行,右边的图表会使页面更紧凑。

2 个答案:

答案 0 :(得分:1)

使用offset功能的column参数。

column(width=8,offset=4, plotOutput("sfTricepsPlot"))

请记住,屏幕的宽度为12个单位,因此如果您打算将8个单位的UI元素放在最右边的位置,请使用offset = 4

编辑:在这种情况下,您只需指定列的高度即可。 (我将numericInput的宽度更改为1,因此3个输入+输出宽度为&lt; = 12.否则它们会被分成2行)

column(width=1,offset=0, div(style = "height:150px;"), numericInput("triceps.sf1", label = "1.", value = 0)),
column(width=1,offset=0, div(style = "height:150px;"), numericInput("triceps.sf2", label = "2.", value = 0)),
column(width=1,offset=0, div(style = "height:150px;"), numericInput("triceps.sf3", label = "3.", value = 0)),
column(width=8,offset=0, plotOutput("sfTricepsPlot"))

答案 1 :(得分:0)

Shiny Bootstrap使用的CSS framewok基于响应式网格布局:

  

Bootstrap包括一个响应式移动第一流体网格系统,随着设备或视口大小的增加,可以适当地扩展到12列。

每行的列数最大宽度为12.在您的示例中,您的总数为2 + 2 + 2 + 8,即14。这意味着您的最后一列将显示在其他列的下方。您可以将width=8更改为width=6以解决问题。