forked from rdpeng/ExData_Plotting1
-
Notifications
You must be signed in to change notification settings - Fork 0
/
plot2.R
53 lines (48 loc) · 1.87 KB
/
plot2.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
## plot2
library(data.table)
# Set english locale. Needed to show the days with english name.
# Needed only if the machine uses another locale e.g "Italian".
Sys.setlocale("LC_TIME", "English")
## Downloads the .zip file and extracts only interesting data from it.
## Function saves the .zip file on disk and if it exists
## avoids to download it again.
loadData <- function(){
filePath <- "./household_power_consumption.zip"
# donwload the .zip file if there isn't.
if(!file.exists(filePath)){
download.file("https://d396qusza40orc.cloudfront.net/exdata%2Fdata%2Fhousehold_power_consumption.zip",
filePath, method="curl")
}
# get the .txt filename.
dataName <- unzip(filePath, list=TRUE)$Name
# unizp the file.
dataFile <- unzip(filePath)
# open .txt file for reading.
tmp <- file(dataName, "r")
# find the lines with dates 1/2/2007 through 2/2/2007 and save them on file.
cat(grep("(^Date)|(^[1|2]/2/2007)",readLines(tmp), value=TRUE), sep="\n",
file="dataToPlot.txt")
close(tmp)
# read the selected data into memory.
dataToPlot <- fread("dataToPlot.txt", sep=";", header=TRUE, na.strings="?")
dataToPlot
}
## Converts date format contained in the data.
convertDate <- function(data){
# convert dates. NB capital "Y" because year=yyyy
data$Date <- as.Date(data$Date, "%d/%m/%Y")
#convert to "date time" string to be later converted as.POSIXct
data <- paste(as.character(data$Date), data$Time, sep=" ")
data
}
## Plots the data on a .png file.
plot2 <- function(dataToPlot){
# open png device
png("plot2.png", width = 480, height = 480, bg="transparent")
plot(as.POSIXct(convertDate(dataToPlot)), dataToPlot$Global_active_power,
xlab="", type="l", ylab="Global Active Power (kilowatts)")
#close device
dev.off()
}
data <-loadData()
plot2(data)