使用ggplot在x轴上显示有限的时间范围

时间:2016-02-28 08:11:45

标签: r time ggplot2

我希望下图中的x轴从06:00开始到22:00结束,每4小时休息一次。但是,我无法弄清楚以下内容。

a)如何让x轴在06:00开始,06:00之前没有空位。

b)如何在22:00之后使x轴在22:00结束而没有任何空白区域。现在它甚至没有显示22:00

c)如何每4小时休息一次。

d)如何为y轴分配标签(目前它只是X4,列名)。

我尝试过几件事,但没有成功。一些示例数据:

range <- seq(as.POSIXct("2015/4/18 06:00"),as.POSIXct("2015/4/18 22:00"),"mins")

df <- data.frame(matrix(nrow=length(range),ncol=4))
df[,1] <- c(1:length(range))
df[,2] <- 2*c(1:length(range))
df[,3] <- 3*c(1:length(range))
df[,4] <- range

整形:

library(reshape2)
df2 <- melt(df,id="X4")

图表:

library(ggplot2)
ggplot(data=df2,aes(x=X4,y=value,color=variable)) + geom_line()+
  scale_y_continuous(expand=c(0,0)) +
  coord_cartesian(xlim=c(as.POSIXct("2015/4/18 06:00:00"),as.POSIXct("2015/4/18 22:00:00")))

这使图表看起来像这样: https://github.com/matthewkturner/redux-simple-boilerplate

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

以下是一些可以帮助您的代码。这可以使用scale_x_datetime轻松完成。

## desired start and end points
st <- as.POSIXct("2015/4/18 06:00:00")
nd <- as.POSIXct("2015/4/18 22:00:00")

## display data for given time range
ggplot(data = df2, aes(x = X4, y = value, color = variable)) + 
  geom_line() +
  scale_y_continuous("Some name", expand = c(0, 0)) +
  scale_x_datetime("Some name", expand = c(0, 0), limits = c(st, nd), 
                   breaks = seq(st, nd, "4 hours"), 
                   labels = strftime(seq(st, nd, "4 hours"), "%H:%S"))

ggplot