首页 文章

ggplot中的反向日期时间(POSIXct数据)轴

提问于
浏览
9

我'm trying to create a plot of POSIXct times using ggplot, and would like to reverse the axis, but am struggling to make it work. I'一直在使用 scale_y_datetime ,因为在我的实际应用程序中,重要的是我可以控制此轴上的中断 .

这是我的问题的一个例子,首先是正常排序,然后我试图反转轴 .

# Some random dates and values to plot
MyData <-
  structure(list(Date = structure(c(1492979809.99827, 1492602845.68722, 
  1493093428.90318, 1492605578.0691, 1492961342.65056, 1492771976.83545, 
  1493020588.88485, 1493057018.85104, 1492852011.23873, 1492855996.55059
  ), class = c("POSIXct", "POSIXt")), Value = c(4.52885504579172, 
  6.0024610790424, 8.96430060034618, 7.06435370026156, 5.08460514713079, 
  3.47828012891114, 6.29844291834161, 0.898315710946918, 1.44857675535604, 
  5.74641009094194)), .Names = c("Date", "Value"), row.names = c(NA, 
  -10L), class = "data.frame")

library(ggplot2)
library(scales)
ggplot(MyData, aes(x=Value, y=Date)) +
  geom_point() + 
  scale_y_datetime(limits=c(min(MyData$Date),max(MyData$Date)))

产生这个:
DateTime MinMax Limits

如果我试图反转Y轴,通过反转限制,我会丢失所有的中断和数据,如下所示:

ggplot(MyData, aes(x=Value, y=Date)) +
  geom_point() +
  scale_y_datetime(limits=c(max(MyData$Date),min(MyData$Date)))

DateTime MaxMin Limits

是否有一种简单的方法来反转日期时间轴?

1 回答

  • 11

    在Hadley Wickham的这个post的帮助下,您可以获得反向日期时间表:

    c_trans <- function(a, b, breaks = b$breaks, format = b$format) {
      a <- as.trans(a)
      b <- as.trans(b)
    
      name <- paste(a$name, b$name, sep = "-")
    
      trans <- function(x) a$trans(b$trans(x))
      inv <- function(x) b$inverse(a$inverse(x))
    
      trans_new(name, trans, inverse = inv, breaks = breaks, format=format)
    
    }
    
    rev_date <- c_trans("reverse", "time")
    
    ggplot(MyData, aes(x=Value, y=Date)) +
      geom_point() + 
      scale_y_continuous(trans = rev_date)
    

    这是情节:
    enter image description here

相关问题