我有3列的tibble,代表3个不同变量(a,b,c)的观察日期。
我想用ggplo2描绘一个条形图,其中X轴代表时间。独立于我的数据的时间跨度,我希望X轴始终代表整个月(从第1天到第31天,让我们说)。
test <- tibble(date=c("1/1/1","1/1/1","2/1/1","2/1/1","2/1/1","5/1/1","5/1/1","5/1/1"),
variable=c("a","b","a","b","c","a","b","c"),
observation=c(0.4,0.6,0.3,0.3,0.4,0.2,0.5,0.3))
ggplot(test, aes(x=as.Date(date), y=observation, fill=variable)) +
geom_bar(position = "stack", stat = "identity") +
scale_x_date(date_breaks = "1 day",
labels = date_format("%d/%m/%Y")) +
theme(text = element_text(size=6),
axis.text.x = element_text(angle=90, hjust=1))
但是,我无法在生成的图中读取X轴信息。我应该使用其他函数而不是scale_x_date来定义我的X轴吗?
答案 0 :(得分:2)
您需要使用format=
中的as.Date()
选项,以便5/1/1
可以读取为2001年1月5日(按预期)而不是2005年1月1日(目前正在进行中) )。
tibble(
date =
c(
"1/1/1", "1/1/1", "2/1/1", "2/1/1",
"2/1/1", "5/1/1", "5/1/1", "5/1/1"
) %>%
as.Date(format = "%d/%m/%y"),
variable = c("a", "b", "a", "b", "c", "a", "b", "c"),
observation = c(0.4, 0.6, 0.3, 0.3, 0.4, 0.2, 0.5, 0.3)
) %>%
ggplot(aes(x = date, y = observation, fill = variable)) +
geom_bar(position = "stack", stat = "identity") +
scale_x_date(
date_breaks = "1 day",
labels = date_format("%d/%m/%Y")
) +
theme(
text = element_text(size = 6),
axis.text.x = element_text(angle = 90, hjust = 1)
)
请注意,我在as.Date(..., format = "%d/%m/%y")
中使用了tibble()
,以便传奇变得更少。