2017-01-10 5 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):

линия или бар график, показывающий высоту (ось у) во времени (ось х) для каждой записи данных окрашенного собственности (для участок участка, заполняя область под линией, или для участка бар, заполняя планку). Я пробовал итерации geom_line, geom_bar и geom_area (w geom_bar ниже ближайшего я пришел). Я бы хотел, чтобы хотя бы один из следующих вариантов сбылся!

Вариант А - Ближайший я пришел к достижению этой цели (построение каждой записи данных) является следующим кодом:

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 на соответствующее количество записей в день, которое представлено на графике? Или у кого-то есть совет для лучшего решения?

ответ

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

Отлично! Это очень приятное решение для варианта А. Спасибо вам большое. – jdev