###—————————————————————————–
### 실습용 데이터
###—————————————————————————–
data(ChickWeight, package="datasets") #— 식이요법을 적용한 닭
head(ChickWeight)
#— Time : 시간
#— weight : 몸무게
#— Chick : 닭의 ID
#— Diet : 닭에게 먹인 다이어트 약
data(mtcars, package="datasets") #— 자동차 테스트에 관한 데이터
head(mtcars)
#— wt : 무게
#— mpg : 연비
data(movies, package="ggplot2")
head(movies)
data(economics, package="ggplot2") #— 미국 경제 상황에 대한 시계열 데이터
head(economics)
#— date : 월별로 정보를 수집한 시점
#— pce : 개인 소비지출
#— pop : 총인구 (1000 단위)
#— psavert : 개인 저축률
#— unempmed : 실업기산 중앙값 (주 단위)
#— unemploy : 실업자수 (1000 단위)
data(diamonds, package="ggplot2") #— 다이아몬드의 캐럿, 커팅 정보
head(diamonds)
#— price : 가격 ($)
#— carat : 다이아몬드의 무게
#— cut : cut 품질
#— colour : J ~ D (D가 최상품)
#— clearity : 투명도, I1 ~ IF (IF가 최상품)
#— I1, SI1, SI2, VS1, VS2, VVS1, VVS2, IF
#— x, y : 크기 (mm),
#— z : 깊이 (mm)
#— table : 다이아몬드 꼭지의 폭과 제일 넓은 곳의 거리
data(Orange, package="datasets")
#(data <- read.table(file = url("http://dl.dropbox.com/u/1648032/ggplot2_tutorial_dataset.txt"), header=TRUE, sep="t",
# stringsAsFactors=FALSE, na.strings=c('NIL'),
# comment.char="#", encoding="UTF-8") )
#write.table(data, file="data/ADV_5_3_003.csv", append=FALSE, quote=FALSE, sep=",", row.names=FALSE)
(data01 <- read.table("data/ADV_5_3_003.csv", header=TRUE, sep=",",
stringsAsFactors=FALSE, na.strings=c('NIL'), comment.char="#",
fileEncoding="UTF-8", encoding="CP949"))
set.seed(1410)
(dsmall <- diamonds[sample(nrow(diamonds), 100),])
###—————————————————————————–
### 산점도
###—————————————————————————–
#— geom_point() : 산점도 (XY 그래프)
#— geom_smooth() : 평균선
#— geom_hline() : 가로선
#— annotate() : 박스
#— scale_shape_identity() :
library(ggplot2)
(g <- qplot(wt, mpg, colour = hp, data = mtcars))
(g <- g + coord_cartesian(ylim = c(0, 40))) #— ylim : y축의 범위 지정
(g <- g + scale_colour_continuous(breaks = c(100, 300))) #— breaks : 색상 분류 기준에서 break point 지정
(g <- g + guides(colour = "colourbar")) #— 범례로 색상바 사용
(g <- g + guides(colour = guide_legend())) #— 이산형 범례, 작은값 -> 큰값
(g <- g + guides(colour = guide_legend(reverse=TRUE))) #— 이산형 범례, 큰값 -> 작은값
(g <- g %+% mtcars[1:10, ]) #— 최초 10개의 데이터만 적용
(g <- qplot(disp, wt, colour = hp, data = mtcars))
(g <- g + geom_smooth())
(g + scale_x_continuous(limits = c(325, 500))) #— 범위를 지정하여 그래프를 그림
(g + scale_x_reverse())
(g + scale_y_continuous(limits = c(3, 5))) #— 범위를 지정하여 그래프를 그림
(g + scale_y_reverse())
g <- ggplot(ChickWeight, aes(x = Time, y = weight, colour = Diet)) #— colour : 색상 분류 기준 (선 색)
(g <- g + geom_point(alpha = .3)) #— geom_point() : 점으로 표시, alpha : 투명도
(g <- g + geom_smooth(alpha = .1, size = 1)) #— geom_smooth() : 평균선 표시, size : 선의 굵기
(data <- data.frame(x = rnorm(5000), y = rnorm(5000)))
head(data)
g <- ggplot(data, aes(x, y))
(g + geom_point())
(g + geom_point(alpha = 0.5))
(g + geom_point(alpha = 1/10))
g <- ggplot(mtcars, aes(wt, mpg))
(g + geom_point())
(g + geom_point(size = 4))
(g + geom_point(size = mtcars$qsec))
(g + geom_point(aes(colour = factor(cyl)), size = 4))
(g + geom_point(aes(shape = factor(cyl)), size = 4))
(g + geom_point(shape = 5))
(g + geom_point(shape = "k", size = 3))
(g + geom_point(shape = "."))
(g + geom_point(shape = NA))
(g + geom_point() + geom_hline(yintercept = 25, size = 3.5)) #— geom_hline : 가로선 추가
(g + geom_point() + annotate("rect", xmin = 2, xmax = 3.5, ymin = 2, ymax = 25, fill = "dark grey", alpha = .5))
(data <- data.frame(x = 1:5, y = 1:25, z = 1:25))
g <- ggplot(data, aes(x, y))
(g <- g + geom_point(aes(shape = z), size = 4))
(g <- g + scale_shape_identity()) #— shape에 주어진 연속값을 불연속 값으로 매핑
(g <- qplot(data = data01, x = Hab, y = var1))
(g <- qplot(data = data01, x = BM, y = var1, log = "xy", color = Tribe))
(g <- qplot(data = data01, x = BM, y = var1, log = "xy", color = Tribe, facets = Hab ~ Tribe))
(g <- qplot(data = data01, x = BM, y = var1, log = "xy", color = Tribe, facets = ~ Tribe))
(g <- qplot(data = data01, x = BM, y = var1, color = Tribe, facets = ~ Tribe))
(g <- g + stat_smooth(method = "lm"))
qplot(x = carat, y = price, data = diamonds)
qplot(x = log(carat), y = log(price), data = diamonds)
qplot(x = carat, y = price, data = diamonds, log = "xy")
qplot(carat, price, data = dsmall, colour = color, main = "산점도", xlab = "X축", ylab = "Y축")
qplot(carat, price, data = dsmall, shape = cut)
qplot(carat, price, data = diamonds, alpha = I(1/10))
qplot(carat, price, data = diamonds, alpha = I(1/100))
qplot(carat, price, data = diamonds, alpha = I(1/200))
qplot(carat, price, data = diamonds, geom = c("point", "smooth"))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), se = FALSE)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "loess")
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), span = 0.2)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), span = 1)
library(mgcv) #— gam, bam modelling
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method = "gam", formula = y ~ s(x))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method = "gam", formula = y ~ s(x, bs = "cs"))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "lm")
#ggsave("ggplot001.png")
###—————————————————————————–
### 선 그래프
###—————————————————————————–
#— geom_line() : 선 그래프
g <- ggplot(ChickWeight, aes(x = Time, y = weight, colour = Diet, group = Chick))
(g <- g + geom_line()) #— geom_line() : 라인 챠트 표시
g <- ggplot(economics, aes(x = date, y = unemploy))
(g + geom_line()) #— geom_line() : 선 그래프 표시
(g + geom_line(colour = "red"))
(g + geom_line(colour = "red", size = 3))
(g + geom_line(linetype = 1))
(g + geom_line(linetype = 2))
(g + geom_line(linetype = 3))
(g + geom_line(linetype = 4))
(g + geom_line(linetype = "dotdash"))
rescale01 <- function(x) { #— 상대적인 값을 만들어 표준화
(x – min(x)) / diff(range(x))
}
library(plyr)
(data <- data.frame(date = economics[,]$date, colwise(rescale01)(economics[, -(1:2)])))
library(reshape2)
(data <- melt(data, id = "date"))
rm(rescale01)
g <- ggplot(data, aes(date, value, group = variable))
g + geom_line(linetype = 1)
(g + geom_line(linetype = data$variable))
qplot(date, unemploy / pop, data = economics, geom = "line")
qplot(date, uempmed, data = economics, geom = "line")
year <- function(x) { as.POSIXlt(x)$year + 1900; } #— 날자 연도를 숫자로 반환
qplot(unemploy / pop, uempmed, data = economics, geom = c("point", "path"))
qplot(unemploy / pop, uempmed, data = economics, geom = c("path"),
colour = year(date)) + scale_size_area()
g <- ggplot(Orange, aes(x=age, y=circumference, colour=Tree))
(g + geom_line())
###—————————————————————————–
### 히스토그램
###—————————————————————————–
#— geom_histogram() : 히스토그램
#— facet_grid() : 각각을 별도의 챠트로 표시
g <- ggplot(subset(ChickWeight, Time == 21), aes(x = weight, fill = Diet)) #— fill : 색상 분류 기준 (채워넣는 색)
(g <- g + geom_histogram(colour = "black", binwidth = 50)) #— geom_histogram() : 히스토그램 표시, binwidth : x축 간격
(g <- g + facet_grid(Diet ~ .)) #— facet_grid() : 각각을 별도의 챠트로 표시
(g <- g + facet_grid(. ~ Diet)) #— facet_grid() : 각각을 별도의 챠트로 표시
g <- ggplot(movies, aes(x = rating))
(g <- g + geom_histogram())
(g <- g + geom_histogram(aes(fill = ..count..))) #— ..count.. : 관측 개수
g <- ggplot(diamonds, aes(carat, ..density..)) #— ..density.. : 밀도 (전체 합이 1)
(g <- g + geom_histogram(binwidth = 0.2))
(g + facet_grid(. ~ cut))
(g <- qplot(data = data01, x = BM, main = "Histogram of BodyMass"))
qplot(carat, data = diamonds, geom = "histogram")
qplot(carat, data = diamonds, geom = "histogram", fill = color)
qplot(carat, data = diamonds, geom = "histogram", binwidth = 1, xlim = c(0, 3))
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.01, xlim = c(0, 3))
qplot(carat, data = diamonds, facets = color ~ .,
geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
qplot(carat, ..density.., data = diamonds, facets = color ~ .,
geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
###—————————————————————————–
### 분포도
###—————————————————————————–
#— geom_density() : 분포도
g <- ggplot(subset(ChickWeight, Time == 21), aes(x = weight, colour = Diet))
(g <- g + geom_density()) #— geom_density() : 분포도 표시
qplot(carat, data = diamonds, geom = "density")
qplot(carat, data = diamonds, geom = "density", colour = color)
###—————————————————————————–
### 막대 그래프
###—————————————————————————–
#— geom_bar() : 막대 그래프
(g <- qplot(cut, data = diamonds, geom = "bar"))
(g <- g + coord_flip())
g <- ggplot(mtcars, aes(factor(cyl)))
(g <- g + geom_bar()) #— geom_bar() : 막대 그래프 표시
(g <- g + geom_bar(fill = "red"))
(g <- g + geom_bar(colour = "red"))
(g <- g + geom_bar(fill = "white", colour = "red"))
g <- ggplot(mtcars, aes(factor(cyl), fill = factor(vs)))
(g <- g + geom_bar()) #— geom_bar() : 막대 그래프 표시
g <- ggplot(diamonds, aes(clarity, fill = cut))
(g + geom_bar())
library(plyr)
(g + geom_bar(aes(order = desc(cut))))
qplot(color, data = diamonds, geom = "bar")
qplot(color, data = diamonds, geom = "bar", weight = carat) + scale_y_continuous("carat")
###—————————————————————————–
### Point Range
###—————————————————————————–
#— geom_pointrange()
(m <- lm(price ~ cut, diamonds))
(data <- data.frame(cut = unique(diamonds$cut),
predict(m, data.frame(cut = unique(diamonds$cut)), se = TRUE)[c(“fit”, “se.fit”)]))
g <- ggplot(data, aes(x = cut, y = fit,
ymin = fit – se.fit,
ymax = fit + se.fit, colour = cut))
(g + geom_pointrange())
rm(m)
###—————————————————————————–
### 박스 그래프
###—————————————————————————–
#— qplot(geom = "boxplot") : 박스그래프
(g <- qplot(cut, price, data = diamonds, geom = "boxplot"))
(g <- last_plot() + coord_flip())
(g <- qplot(data = data01, x = Hab, y = var1, geom = "boxplot"))
qplot(cut, price, data=diamonds, geom="boxplot")
###—————————————————————————–
#— stat_bin2d() :
g <- ggplot(diamonds, aes(carat, price))
(g <- g + stat_bin2d(bins = 25, colour = "grey50"))
(g + scale_x_continuous(limits = c(0, 2))) #— 범위를 지정하여 그래프를 그림
###—————————————————————————–
#— jitter
qplot(color, price / carat, data = diamonds, geom = "jitter", alpha = I(1 / 5))
qplot(color, price / carat, data = diamonds, geom = "jitter", alpha = I(1 / 50))
qplot(color, price / carat, data = diamonds, geom = "jitter", alpha = I(1 / 200))
rm(list=ls(all=TRUE)) #— 작업 영역에 저장된 데이터 모두 삭제
###—————————————————————————–