我有一些看起来很简单的问题,但是当我使用scale_x_datetime的功能时,我无法弄清楚。请看下面的图表:
我想在图表中得到什么:
1)x标签只有时间(例如:00:00:00) 2)x标签的第一个值应为00:00:00
对于第一点,我使用 scale_x_datetime(date_labels ="%X")来仅从date_time获取时间。但后来我得到了下图:
该行看起来像第一个图形一样正确,但响应的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值是错误的。这可能是时区的问题,但不确定。
答案 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
参数可用于定义日期范围的限制。
注意:由于原始问题中没有示例代码,因此我无法获得您想要的结果。但是应该可以用这种方法得到理想的结果。