Skip to content

Commit bd96480

Browse files
author
Nick Heyek
committed
add timeline functionality, style improvements, plot title with specie name
1 parent f4877f6 commit bd96480

1 file changed

Lines changed: 63 additions & 18 deletions

File tree

  • experiment-trait-data-visualizer

experiment-trait-data-visualizer/app.R

Lines changed: 63 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ library(traits)
33
library(ggplot2)
44
library(lubridate)
55
library(DataCache)
6+
library(timevis)
67

78
# set options for BETYdb API
89
knitr::opts_chunk$set(echo = FALSE, cache = TRUE)
@@ -17,18 +18,30 @@ rownames(seasons) <- paste0('[', seasons$start_date, ']', ' - ', '[', seasons$en
1718

1819
# set page UI
1920
ui <- fluidPage(
20-
titlePanel("BETYdb Trait Data"),
21-
sidebarLayout (
22-
sidebarPanel(
23-
# season menu
24-
selectInput('selectedSeason', 'Season', rownames(seasons)),
25-
# variable menu to be rendered when variables for a given season are parsed in server()
26-
uiOutput('selectVariable')
27-
),
28-
mainPanel(
29-
plotOutput('traitPlot')
30-
)
21+
22+
title = "TERRA-REF Experimental Data",
23+
24+
h1('TERRA-REF Experimental Data'),
25+
26+
# season menu
27+
selectInput('selectedSeason', 'Season', rownames(seasons)),
28+
29+
hr(),
30+
31+
h3('Trait Data'),
32+
33+
# variable menu to be rendered when variables for a given season are parsed in server()
34+
uiOutput('selectVariable'),
35+
36+
plotOutput('traitPlot'),
37+
38+
hr(),
39+
h3('Managements Data'),
40+
41+
fluidRow(
42+
timevisOutput('timeline')
3143
)
44+
3245
)
3346

3447
# load trait data from BETYdb
@@ -52,13 +65,28 @@ loadTraitData <- function(startDate, endDate) {
5265
# update progress bar
5366
incProgress(1/initialDateDiff)
5467
}
68+
})
5569

56-
# format data as for usability with DataCache library
57-
retData <- list(fullTraitData)
58-
names(retData) <- 'fullTraitData'
70+
# format data as for usability with DataCache library
71+
retData <- list(fullTraitData)
72+
names(retData) <- 'fullTraitData'
5973

60-
return(retData)
61-
})
74+
return(retData)
75+
}
76+
77+
getManagementsData <- function(startDate, endDate) {
78+
79+
fullMgmtData <- data.frame()
80+
81+
currDate <- startDate
82+
while (endDate - currDate != 0) {
83+
# get management data for each day
84+
currMgmtData <- betydb_query(table='managements', date=paste0('~', currDate))
85+
fullMgmtData <- rbind(fullMgmtData, currMgmtData)
86+
currDate <- currDate + days(1)
87+
}
88+
89+
return(fullMgmtData)
6290
}
6391

6492
# handle all app logic
@@ -80,6 +108,7 @@ server <- function(input, output) {
80108

81109
# get unique variable ids from observations in current season
82110
variableIds <- unique(as.numeric(fullTraitData$variable_id))
111+
83112
# query API for readable names for variable ids, set names
84113
variableNames <- vector()
85114
for (variableId in variableIds) {
@@ -103,14 +132,30 @@ server <- function(input, output) {
103132
# get observations for selected variable
104133
variableIdData <- betydb_query(table='variables', id=input$selectedVariable)
105134
variableTraitData <- subset(fullTraitData, variable_id==as.numeric(variableIdData$id))
135+
136+
# get specie data for title
137+
specieId <- unique(as.numeric(variableTraitData$specie_id))
138+
specieData <- betydb_query(table='species', id=specieId)
139+
title <- paste0('Mean ', gsub('_', ' ', variableIdData$name), ' for ', specieData$scientificname)
106140

107141
# generate timeseries of boxplots from mean value
108142
ggplot(variableTraitData, aes(as.Date(date), mean)) +
109143
geom_boxplot(aes(group=cut_width(as.Date(date), 1))) +
110-
xlab("Dates") + ylab(variableIdData$units) +
144+
labs(title=title,
145+
x="Observation Dates", y=variableIdData$units) +
111146
theme(text = element_text(size=20), axis.text.x = element_text(angle=45, hjust=1))
112147
}
113-
148+
})
149+
150+
# generate timeline visualization for managements data
151+
output$timeline <- renderTimevis({
152+
mgmtData <- getManagementsData(startDate=seasonStartDate(), endDate=seasonEndDate())
153+
timelineData <- data.frame(
154+
id=1:nrow(mgmtData),
155+
content=mgmtData$mgmttype,
156+
start=as.Date(mgmtData$date)
157+
)
158+
timevis(timelineData)
114159
})
115160
}
116161

0 commit comments

Comments
 (0)