-
Notifications
You must be signed in to change notification settings - Fork 5
/
plot_functions.r
72 lines (59 loc) · 1.81 KB
/
plot_functions.r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# plot_functions.r : functions for plotting temperature data given a USCRN HEADERS.txt file and one
# or more data files.
library(ggplot2)
library(lubridate)
# Function to convert date from yyyymmdd format to ordinal date.
convert_date=function(date_yyyymmdd)
{
yday(as.Date(date_yyyymmdd,format="%Y%m%d"))
}
# Function to read header file.
ReadHeaders=function(headerfile)
{
all_headers=as.matrix(read.table(file=headerfile))
# The column names for the data files are located on row 2.
headers=all_headers[2,]
headers
}
ReadData=function(datafiles,headers)
{
# Read the data files into a data frame.
final_dataset = NULL
for ( datafile in datafiles )
{
# Read the data file into a data frame.
dataset=read.table(datafile)
# Assign names to the columns.
names(dataset)=headers
# Get the location name from the name of the file.
location=tools::file_path_sans_ext(paste(strsplit(datafile,"_")[[1]][-1],collapse="_"))
# Add location name to the data set.
dataset$location=rep(location,dim(dataset)[1])
# Replace any missing T_DAILY_MAX values with the value NA.
dataset$T_DAILY_MAX[which(dataset$T_DAILY_MAX==-9999.0)]=NA
# Add an ordinal date column.
dataset$ordinal_date=convert_date(as.character(dataset$LST_DATE))
# Concatenate data for this location to the final
# dataset
if ( is.null(final_dataset) )
final_dataset=dataset
else
final_dataset=rbind(final_dataset,dataset)
}
final_dataset
}
PlotData=function(headerfile,datafiles)
{
# Read the header file.
headers=ReadHeaders(headerfile)
# Read the data files.
final_dataset=ReadData(datafiles,headers)
if ( !interactive() ) {
# Open a PNG file for the plot.
png()
}
print(ggplot(data=final_dataset,aes(x=ordinal_date,y=T_DAILY_MAX,group=location))+geom_line(aes(color=location)))
if ( !interactive() ) {
dev.off()
}
}