是否可以用ggplot2修复轴边距?

时间:2016-01-08 12:49:22

标签: r ggplot2 shiny fixed-width

我有一个交互式显示,其中包含一个条形图,显示不同类别的选定统计数据。但是,ggplot2会根据标签重新调整y轴宽度,因此会使条形图在x方向上恼人地移动。见例子:

library(shiny)
library(dplyr)
library(ggplot2)

shinyApp(
  ui = bootstrapPage(
    selectInput('statistic', label='Chose a statistic', choices=c('carat', 'depth', 'table', 'price')),
    plotOutput('plot')
  ),
  server = function(input, output) {
    output$plot <- renderPlot(
      diamonds %>%
        ggplot(aes(x=color, y=get(input$statistic))) +
        geom_bar(stat = 'sum') +
        theme(text = element_text(size=20), legend.position="none")
    )
  }
)

如何修复y轴标签的宽度? (或等效于绘图板的宽度?)

我确实找到了相关问题,但所有问题都是在静态环境中解决的,例如with facetsgtable

1 个答案:

答案 0 :(得分:5)

一种方法是提供标签功能,通过用空格填充标签宽度来标准化标签宽度。 function(label) sprintf('%15.2f', label)将在左侧填充15个空格,并打印带有2个小数位的数值。

library(shiny)
library(dplyr)
library(ggplot2)

shinyApp(
  ui = bootstrapPage(
    selectInput('statistic', label='Chose a statistic', choices=c('carat', 'depth', 'table', 'price')),
    plotOutput('plot')
  ),
  server = function(input, output) {
    output$plot <- renderPlot(
      diamonds %>%
        ggplot(aes(x=color, y=get(input$statistic))) +
        scale_y_continuous(labels=function(label) sprintf('%15.2f', label)) +
        geom_bar(stat = 'sum') +
        theme(text = element_text(size=20), legend.position="none")
    )
  }
)