我想使用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+
),第二个时间点没有标签。
答案 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对象的基本模式和类。