2017-01-10 178 views
0

我已经搜索了相当多的我想完成的任务,但我没有遇到特别需要的示例或绘图),所以我正在向社区伸出援手。ggplot2:通过连续变量,颜色/按组填充的时间序列图

我有什么(数据下载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)什么:

甲线或柱状图示出跨越时间高程(y轴)(x轴),用于通过所有权有色每个数据记录(为一个线条图,填充线下面的区域,或条形图填充条)。我试过geom_line,geom_bargeom_area(w geom_bar下面最接近的我来)的迭代。我希望至少有以下选项中的一种成为现实!

选项A - 我是来实现这一(每个数据记录绘制)是用下面的代码最接近:

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

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

选项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轴?还是有人有更好的解决方案的建议?

回答

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

+0

非常好!这是选项A的一个非常好的解决方案。非常感谢你。 – jdev