我希望制作一个条形图,其中响应变量(重量变化)在不同长度的时间段内测量,由开始和结束日期定义。条的宽度应该与期间的长度相对应。我的数据的一个小例子:在x轴上以可变条宽度作为日期范围的条形图
wtchange.data <- structure(list(start.date = structure(1:3, .Label = c("2015-04-01",
"2015-04-15", "2015-04-30"), class = "factor"), end.date = structure(1:3, .Label = c("2015-04-15",
"2015-04-30", "2015-05-30"), class = "factor"), wtchange = c(5L,
10L, 15L), se = c(1.2, 2.5, 0.8)), .Names = c("start.date", "end.date",
"wtchange", "se"), class = "data.frame", row.names = c(NA, -3L
))
wtchange.data
# start.date end.date wtchange se
# 1 2015-04-01 2015-04-15 5 1.2
# 2 2015-04-15 2015-04-30 10 2.5
# 3 2015-04-30 2015-05-30 15 0.8
wtchange.data$start.date <- as.Date(wtchange.data$start.date)
wtchange.data$end.date <- as.Date(wtchange.data$end.date)
尝试使用geom_bar
:
library(ggplot2)
ggplot(wtchange.data, aes(x = start.date, y = wtchange)) +
geom_bar(stat = "identity", color = "black") +
geom_errorbar(aes(ymin = wtchange-se, ymax = wtchange+se), width = 1)
(不允许> 2间< 10声誉的联系,所以很遗憾不能显示第一图)
主要问题是,当定义绘图区美学(x = start.date, y = wtchange
)时,对于x轴,我只能使用一个变量(本例中为start.date),但我确实需要以某种方式使用start.date和end.date来限定对应于每个周期的条宽度。该图应该看起来像这样(在Paint中绘制):
第二个问题是条纹应该没有间隙地接触,但我不确定它是否可能,因为条纹必须是不同的宽度,所以你不能为所有酒吧设置一个酒吧宽度。是否可以手动设置每个条的宽度?
编辑: 谢谢Henrik的链接。我取得了一些进展。 余计算的日期中点在定心杆:
wtchange.data$date.midpoint <- wtchange.data$start.date +
(wtchange.data$end.date - wtchange.data$start.date)/2
然后计算周期长度为使用如棒宽度:
wtchange.data$period.length <- wtchange.data$end.date - wtchange.data$start.date
更新图形代码现在:
ggplot(wtchange.data, aes(x = date.midpoint, y = wtchange)) +
geom_bar(stat = "identity", color = "black", width = wtchange.data$period.length) +
geom_errorbar(aes(ymin = wtchange-se, ymax = wtchange+se), width = 1)
剩下的唯一问题是我在一个地方酒吧之间仍然存在一个小差距。我想这是由于R将日期差异计算到最近的天数的方式?