R - 如何在水平轴上制作带有两个变量的图?

时间:2018-02-01 12:49:43

标签: r ggplot2 axis-labels

我是R的新秀。

这是我的日期框架:

 I  UserID | hour | min | velocity
   #1    1        0     0      12
   #2    1        0     30     20
   #3    1        1     0      19
   #4    1        1     30     11
   #5    1        2     0      12
   #6    1        2     30     7
   ..   ...     ...    ...   ....
   #10   2        0     0      142
   #11   2        0     30     201
   #12   2        1     0      129
   #13   2        1     30     111
   ..   ...     ...    ...   ....

我将Userid列作为一个因素。

我的问题是如何使用水平轴作为水平轴,小时和分钟列以及速度作为垂直轴?

2 个答案:

答案 0 :(得分:0)

如果你不想把时间结合起来 - 也许是为了显示每半小时发生一次的事情 - 或者出于任何其他原因,这里有什么用处:

数据

set.seed(42)
dat <- data.frame(userID = c(rep(1,10), rep(2,10)),
                  hour = 1:20,
                  min = c(0,30),
                  velocity = runif(20, 12,111))

<强> PLOT

ggplot(dat, aes(x = hour, y = velocity)) + 
  geom_point(aes(shape = factor(min), color = factor(userID)))

<强>输出 Time not combined

如果您想添加行,请将geom_point()更改为geom_line()并使用linetype属性代替shape,并将其值设置为factor(min)

如果您不介意将hourmin合并到x轴,可以使用以下代码:

# add another column
dat$tme <- as.POSIXct(paste("2018-02-01", dat$hour, dat$min), 
                      format = "%Y-%m-%d %H %M", tz = "UTC")

<强> PLOT

ggplot(dat, aes(x = tme, y = velocity)) + geom_line(aes(linetype = factor(userID)))

<强>输出 Time combined into 1 variable

答案 1 :(得分:0)

如果您只希望时间出现在x轴上,则可以创建一个虚拟日期&#34; 2018-01-01&#34;在这种情况下,将其从情节中排除

library(lubridate)
library(scales)
df$Time=ymd_hm(paste0("2018-01-01"," ",as.character(df$hour),":",as.character(df$min)))
ggplot(df,aes(x=Time,y=velocity))+geom_line()+scale_x_datetime(labels = date_format("%H:%M", tz = "UTC"))

enter image description here