我正在 ggplot2 中绘制数据集与日期,y 轴是日期。我想按时间倒序排列日期。最早的日期在 y 轴的顶部。另外,我想以我想要的方式格式化日期。
我遇到的麻烦是我相信我需要 scale_y_continuous() 和 scale_y_reverse 来完成此任务,但它们不能很好地配合使用。我在我的情节中尝试的是:
... ggplot setup ... +
scale_y_continuous(label=function(juldate) strftime(chron(juldate), "%Y-%m-%d")) +
scale_y_reverse()
我得到的错误是:
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.
我怎样才能让格式化和反转一起工作?请注意,在这个例子中,y 轴是一个儒略日期整数,这是我最后一次尝试让事情很好地协同工作。
独立地,任何一个 scale_y... 语句都会做它应该做的事情,要么正确格式化,要么反转轴,但我不能同时使用两者。
任何帮助表示赞赏。
谢谢,马特
添加:可重现的示例
library("ggplot2")
library("chron")
# Data to graph. Want to show a calendar, days on the left
# and candle lines showing the duration of each event.
work <- rbind(
data.frame(ydate_start=15480, ydate_end=15489, event="Event One"),
data.frame(ydate_start=15485, ydate_end=15499, event="Event Two")
)
# Formats nicely, but I want order of dates reversed
ggplot(work,
aes(x=event,
y=ydate_start,
ymin=ydate_start,
ymax=ydate_end,
color=event)
) +
geom_linerange() +
ylab("Date") +
scale_y_continuous(label=function(x) strftime(chron(x), "%Y-%m-%d"))
# Order reversed, but no formatting applied
ggplot(work,
aes(x=event,
y=ydate_start,
ymin=ydate_start,
ymax=ydate_end,
color=event)
) +
geom_linerange() +
ylab("Date") +
scale_y_reverse()
# Both delarations don't play well together well
ggplot(work,
aes(x=event,
y=ydate_start,
ymin=ydate_start,
ymax=ydate_end,
color=event)
) +
geom_linerange() +
ylab("Date") +
scale_y_continuous(label=function(x) strftime(chron(x), "%Y-%m-%d")) +
scale_y_reverse()
#> Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.