使用R

时间:2016-08-29 11:17:49

标签: r date datetime label

我有一些看起来很简单的问题,但是当我使用scale_x_datetime的功能时,我无法弄清楚。请看下面的图表: enter image description here

我想在图表中得到什么:

1)x标签只有时间(例如:00:00:00) 2)x标签的第一个值应为00:00:00

对于第一点,我使用 scale_x_datetime(date_labels ="%X")来仅从date_time获取时间。但后来我得到了下图:

enter image description here

该行看起来像第一个图形一样正确,但响应的x轴值是错误的。

对于我想要获得的第二点,我尝试使用 scale_x_datetime 中的函数限制,但它根本不起作用

有人有提示吗?

非常感谢

注意:

生成数据表:

dd <- data.table(date = c("2015-07-01 00:15:00", "2015-07-01 00:30:00", "2015-07-01 00:45:00","2015-07-01 01:00:00", "2015-07-01 01:15:00","2015-07-01 01:30:00","2015-07-01 01:45:00","2015-07-01 02:00:00","2015-07-01 02:15:00", "2015-07-01 02:30:00"),value = c(1.83,1.68,1.29,14.23,0.96, 1.29,10.4,8.25,6.77,7.66))

dd$date<-as.POSIXct(dd$date)
第一张图的

:我使用下面的代码:

p22 <- ggplot(dd, aes(dd$date, dd$value))+labs(x="Time", y="seconds")
p22 <-p22 + geom_line(colour="dark blue",size=1) 
p22<- p22+scale_x_datetime(date_breaks  = "15 mins") + theme(axis.text.x = element_text(angle = 90, hjust = 1))

它看起来很好,但我想只显示时间,所以我添加了代码 date_labels =&#34;%X&#34; 来获取date_time的时间值:下面:

p22 <- ggplot(dd, aes(dd$date, dd$value))+labs(x="Time", y="seconds")
p22 <-p22 + geom_line(colour="dark blue",size=1) 
p22<- p22+scale_x_datetime(date_breaks  = "15 mins",date_labels = "%X") + theme(axis.text.x = element_text(angle = 90, hjust = 1))

然后,我得到了错误,因为第二个图中的响应x值是错误的。这可能是时区的问题,但不确定。

3 个答案:

答案 0 :(得分:1)

确保您的日期时间值具有明确的时区:

dd <- data.frame(date = c("2015-07-01 00:15:00", "2015-07-01 00:30:00", 
                          "2015-07-01 00:45:00","2015-07-01 01:00:00", 
                          "2015-07-01 01:15:00","2015-07-01 01:30:00",
                          "2015-07-01 01:45:00","2015-07-01 02:00:00",
                          "2015-07-01 02:15:00", "2015-07-01 02:30:00"),
                 value = c(1.83,1.68,1.29,14.23,0.96, 1.29,10.4,8.25,6.77,7.66))

#you should always define the time zone    
dd$date <- as.POSIXct(dd$date, tz = "GMT")

ggplot(dd, aes(date, value))+
  labs(x="Time", y="seconds") +
  geom_line(colour="dark blue",size=1) +
  scale_x_datetime(date_breaks  = "15 mins",date_labels = "%X", 
                   limits = as.POSIXct(c("2015-07-01 00:00:00", 
                                         "2015-07-01 03:00:00"), 
                                       tz = "GMT")) + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))

PS:永远不要在$内使用aes。 ggplot2查看传递给变量的data参数的data.frame。由于它有时会重新排序此data.frame,如果您在aes内引用ggplot2之外的数据,则会产生意外结果。

答案 1 :(得分:1)

添加vjust = 0.5以获得您想要的任何一种情况。

library(dplyr)
library(ggplot2)

dd = data_frame(
  date = c("2015-07-01 00:15:00", "2015-07-01 00:30:00", "2015-07-01 00:45:00","2015-07-01 01:00:00", "2015-07-01 01:15:00","2015-07-01 01:30:00","2015-07-01 01:45:00","2015-07-01 02:00:00","2015-07-01 02:15:00", "2015-07-01 02:30:00"),
  value = c(1.83,1.68,1.29,14.23,0.96, 1.29,10.4,8.25,6.77,7.66)
  ) %>% 
  mutate(
    as.POSIXct(date)
  ) %>% 
  ggplot(aes(x = date, y = value)) + 
  labs(x = "Time", y = "seconds") +
  geom_line(colour = "dark blue", size = 1) + 
  scale_x_datetime(date_breaks  = "15 mins") + 
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

答案 2 :(得分:-2)

您可以使用scale_x_date()相应地缩放日期轴。

例如

scale_x_date(date_breaks = "1 week", date_minor_breaks = "1 day", date_labels = "%b %d")

将显示每周的标签,而每天显示为次要点。

limits参数可用于定义日期范围的限制。

注意:由于原始问题中没有示例代码,因此我无法获得您想要的结果。但是应该可以用这种方法得到理想的结果。