ggplot2:按连续变量绘制的时间序列图,按组

时间:2017-01-10 02:24:27

标签: r plot ggplot2 time-series

我已经大量搜索了我想要完成的任务,但我还没有遇到我特别想要的示例或情节,所以我正在接触社区。

我拥有的内容(可下载数据here):

时间序列数据(每个记录相隔2小时,跨越近一年),具有相关的海拔和财产所有权。

library(ggplot2)
data <- read.csv("dataex.csv")
data$timestamp <-as.POSIXct(as.character(data$timestamp),format="%m/%d/%Y %H:%M", tz="GMT")

我想要什么(通过ggplot):

线条或条形图显示按所有权着色的每个数据记录的时间(x轴)的高程(y轴)(对于线图,填充线下的区域,或条形图,填写酒吧)。我已经尝试了geom_linegeom_bargeom_area的迭代(距离我最近的地方w geom_bar)。我希望至少有以下一个选项能够实现!

选项A - 我最接近实现此目的(每个数据记录的绘图)使用以下代码:

ggplot(data, aes(x=timestamp, y=elev, fill=OWNER)) + geom_bar(stat="identity")

但是,我希望这些酒吧相互接触,但如果我调整width中的geom_bar(),一切都会消失。 (另外,如果我在其他批次的类似数据上运行上述代码,它只会显示一小部分条形图,可能是因为它们有更多的数据记录)。看起来它的数据太多了。所以我尝试了另一条路线......

选项B - 按天计划,结果显示信息更丰富,每天都显示所有权的可变性。

ggplot(data, aes(x=as.Date(Date, format='%Y-%m-%d'), y=elev, fill=OWNER)) + geom_bar(stat="identity", width=1)

但是,这会将y轴相加,因此高程不可解释。我可以将y轴除以12(每天的典型记录数),但偶尔会有少于12个记录的天数,这会导致y轴不正确。是否有一种功能或方法将y轴除以图中表示的每日记录数量?或者有人建议更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

类似的东西:

library(readr)
library(dplyr)
library(ggplot2)
library(ggalt)

readr::read_csv("~/Desktop/dataex.csv") %>% 
  mutate(timestamp=lubridate::mdy_hm(timestamp)) %>% 
  select(timestamp, elev, Owner=OWNER) -> df

ggplot(df, aes(timestamp, elev, group=Owner, color=Owner)) +
  geom_segment(aes(xend=timestamp, yend=0), size=0.1) +
  scale_x_datetime(expand=c(0,0), date_breaks="2 months") +
  scale_y_continuous(expand=c(0,0), limits=c(0,2250), label=scales::comma) +
  ggthemes::scale_color_tableau() +
  hrbrmisc::theme_hrbrmstr(grid="Y") +
  labs(x=NULL, y="Elevation") +
  theme(legend.position="bottom") +
  theme(axis.title.y=element_text(angle=0, margin=margin(r=-20)))

enter image description here