2017-01-10 36 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

相關問題