抑制ggplot2图形中的非整数轴中断(在Shiny应用程序中)

时间:2018-08-01 12:30:39

标签: r ggplot2 shiny

这是我在StackOverflow上的第一篇文章,我将尽可能地回答我的问题。

我还要指出,我已经尝试了How to display only integer values on an axis using ggplot2中推荐的所有解决方案。不幸的是,我无法用任何一个解决问题。

我创建了一个Shiny应用程序,该应用程序可以生成各种变量的年度数据折线图。对于大多数参数设置来说,效果很好:

enter image description here

没有非整数中断

但是,如果我在滑块上选择特定的时间跨度,则会生成在x轴上具有非整数中断的图形,这对于年度数据没有意义。

enter image description here

带有非整数的中断

编辑:此处是该应用程序的最低可复制版本

library(tidyverse)
library(shiny)

options(scipen = 999)

# Data
data1<-data.frame(values = c(15500, 
                             16300,
                             18200,
                             28300,
                             23500,
                             23700,
                             31500,
                             35800, 
                             34700,
                             36900,
                             40000,
                             44700,
                             53300,
                             55800,
                             69800,
                             89500,
                             1.13E+5,
                             1.53E+5,
                             1.77E+5,
                             1.83E+5,
                             1.99E+5), 
                  year = seq(1990, 2010, 1))

#Shiny app

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
    sliderInput("period", "Year:", min = 1990, max = 2010, value = c(1990, 2010), sep = "")),
mainPanel(plotOutput("ggplot2"))))

server <- function(input, output) {

  data1_subset <- reactive({
      filter(data1, year >= input$period[1] & year <= input$period[2])
  })


  output$ggplot2 <- renderPlot({
        ggplot(data = data1_subset(), aes(x = year, y = values)) +
          geom_line(aes(color = "red")) +
          scale_x_continuous(name = "Year") +
          scale_color_discrete(guide=FALSE)+
          theme_minimal()

  })
}

shinyApp(ui = ui, server = server)

要查看问题,请选择时间跨度2000-2010

由于年度数据显然不合常理,有没有办法抑制非整数中断?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您应注意为日期列<td>{{ $thought->user->username}} <span>ID - {{ $thought->user_id}}</span></td> 使用正确的类(类似于yearDate)。正如评论所建议的那样,您需要选择一个特定的日期,例如POSIXct。这将告知Jan 1st您可能打算做什么,并使您更容易将显示格式引导到有意义的地方。

它将立即可用,您可以使用ggplot2的{​​{3}}对其进行更多调整。

实现了带有所提出想法的reprex(以及关于固定线条颜色的另一个故障):

ggplot

答案 1 :(得分:0)

感谢您的帮助!答案似乎比我想的要简单得多。将breaks = function(x) unique(floor(pretty(x)))放入我的scale_x_continuous()函数中会产生仅整数的中断,即使没有将数据转换为Date格式也是如此。在我的情况下,删除unique()不会改变行为,但在其他情况下可能会这样做。