Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在Shiny中使用ggplot时,如何保留绘图布局特征?_R_Canvas_Ggplot2_Shiny - Fatal编程技术网

R 在Shiny中使用ggplot时,如何保留绘图布局特征?

R 在Shiny中使用ggplot时,如何保留绘图布局特征?,r,canvas,ggplot2,shiny,R,Canvas,Ggplot2,Shiny,当绘制一个简单的ggplot时,画布的大小将扩展,以使绘图的高度适当,允许变量之间有一定的间距。例如,如果我有10个变量需要在一个绘图上显示,则所有变量都会很好地绘图: 是时候做些有光泽的事情了!让我们看看是否可以将此绘图嵌入选项卡面板 我们开始: 看起来很棒,但现在我的水平部分都挤在一起,就像一包热狗。水平几何图形段之间没有空格 这个问题一直困扰着我 我觉得ggplot有自己的大脑,当涉及到画布尺寸时,这很好,但我无法撬开头骨来适当控制它将如何绘制自己 引用, …获得一致的画布和所有其他尺寸

当绘制一个简单的ggplot时,画布的大小将扩展,以使绘图的高度适当,允许变量之间有一定的间距。例如,如果我有10个变量需要在一个绘图上显示,则所有变量都会很好地绘图:

是时候做些有光泽的事情了!让我们看看是否可以将此绘图嵌入选项卡面板

我们开始:

看起来很棒,但现在我的水平部分都挤在一起,就像一包热狗。水平几何图形段之间没有空格

这个问题一直困扰着我

我觉得ggplot有自己的大脑,当涉及到画布尺寸时,这很好,但我无法撬开头骨来适当控制它将如何绘制自己

引用, …获得一致的画布和所有其他尺寸的关键是直接控制图形输出设备

我完全同意他的观点,并使用了他的优秀建议,但由于我们使用的是Shiny,因此无法控制这一点

接下来,我尝试使用中的值

           p <- p + theme(plot.margin=unit(c(0,0,0,0), "cm")
           p <- p + panel.margin=unit(c(0,0,0,0), "cm"))
服务器.R


面板边距并不能真正控制图形设备的大小。尝试在renderPlot中设置高度和宽度,并上下缩放,直到它们看起来合适为止。@Gregor:太接近了!!这通过在右边给我一个滚动条来帮助我,但这并没有真正扩大空间:
  library("shiny")
  library("ggplot2")

  DF_for_plotting <- structure(list(col1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), col2 = c(100, 
                                                                  100, 61.9433678425096, 10.7823906941804, 4.18175346165306, 3.24251454697229, 
                                                                  6.68573373055455, 14.945119260922, 18.9296271776082, 11.0742379220636
  ), col3 = c(100, 100, 100, 12.8418470680653, 5.31239161296286, 
              4.42025167250118, 10.699998838647, 27.5067118056336, 20.6360723198699, 
              13.1476876837599), col4 = c(100, 100, 100, 100, 100, 100, 100, 
                                          100, 100, 100)), .Names = c("col1", "col2", "col3", "col4"), row.names = c("one", 
                                                                                                                     "two", "three", "four", "five", "six", "seven", "eight", "nine", 
                                                                                                                     "ten"), class = "data.frame")

  hex=c("#CC0000", "#90BD31", "#178CCB")
  textsize <- c(9)
  number_of_variables <- 5

  p <- ggplot()
  p <- p + scale_y_discrete(breaks = seq(10), labels = c("one", "two", "three", "four", "five"))

  breaks=c(0, 25, 50, 75, 100)
  break_labels=c("0%", "25%", "50%", "75%", "100%")

  p <- p + scale_x_continuous(breaks = breaks, labels=break_labels, name=percent_correct)

  ### inner loop
  for (varnum in seq(1:number_of_variables)){ #<-- we are already in the Tab. Now we need to make all three segments for all three variables for this tab

  p <- p + geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col1[varnum], xend=DF_for_plotting$col2[varnum]-0.001, y=varnum, yend=varnum, colour='impaired'), size=textsize*2.5) +
    geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col2[varnum], xend=DF_for_plotting$col3[varnum]-0.001, y=varnum, yend=varnum, colour='normal'), size=textsize*2.5) +
    geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col3[varnum], xend=DF_for_plotting$col4[varnum]-0.001, y=varnum, yend=varnum, colour='optimal'), size=textsize*2.5)
  p <- p + scale_color_manual(values=c(impaired=hex[1], normal=hex[2], optimal=hex[3], white='#ffffff'), name="Function Key")
  }
  p
shinyUI(fluidPage(theme='test.css',

    fluidRow(
    column(2, 
           fluidRow(
             h3("Select Customer:"),
                    wellPanel(class="info", numericInput(inputId="num", label="Select ID:", value=NaN),
                              if(show_age_slider=='Yes'){textOutput("")},
                              if(show_edu_slider=='Yes'){textOutput("")},
                              if(show_gender_buttons=='Yes'){textOutput("")}
                    ))),

    #do.call will call the navbarPage function with the arguments in the tabs list
    shinyUI(fluidRow(
      column(12,
             "", 
             do.call(navbarPage,tabs)
    ))))))
library("shiny")
library("ggplot2")

DF_for_plotting <- structure(list(col1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), col2 = c(100, 
                                                                                   100, 61.9433678425096, 10.7823906941804, 4.18175346165306, 3.24251454697229, 
                                                                                   6.68573373055455, 14.945119260922, 18.9296271776082, 11.0742379220636
), col3 = c(100, 100, 100, 12.8418470680653, 5.31239161296286, 
            4.42025167250118, 10.699998838647, 27.5067118056336, 20.6360723198699, 
            13.1476876837599), col4 = c(100, 100, 100, 100, 100, 100, 100, 
                                        100, 100, 100)), .Names = c("col1", "col2", "col3", "col4"), row.names = c("one", 
                                                                                                                   "two", "three", "four", "five", "six", "seven", "eight", "nine", 
                                                                                                                   "ten"), class = "data.frame")


hex=c("#CC0000", "#90BD31", "#178CCB")
textsize=c(8)

############## shiny server starts here: #######################################################################
shinyServer(function(input, output) {  

# begin the observe() block
observe(


lapply(seq(1:number_of_tabs),function(i) output[[paste0("plot",i)]] <- renderPlot({   #<-- lapply will fill up each tab and create one ggplot
  plotindex <<- 0
  list_of_ggplots <<- list() #although we only have one tab, we could easily extend to having multiple tabs
  p <- ggplot()

breaks=c(0, 25, 50, 75, 100, 115, 130)
break_labels=c("0%", "25%", "50%", "75%", "100%")

number_of_variables <- 10

### inner loop
  for (varnum in seq(1:number_of_variables)){ #<-- We need to make all three segments for all three variables for this tab

    p <- p + scale_y_discrete(breaks = seq(10), labels = c("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"))



    p <- p + geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col1[varnum], xend=DF_for_plotting$col2[varnum]-0.001, y=varnum, yend=varnum, colour='impaired'), size=textsize*2.5) +
      geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col2[varnum], xend=DF_for_plotting$col3[varnum]-0.001, y=varnum, yend=varnum, colour='normal'), size=textsize*2.5) +
      geom_segment(data=DF_for_plotting, aes_q(x=DF_for_plotting$col3[varnum], xend=DF_for_plotting$col4[varnum]-0.001, y=varnum, yend=varnum, colour='optimal'), size=textsize*2.5)
    p <- p + scale_color_manual(values=c(impaired=hex[1], normal=hex[2], optimal=hex[3], white='#ffffff'), name="Function Key")
#    p <- p + theme(plot.margin=unit(c(0,0,0,0), "cm"))
#    p <- p + theme(panel.margin=unit(c(0,0,0,0), "cm"))

            list_of_ggplots[["to_UI"]] <<- p # this is strange but true; apparently any arbitrary key works for inserting the plot into the list_of_ggplots
}   
      print(list_of_ggplots)  #<-- to send out to UI
})
)


) #<-- end of observe function
}  #<-- end of brace in shinyserver function
)  #<-- end the shinyserver function