我确信这是一个简单的,但我找不到其他帖子的解决方案.
如果我运行这个:
test <- data.frame(dates = as.Date(c("2016-10-31","2016-11-30", "2016-12-31", "2017-01-31")),
values = c(1, 2, 3, 4))
ggplot(test, aes(x = dates, y = values)) +
geom_bar(position="stack", stat = "identity") +
scale_x_date(breaks = date_breaks("1 months"),labels = date_format("%b-%y"))
Run Code Online (Sandbox Code Playgroud)
我明白了:
如您所知,X轴上的所有日期都会向前移动到下个月.我尝试使用其他地方建议的scale包,但它没有改变一件事.
我可以通过使用以下方法调整日期来避免这种情况:
test$dates <- as.Date(format(test$dates, "%Y-%m-1"))
Run Code Online (Sandbox Code Playgroud)
提供这个(不使用scale_x_date位):
但我确信有一种优雅的方法来规避这个问题.
dates当您使用 进行转换并as.POSIXct使用scale_x_datetime代替时,标签是正确的scale_x_date(但不知道为什么):
ggplot(test, aes(x = as.POSIXct(dates), y = values)) +
geom_bar(position="stack", stat = "identity") +
scale_x_datetime(breaks = date_breaks("1 months"), labels = date_format("%b-%y"))
Run Code Online (Sandbox Code Playgroud)