【问题标题】:Supressing Warnings in scale_x_datetime抑制 scale_x_datetime 中的警告
【发布时间】:2015-04-23 12:21:20
【问题描述】:

这不是重复,因为该假定重复中的任何方法都不适用于此处。它们都不会导致警告消失。

事实上,我从下面的 Konrad 那里得到了答案 - 使用 suppressMessages。在被断言为可能重复的链接中,他们建议suppressWarnings,这不起作用。


在最终弄清楚如何让 R 在 ggplot 日期轴上正确使用我的时区之后(在此处的帖子中找到 scale_x_datetime,在它使用我的本地时区之前,即使数据已经设置了时区) ,但它现在抱怨警告:

Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale. 

这很烦人,因为我必须经常这样做,并且不想养成忽略所有警告的习惯。我怎样才能关闭它?我显然已经尝试过suppressWarnings(有和没有打印)和options(warn=-1).

  • R 版本为 3.1.3
  • ggplot2_1.0.1
  • scales_0.2.4

    library(lubridate,quietly=T,warn.conflicts=T)
    library(ggplot2,quietly=T,warn.conflicts=T)
    library(scales,quietly=T,warn.conflicts=T)
    
    
    sclip.time <-  ymd_hms("2014-06-16 00:00:00",tz="US/Pacific")
    eclip.time <-  ymd_hms("2014-06-17 23:59:59",tz="US/Pacific")
    
    sdata.time <-  ymd_hms("2014-06-16 00:00:00",tz="US/Pacific")
    edata.time <-  ymd_hms("2014-06-17 23:59:59",tz="US/Pacific")
    
    
    xdata <- seq(sdata.time,edata.time,length.out=100)  
    xfrac <- seq(0,4*3.1416,length.out=100)
    ydata <- pmax(0.25,sin(xfrac))
    ydata <- sin(xfrac)
    ddf <- data.frame(x=xdata,y=ydata)
    
    date_format_tz <- function(format = "%Y-%m-%d", tz = "UTC") {
      function(x) format(x, format, tz=tz)
    }
    
    options(warn=-1)
    
    suppressWarnings(
    ggplot(ddf) + 
      geom_line(aes(x,y),col="blue") +
      geom_vline(xintercept=as.numeric(sclip.time),color="darkred") +
      geom_vline(xintercept=as.numeric(eclip.time),color="darkgreen") +
      xlim(sclip.time,edata.time) +
      scale_x_datetime(  breaks = date_breaks("1 day"),
                         labels = date_format_tz("%Y-%m-%d %H:%M", tz="US/Pacific"))
    )
    

【问题讨论】:

标签: r ggplot2 timezone axis-labels suppress-warnings


【解决方案1】:

您必须使用suppressMessages 和print 的组合,如下面的sn-p:

suppressMessages(print(
  ggplot(ddf) + 
    geom_line(aes(x,y),col="blue") +
    geom_vline(xintercept=as.numeric(sclip.time),color="darkred") +
    geom_vline(xintercept=as.numeric(eclip.time),color="darkgreen") +
    xlim(sclip.time,edata.time) +
    scale_x_datetime(  breaks = date_breaks("1 day"),
                       labels = date_format_tz("%Y-%m-%d %H:%M", tz="US/Pacific"))
))

【讨论】:

  • 试过了,没用。再次尝试只是不确定。还是不行。
  • @MikeWise,很奇怪,我尝试了代码和它runs fine。
  • 我仍然有警告。很想知道你是如何摆脱它的。
  • 就是这样。我刚刚注意到你使用了 supressMessages,我正在尝试 supressWarnings。顺便说一句,您不必使用打印(在这种情况下),没有它就会消失。
【解决方案2】:

您可能会得到想要的结果的一种方法是使用“try”函数,并带有选项 silent=T :

try(silent=T, [R-script]) 

这样做通常是个坏主意,因为您对可能发生的错误视而不见,但如果您真的确定自己在做什么..

【讨论】:

    【解决方案3】:

    实际上,该消息确实表明您的以下代码 sn-p 存在问题:

      ... + xlim(sclip.time,edata.time) +
      scale_x_datetime(  breaks = date_breaks("1 day"),
                         labels = date_format_tz("%Y-%m-%d %H:%M", tz="US/Pacific"))
    

    第一个命令已经添加了一个比例,第二个命令将替换那个比例。所以消息告诉你第一个命令没有效果。

    您应该将两者结合起来并将限制添加到scale_x_datetime:

      ... +
      scale_x_datetime(breaks = date_breaks("1 day"),
                       labels = date_format_tz("%Y-%m-%d %H:%M", tz="US/Pacific"),
                       limits = c(sclip.time,edata.time))
    

    【讨论】:

      猜你喜欢
      • 2012-08-13
      • 2023-03-22
      • 2011-03-31
      • 2019-10-22
      • 2014-12-19
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多