结合使用geom_boxplot和scale_x_datetime

时间:2015-06-11 20:40:42

标签: r ggplot2

我想使用scale_x_datetime并同时使用geom_boxplot重新调整我的轴。但是factor需要scale_x_datetime作为输入,而POSIXct只接受类library(ggplot2) library(scales) dates <- c("02/27/92", "02/27/92") times <- c("20:03:20", "22:29:56") x <- paste(dates, times) x <- strptime(x, "%m/%d/%y %H:%M:%S") test = cbind(data.frame(rep(x, 20)), rnorm(40)) names(test)=c("a", "b") plot1 = ggplot(test) + geom_boxplot(aes(x=factor(a), y=b)) plot1 plot2 = plot1 + scale_x_datetime(breaks = date_breaks("1 hour")) plot2 。 这是一个可重复的例子:

Error: Invalid input: time_trans works with objects of class POSIXct only

plot1会没问题,但最后一行会把错误归咎于我:

geom_boxplot

然而,对于ggplot(test) + geom_boxplot(aes(x=a, y=b)) 而言,如果x值不是因素,则"%H%M"不会执行不期望的结果:

$

有什么想法吗?

编辑:

期望的结果:我想首次拥有标签(格式为id-(?!bitcoin$)\w+ ),第二个时间点没有标签。

1 个答案:

答案 0 :(得分:1)

这似乎像我预期的那样有效。 (你从来没有说出你的期望。)

plot2 = plot1 + scale_x_discrete(labels=format.Date(x, "%Y/%m/%d %H"))
plot2

这里的要点是您使用:aes(x=factor(a), y=b)创建了一个x因子变量,因此任何标签格式都需要遵守x变量的模式。我不使用ggplot2,因为它广泛的非标准评估和代码隐藏让我疯狂,但我确实考虑了R对象的基本模式和类。