1. 고수준 작도 함수
(1) plot() 함수 : 선형 그래프 그리기
- plot (x축 데이터, y축 데이터, 옵션)
- 옵션↓
인수 |
설명 |
main="메인제목" |
제목설정 |
sub="서브제목" |
서브제목설정 |
xlab="문자", ylab="문자" |
x,y 축에 사용할 문자열을 지정 |
ann=F |
x,y 축 제목을 지정하지 않음 |
tmag=2 |
제목 등에 사용되는 문자의 확대률 지정 |
axes =F |
x,y 축을 표시하지 않음 |
axis |
x,y 축을 사용자의 지정값으로 표시 |
그래프 타입 선택 |
type="p" |
점 모양 그래프 (기본값) |
type="l" |
선 모양 그래프 (꺾은선 그래프) |
type="b" |
점과 선 모양 그래프 |
type="c" |
"b"에서 점을 생략한 모양 |
type="o" |
점과 선을 중첩해서 그린 그래프 |
type="h" |
각 점에서 x축 까지의 수직선 그래프 |
type="s" |
왼쪽값을 기초로 계단 모양으로 연결한 그래프 |
type="S" |
오른쪽 값을 기초로 계단모양으로 연결한 그래프 |
type="n" |
축만 그리고 그래프는 그리지 않음 |
선의 모양 선택 |
lty=0, lty="blank" |
투명선 |
lty=1, lty="solid" |
실선 |
lty=2, lty="dashed" |
대쉬선 |
lty=3, lty="dotted" |
점선 |
lty=4, lty="dotdash" |
점선과 대쉬선 |
lty=5, lty="longdash" |
긴 대쉬선 |
lty=6, lty="twodash" |
2개의 대쉬선 |
색, 기호 등 |
col=1, col="blue" |
기호의 색지정 1:검정, 2:빨강, 3:초록, 4:파랑, 5:연파랑, 6:보라, 7:노랑, 8:회색 |
pch=0, pch="문자" |
점의 모양 지정 |
bg ="blue" |
그래프의 배경색 지정 |
lwd="숫자" |
선을 그릴때 선의 굵기 지정 |
cex="숫자" |
점이나 문자를 그릴때 점이나 문자의 굵기를 지정 |
> # y축 값을 동일하게 설정해서 출력하기
> y <- c(1,2,3,4)
> plot(y)
> # x,y축 값을 다 지정해서 출력하기
> # x,y 축 한계값 조정하기
> x <- 1:3
> y <- 4:6
> plot(x,y,xlim=c(1,5), ylim=c(1,10))
> # x축과 y축 제목, 그래프제목 지정해서 출력
> x <- 1:3
> y <- 4:6
> plot(x,y, xlim=c(1,5), ylim=c(1,10), xlab="x축값", ylab="y축값", main="PLOT TEST")
> # 여러조건을 추가해서 그래프 만들기
> apple <- c(100,120,160,140,150)
> plot(apple, type="o", col="red", ylim=c(0,200), axes=FALSE, ann=FALSE)
> axis(1,at=1:5, lab=c("월","화","수","목","금"))
> axis(2,ylim=c(0,200))
> title(main="APPLE", col.main="red", font.main=4)
> title(xlab="요일", col.lab="black")
> title(ylab="가격", col.lab="blue")
> # 한 화면에 여러개의 그래프를 동시에 배치
> # par (mfrow =c(행의 갯수, 열의 갯수))
> par(mfrow=c(1,3))
> apple <- c(10,20,25,15,20)
>
> plot(apple, type="o")
> plot(apple, type="s")
> plot(apple, type="l")
> # 여러개의 그래프를 중첩으로 그리기
> # par(new=T), par(add=T)를 그래프가 추가될때마다 사용해야함
> par(mfrow=c(1,1))
> y1 <- c(1,2,3,4,5)
> y2 <- c(2,3,4,5,6)
> y3 <- c(3,4,5,6,7)
>
> plot(y1, type="s", col="red", ylim=c(1,10))
>
> # 중복허용
> par(new=T)
> plot(y2, type="o", col="green", ylim=c(1,10))
>
> # 중복허용
> par(new=T)
> plot(y3, type="s", col="blue", ylim=c(1,10))
> # lines( )함수를 사용하여 그래프를 중첩으로 그리기
> y1 <- c(1,2,3,4,5)
> y2 <- c(2,3,4,5,6)
> y3 <- c(3,4,5,6,7)
>
> plot(y1, type="s", col="red", ylim=c(1,10))
> lines(y2, type="o", col="green", ylim=c(1,10))
> lines(y3, type="s", col="blue", ylim=c(1,10))
> # 범례 추가하기
> # legend (x축위치, y축위치, 내용, cex=글자크기, col=색상, pch=크기, lty=선모양)
> legend(4,9,c("Y1","Y2","Y3"), cex=0.9, col=c("red", "green", "blue"), lty=1)
(2) barplot( ) : 막대 그래프 그리기
- 옵션↓
인수 | 설명 |
angle, density, col | 막대를 칠하는 선분의 각도, 선분의 수, 선분의 색 지정 |
legend | 오른쪽 상단에 범례추가 |
names | 각 막대의 라벨을 정하는 문자열 벡터를 지정 |
width | 각 막대의 상대적인 폭을 벡터로 지정 |
space | 각 막대 사이의 간격을 지정 |
beside | TRUE를 지정하면 각각의 값마다 막대를 그림 |
horiz | TRUE를 지정하면 막대를 옆으로 눕혀서 그림 |
> # 기본 bar 그래프
> x <- c(1,2,3,4,5)
> barplot(x)
> # 그래프 가로로 출력 (horiz=T)
> x <- c(1,2,3,4,5)
> barplot(x, horiz=T)
>
> # 그룹으로 묶어서 출력 (beside=T)
> x <- matrix(c(1,2,3,4),2,2)
> barplot(x, beside=T, names=1:2)
>
> # 그룹으로 묶어서 하나의 막대로 출력
> x <- matrix(c(1,2,3,4),2,2)
> barplot(x, names=1:2)
>
> # 그룹으로 묶어서 가로로 출력(beside, horiz=T)
> x <- matrix(c(1,2,3,4),2,2)
> barplot(x, beside=T, horiz=T, names=1:2)
>
> barplot(x, horiz=T, names=1:2)
>
> # 여러가지 옵션을 추가하여 그래프 그리기
> x <- matrix(c(1,2,3,4),2,2)
> barplot(x, beside=T, horiz=T, names=1:2)
>
> apple <- c(100,120,140,130,150)
> barplot(apple, main= "Apple", xlab="요일", ylab="금액", names.arg=c("월","화","수","목","금"),
+ border="green", density=c(10,20,30,40,50))
>
> # 여러막대그래프를 그룹으로 묶어서 한꺼번에 출력
> apple <- c(100,120,140,130,150)
> peach <- c(180,200,210,190,170)
> berry <- c(110,150,160,90,120)
>
> fruits <- data.frame(APPLE=apple, PEACH=peach, BERRY=berry)
> fruits
APPLE PEACH BERRY
1 100 180 110
2 120 200 150
3 140 210 160
4 130 190 90
5 150 170 120
>
> barplot(as.matrix(fruits), main="FRUITS", ylab="수량", beside=T,
+ col=rainbow(5), ylim=c(0,400))
>
> legend(14,400, c("월","화","수","목","금"), cex=0.8, fill=rainbow(5))
>
> # 하나의 막대그래프에 여러가지 내용 출력하기
> barplot(t(fruits), main="FRUITS", ylab="판매량", ylim=c(0,900),
+ col=rainbow(3), space=0.1, cex.axis=0.8, las=1,
+ names.arg=c("월","화","수","목","금"), cex=0.8)
>
> # 조건을 주고 그래프 그리기
> legend(3.5, 900, names(fruits), cex=0.8, fill=rainbow(3))
> peach <- c(180,200,210,190,170)
> colors <- c( )
> for( i in 1:length(peach)){
+ if (peach[i] >= 200) {colors <- c(colors, "red")}
+ else { colors <- c(colors, "blue")}
+ }
>
> barplot(peach, main="PEACH", xlab="요일", ylab="수량", names.arg=c("월","화","수","목","금"), col=colors)
>
(3) 히스토그램 그래프 : hist( ), 특정 데이터의 빈도수를 막대모양으로 표현
1. 가장 큰 값과 가장 작은 값을 찾는다.
2. 최대값과 최소값 사이를 적절한 구간으로 나눈다.
3. 각 구간을 대표하는 대표값을 설정한다. (보통 구간의 가운데 값을 지정)
4. 각 구간의 값의 개수를 확인 (도수)
5. 각 구간의 도수가 전체값에서 차지하는 비중을 계산 (상대도수)
6. 각 구간의 도수를 누적해서 계산 (누적도수)
> height <- c(182,175,167,172,163,178,181,166,159,155)
> hist(height, main="histogram of height")
(4) 파이(pie)모양의 차트 : pie( ), 전체합이 100이 되어야 하는 경우에 서로를 비교할때 사용
- 옵션↓
인수 | 설명 |
angle, density, col | pie부분을 구성하는 각도(angle), 수(density), 색상(col) 지정 |
labels | 각 pie부분의 이름을 지정하는 문자벡터 지정 |
radius | 원형의 크기를 지정 |
clockwise | 시계방향(T), 반시계방향(F) 회전 여부 지정. 기본값 반시계 |
init.angle | 시작되는 지점의 각도지정 |
> # 기본 pie차트
> apple <- c(10,20,30,40)
> pie(apple)
>
> # 시작 각도를 90도로 지정
> apple <- c(10,20,30,40)
> pie(apple, init.angle=90)
>
> # 색깔과 label명 지정
> apple <- c(10,20,30,40)
> pie(apple, init.angle=90, col=rainbow(length(apple)), label=c("1주","2주","3주","4주"))
>
> # 비율값을 함께 출력하기
> pct <- round(apple/sum(apple)*100, 1)
> lab <- paste(pct,"%")
> pie(apple, init.angle=90, col=rainbow(length(apple)), label=lab)
>
> legend(0.8,1.2,c("1주","2주","3주","4주"), cex=0.8, fill=rainbow(length(apple)))
>
> # 범례를 생략하고 그래프에 바로 출력
> pct <- round(apple/sum(apple)*100, 1)
> lab1 <- c("1주","2주","3주","4주")
> lab2 <- paste(lab1, "\n", pct, "%")
> pie(apple,init.angle=90, col=rainbow(length(apple)), label=lab2)
(5) pie3D함수 : pie( )함수를 3D로
- plotrix 패키지 필요
> # plotrix 패키지 설치
> install.packages("plotrix")
Installing package into ‘C:/Users/stu/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
URL 'http://cran.nexr.com/bin/windows/contrib/3.1/plotrix_3.5-10.zip'을 시도합니다
Content type 'application/zip' length 651095 bytes (635 Kb)
URL을 열었습니다
downloaded 635 Kb
패키지 ‘plotrix’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
다운로드된 바이너리 패키지들은 다음의 위치에 있습니다
C:\Users\stu\AppData\Local\Temp\Rtmpe4Ks99\downloaded_packages
> library(plotrix)
> # pie3D차트 만들기1
> apple <- c(260,300,250,280,310)
> f_days <- round(apple/sum(apple)*100, 1)
> f_labels <- paste(f_days,"%")
>
> pie3D(apple, main="Apple 3D", col=rainbow(length(apple)), cex=0.8, labels=f_labels, explode=0.05)
> apple <- c(260,300,250,280,310)
> # pie3D차트 만들기2
> f_days <- round(apple/sum(apple)*100, 1)
> f_days2 <- c("월","화","수","목","금")
> f_labels <- paste(f_days2,"\n", f_days, "%")
>
> pie3D(apple, main="Apple 3D", col=rainbow(length(apple)), cex=0.8, labels=f_labels, explode=0.05)
>
(6) 상자모양차트 : boxplot( ), 최대값, 최소값, 평균값 등을 비교할때 사용
- 옵션↓
인수 | 설명 |
col | 박스 내부의 색깔을 지정 |
names | 각 막대의 라벨을 지정할 문자벡터 지정 |
range | 박스의 끝에서 수염까지의 길이를 지정, 기본값 1.5 |
width | 박스의 폭 지정 |
notch | true로 지정할 경우 상자의 허리 부분을 가늘게 표시 |
horizontal | true로 지정하면 상자를 수평으로 그림, 아래부터 차례로 나열 |
> boxplot(apple, banana, peach,
+ col=c("yellow", "cyan", "green"),
+ names=c("apple","banana","peach"),
+ horizontal=TRUE)
(7) treemap (나무맵) : 어떤 기준값을 지정하여 그 값을 데이터끼리 모아서 면적으로 출력
- treemap 패키지 필요
> # treemap 패키지 설치
> install.packages("treemap")
Installing package into ‘C:/Users/stu/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
also installing the dependencies ‘chron’, ‘httpuv’, ‘mime’, ‘xtable’, ‘htmltools’, ‘R6’, ‘data.table’, ‘gridBase’, ‘igraph’, ‘shiny’
.
.
패키지 ‘chron’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘httpuv’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘mime’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘xtable’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘htmltools’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘R6’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘data.table’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘gridBase’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘igraph’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘shiny’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
패키지 ‘treemap’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
다운로드된 바이너리 패키지들은 다음의 위치에 있습니다
C:\Users\stu\AppData\Local\Temp\Rtmpe4Ks99\downloaded_packages
> library(treemap)
> setwd("d:\\r_temp")
> data <- read.csv("학생시험결과_전체점수.csv", header=T, sep=",")
> data
순위 이름 조 점수 X100점..환산점수 성취율
1 1 이효우 1 48 100.0 1.00
2 2 양덕유 2 46 95.8 0.96
3 3 배현우 1 45 93.8 0.94
4 4 박민정 3 43 89.6 0.90
5 5 장동희 1 41 85.4 0.85
6 6 최성민 1 41 85.4 0.85
7 7 이천균 4 41 85.4 0.85
8 8 홍진관 3 40 83.3 0.83
9 9 정현철 1 39 81.3 0.81
10 10 최보희 1 39 81.3 0.81
11 11 김진현 2 39 81.3 0.81
12 12 이용훈 2 39 81.3 0.81
13 13 윤정웅 3 39 81.3 0.81
14 14 신지현 1 38 79.2 0.79
15 15 주시현 4 48 100.0 1.00
16 16 최민성 4 37 77.1 0.77
17 17 조준호 2 36 75.0 0.75
18 18 정정원 2 34 70.8 0.71
19 19 김태동 3 34 70.8 0.71
20 20 유영대 4 33 68.8 0.69
21 21 문성훈 2 31 64.6 0.65
22 22 김기홍 2 30 62.5 0.63
23 23 백두현 4 30 62.5 0.63
24 24 김주한 4 27 56.3 0.56
25 25 최경우 3 24 50.0 0.50
26 26 이동근 3 23 47.9 0.48
27 27 박헌수 4 23 47.9 0.48
28 28 범솔 3 13 27.1 0.27
>
> # 점수값을 기준으로 treemap 생성
> treemap(data, vSize="점수", index="점수")
>
> # 같은조를 기준으로 treemap 생성
> treemap(data, vSize="조", index="이름")
>
> # 같은점수를 받은 사람끼리 모아서 출력, index=이름
> treemap(data, vSize="점수", index=c("점수","이름"))
>
> # 점수를 기준으로 같은 조끼리 점수별로 표시
> treemap(data, vSize="점수", index=c("조","점수"))
>
> # 이름과 조번호까지 같이 나오게 표시
> treemap(data, vSize="점수", index=c("조","점수","이름"))
(8) starts( ) : 나이팅게일 차트라고도 함
> setwd("d:\\r_temp")
> jumsu <- read.table("학생별전체성적.txt", header=T, sep=",")
>
> jumsu
이름 국어 영어 수학 국사 화학 물리
1 이효우 90 85 55 88 91 79
2 양덕유 70 65 80 75 76 89
3 박민정 92 95 76 65 89 91
4 장동희 76 89 88 98 100 91
5 이천균 97 87 83 91 86 91
6 홍진관 80 86 97 85 69 77
7 최보희 20 30 40 50 70 90
8 윤정웅 50 52 54 56 58 60
9 주시현 90 95 100 85 89 92
>
> # 각 행번호를 이름으로 변경, 학생별로 각 과목성적을 불러올때 이름이 필요하기 때문
> row.names(jumsu) <- jumsu$이름
> jumsu
이름 국어 영어 수학 국사 화학 물리
이효우 이효우 90 85 55 88 91 79
양덕유 양덕유 70 65 80 75 76 89
박민정 박민정 92 95 76 65 89 91
장동희 장동희 76 89 88 98 100 91
이천균 이천균 97 87 83 91 86 91
홍진관 홍진관 80 86 97 85 69 77
최보희 최보희 20 30 40 50 70 90
윤정웅 윤정웅 50 52 54 56 58 60
주시현 주시현 90 95 100 85 89 92
>
> jumsu <- jumsu[,2:7]
> jumsu
국어 영어 수학 국사 화학 물리
이효우 90 85 55 88 91 79
양덕유 70 65 80 75 76 89
박민정 92 95 76 65 89 91
장동희 76 89 88 98 100 91
이천균 97 87 83 91 86 91
홍진관 80 86 97 85 69 77
최보희 20 30 40 50 70 90
윤정웅 50 52 54 56 58 60
주시현 90 95 100 85 89 92
>
> # 결과물을 그림으로 저장 , 결과없이 이름만 쓰면 setwd로 지정한 작업 디렉토리에 저장됨
> stars(jumsu, flip.labels=FALSE, draw.segment=FALSE, frame.plot=TRUE, full=TRUE, main="학생별 과목별 분석 다이어그램")
> savePlot("star_1.png", type="png")
>
> # 범례표시
> label <- names(jumsu)
> val <- table(label)
> pie(val, labels=label, radius=0.1, cex=0.6, col=NA)
> savePlot("star_2.png", type="png")
>
> # 그래프에 색깔을 넣어서 출력
> stars(jumsu, flip.labels=FALSE, draw.segment=TRUE, frame.plot=TRUE, full=TRUE, main="학생별 과목별 분석 다이어그램")
>
> # 범례표시(색깔을 넣어서)
> label <- names(jumsu)
> val <- table(label)
> color <- c("black", "red", "green", "blue", "cyan", "violet")
> pie(val, labels=label, col=color, radius=0.1, cex=0.6)
> savePlot("star_4.png", type="png")
>
> #360도 원모양의 차트를 반원으로 출력 full=FALSE
> stars(jumsu, flip.labels=FALSE, draw.segment=TRUE, frame.plot=TRUE, full=FALSE, main="학생별 과목별 분석 다이어그램")
>
(9) igraph( ) : 관계도 그리기, 서로 연관이 있는 데이터들을 연결해서 표현
- 주로 소셜네트워크에서 친구가 어떻게 맺어져 있는지, 특정 기술이 어떤 기술과 관계가 있는지 등의 데이터 표현
- igraph 패키지 설치 필요
> install.packages("igraph")
Installing package into ‘C:/Users/stu/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
--- 현재 세션에서 사용할 CRAN 미러를 선택해 주세요 ---
URL 'http://cran.nexr.com/bin/windows/contrib/3.1/igraph_0.7.1.zip'을 시도합니다
Content type 'application/zip' length 7368442 bytes (7.0 Mb)
URL을 열었습니다
downloaded 7.0 Mb
패키지 ‘igraph’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
다운로드된 바이너리 패키지들은 다음의 위치에 있습니다
C:\Users\stu\AppData\Local\Temp\Rtmp67033l\downloaded_packages
> library(igraph)
>
> g1 <- graph( c(1,2, 2,3, 2,4, 1,4, 5,5, 3,6))
> plot(g1)
>
> str(g1)
IGRAPH D--- 6 6 --
+ edges:
[1] 1->2 2->3 2->4 1->4 5->5 3->6
> savePlot("network_1.png", type="png")
>
> name <- c('서진수 대표이사', '일지매 부장', '김유신 과장', '손흥민 대리',
+ '노정호 대리', '이순신 부장', '유관순 과장', '신사임당 대리',
+ '강감찬 부장', '광개토 과장', '정몽주 대리')
>
> pemp <- c('서진수 대표이사', '서진수 대표이사', '일지매 부장', '김유신 과장',
+ '김유신 과장', '서진수 대표이사', '이순신 부장', '유관순 과장',
+ '서진수 대표이사', '강감찬 부장', '광개토 과장')
>
> emp <- data.frame(이름=name, 상사이름=pemp)
>
> emp
이름 상사이름
1 서진수 대표이사 서진수 대표이사
2 일지매 부장 서진수 대표이사
3 김유신 과장 일지매 부장
4 손흥민 대리 김유신 과장
5 노정호 대리 김유신 과장
6 이순신 부장 서진수 대표이사
7 유관순 과장 이순신 부장
8 신사임당 대리 유관순 과장
9 강감찬 부장 서진수 대표이사
10 광개토 과장 강감찬 부장
11 정몽주 대리 광개토 과장
>
> g <- graph.data.frame(emp, directed=T)
> plot(g, layout=layout.fruchterman.reingold, vertex.size=8, edge.arrow.size=0.5)
>
> str(g)
IGRAPH DN-- 11 11 --
+ attr: name (v/c)
+ edges (vertex names):
[1] 서진수 대표이사->서진수 대표이사 일지매 부장 ->서진수 대표이사
[3] 김유신 과장 ->일지매 부장 손흥민 대리 ->김유신 과장
[5] 노정호 대리 ->김유신 과장 이순신 부장 ->서진수 대표이사
[7] 유관순 과장 ->이순신 부장 신사임당 대리 ->유관순 과장
[9] 강감찬 부장 ->서진수 대표이사 광개토 과장 ->강감찬 부장
[11] 정몽주 대리 ->광개토 과장
> savePlot("network_2.png", type="png")
>
> g3 <- graph.data.frame(emp, directed=F)
> plot(g3, layout=layout.fruchterman.reingold, vertex.size=8, edge.arrow.size=0.5, vertex.label=NA)
> savePlot("network_3.png", type="png")
>
(10) ggplot2( ) 패키지
- plot( ) 함수의 확장 버전, 다양한 형태로 데이터 표현 가능
- R에서 그래픽을 그릴때 많이 사용되는 패키지
- ggplo2 패키지 필요
- 문법 : ggplot(data, aes(x=x축데이터, y=y축데이터)) + geom 함수 ...
> # ggplot2 패키지 설치
> install.packages("ggplot2")
Installing package into ‘C:/Users/stu/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
URL 'http://cran.nexr.com/bin/windows/contrib/3.1/ggplot2_1.0.0.zip'을 시도합니다
Content type 'application/zip' length 2673501 bytes (2.5 Mb)
URL을 열었습니다
downloaded 2.5 Mb
패키지 ‘ggplot2’를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
다운로드된 바이너리 패키지들은 다음의 위치에 있습니다
C:\Users\stu\AppData\Local\Temp\Rtmp67033l\downloaded_packages
> library(ggplot2)
> setwd("d:\\r_temp")
> jumsu <- read.table("학생별국어성적.txt", header=T, sep=",")
> jumsu
이름 과목 점수
1 이효우 국어 90
2 양덕유 국어 70
3 박민정 국어 92
4 장동희 국어 76
5 이천균 국어 97
6 홍진관 국어 80
7 최보희 국어 20
8 윤정웅 국어 50
9 주인혜 국어 60
>
> ggplot(jumsu, aes(x=이름, y=점수)) + geom_point()
>
ggplot(data, aes(x=x축데이터, y=y축데이터)) + geom 함수
- data : 처리할 데이터 프레임 이름
- aes : aesthetic mapping, 미적 매핑, 스케일링(scaling) / x축데이터, y축데이터, 점의모양, 점의크기, 점의 색깔 등등
- geom 함수 : geometric object, 만들어진 데이터를 실제 렌더링으로 표현하는 부분
geom 설정 값
- stat : 주어진 데이터에서 geom에 필요한 데이터 생성
- stat_bin : 아래와 같은 데이터를 갖는 data frame 출력
count : 각 항목의 빈도수, 기본값
density : 각 항목의 밀도수
ncount : count와 같으나 값의 범위가 (0,1)로 스케일링 됨
ndensity : density와 같으나 값의 범위가 (0,1)로 스케일링 됨
* geom_bar( ) : bar plot과 비슷한 역할
> jumsu
이름 과목 점수
1 이효우 국어 90
2 양덕유 국어 70
3 박민정 국어 92
4 장동희 국어 76
5 이천균 국어 97
6 홍진관 국어 80
7 최보희 국어 20
8 윤정웅 국어 50
9 주인혜 국어 60
> ggplot(jumsu, aes(x=이름, y=점수)) + geom_bar(stat="identity")
>
> # 그래프안에 색상넣고 테두리 색상 지정
> ggplot(jumsu, aes(x=이름, y=점수)) + geom_bar(stat="identity", fill="cyan", colour="red")
>
> # x축 각도조절 및 색상 지정 (theme 옵션사용)
> gb <- ggplot(jumsu, aes(x=이름, y=점수)) + geom_bar(stat="identity", fill="cyan", colour="red")
>
> gb + theme(axis.text.x=element_text(angle=45, hjust=1, vjust=1, color="blue", size=10))
> # element_text, element_line, element_rect
> # bar 모양의 그래프에 여러과목이 동시에 출력되도록
> library(plyr)
> kem <- read.csv("학생별과목별성적_국영수.csv", header=T, sep=",")
> kem
이름 과목 점수
1 이효우 국어 90
2 양덕유 국어 70
3 박민정 국어 92
4 장동희 국어 76
5 이천균 국어 97
6 홍진관 국어 80
7 최보희 국어 20
8 윤정웅 국어 50
9 주인혜 국어 60
10 이효우 영어 85
11 양덕유 영어 65
12 박민정 영어 95
13 장동희 영어 89
14 이천균 영어 87
15 홍진관 영어 86
16 최보희 영어 30
17 윤정웅 영어 52
18 주인혜 영어 70
19 이효우 수학 55
20 양덕유 수학 80
21 박민정 수학 76
22 장동희 수학 88
23 이천균 수학 83
24 홍진관 수학 97
25 최보희 수학 40
26 윤정웅 수학 54
27 주인혜 수학 80
> # 이름과 과목순으로 정렬
> lab <- arrange(kem, 이름, 과목)
> lab
이름 과목 점수
1 박민정 국어 92
2 박민정 수학 76
3 박민정 영어 95
4 양덕유 국어 70
5 양덕유 수학 80
6 양덕유 영어 65
7 윤정웅 국어 50
8 윤정웅 수학 54
9 윤정웅 영어 52
10 이천균 국어 97
11 이천균 수학 83
12 이천균 영어 87
13 이효우 국어 90
14 이효우 수학 55
15 이효우 영어 85
16 장동희 국어 76
17 장동희 수학 88
18 장동희 영어 89
19 주인혜 국어 60
20 주인혜 수학 80
21 주인혜 영어 70
22 최보희 국어 20
23 최보희 수학 40
24 최보희 영어 30
25 홍진관 국어 80
26 홍진관 수학 97
27 홍진관 영어 86
> # 합계점수만들기 -> 그래프에 점수까지 출력하기 위해서
> lab <- ddply(lab, "이름", transform, 합계=cumsum(점수))
> lab
이름 과목 점수 합계
1 박민정 국어 92 92
2 박민정 수학 76 168
3 박민정 영어 95 263
4 양덕유 국어 70 70
5 양덕유 수학 80 150
6 양덕유 영어 65 215
7 윤정웅 국어 50 50
8 윤정웅 수학 54 104
9 윤정웅 영어 52 156
10 이천균 국어 97 97
11 이천균 수학 83 180
12 이천균 영어 87 267
13 이효우 국어 90 90
14 이효우 수학 55 145
15 이효우 영어 85 230
16 장동희 국어 76 76
17 장동희 수학 88 164
18 장동희 영어 89 253
19 주인혜 국어 60 60
20 주인혜 수학 80 140
21 주인혜 영어 70 210
22 최보희 국어 20 20
23 최보희 수학 40 60
24 최보희 영어 30 90
25 홍진관 국어 80 80
26 홍진관 수학 97 177
27 홍진관 영어 86 263
> # 그래프에서 수치를 출력할때 위치를 그래프의 가운데로 출력하기 위해 점수의 50%되는 위치 찾기
> lab <- ddply(lab, "이름", transform, label=cumsum(점수)-0.5*점수)
> lab
이름 과목 점수 합계 label
1 박민정 국어 92 92 46.0
2 박민정 수학 76 168 130.0
3 박민정 영어 95 263 215.5
4 양덕유 국어 70 70 35.0
5 양덕유 수학 80 150 110.0
6 양덕유 영어 65 215 182.5
7 윤정웅 국어 50 50 25.0
8 윤정웅 수학 54 104 77.0
9 윤정웅 영어 52 156 130.0
10 이천균 국어 97 97 48.5
11 이천균 수학 83 180 138.5
12 이천균 영어 87 267 223.5
13 이효우 국어 90 90 45.0
14 이효우 수학 55 145 117.5
15 이효우 영어 85 230 187.5
16 장동희 국어 76 76 38.0
17 장동희 수학 88 164 120.0
18 장동희 영어 89 253 208.5
19 주인혜 국어 60 60 30.0
20 주인혜 수학 80 140 100.0
21 주인혜 영어 70 210 175.0
22 최보희 국어 20 20 10.0
23 최보희 수학 40 60 40.0
24 최보희 영어 30 90 75.0
25 홍진관 국어 80 80 40.0
26 홍진관 수학 97 177 128.5
27 홍진관 영어 86 263 220.0
> # 그래프출력
> ggplot(lab, aes(x=이름, y=점수, fill=과목)) +
+ geom_bar(stat="identity") +
+ geom_text(aes(y=label, label=paste(점수,"점")), color="black", size=4)
>
> savePlot("gb2.png", type="png")
>
> # 범례부분값을 역순으로 변경
> gb2 <- ggplot(lab, aes(x=이름, y=점수, fill=과목)) +
+ geom_bar(stat="identity", color="black") +
+ geom_text(aes(y=label, label=paste(점수,"점")),
+ color="black", size=4) +
+ guides(fill=guide_legend(reverse=TRUE))
>
> gb2 + theme(axis.text.x=element_text(angle=45, hjust=1, vjust=1, color="black", size=10))
>
* geom_segment( ) : 클리블랜드 점 그래프 형태로 데이터 표현
> data <- read.table("학생별전체성적.txt", header=T, sep=",")
> data
이름 국어 영어 수학 국사 화학 물리
1 이효우 90 85 55 88 91 79
2 양덕유 70 65 80 75 76 89
3 박민정 92 95 76 65 89 91
4 장동희 76 89 88 98 100 91
5 이천균 97 87 83 91 86 91
6 홍진관 80 86 97 85 69 77
7 최보희 20 30 40 50 70 90
8 윤정웅 50 52 54 56 58 60
9 주시현 90 95 100 85 89 92
>
> # 각 항생별로 국어 과목의 시험점수를 그래프로 표시
> data[,c("이름","국어")]
이름 국어
1 이효우 90
2 양덕유 70
3 박민정 92
4 장동희 76
5 이천균 97
6 홍진관 80
7 최보희 20
8 윤정웅 50
9 주시현 90
> ggplot(data, aes(x=국어, y=reorder(이름,국어))) +
+ geom_point(size=5) +
+ theme_bw() +
+ theme(panel.grid.major.x=element_blank(),
+ panel.grid.minor.x=element_blank(),
+ panel.grid.major.y=element_line(color="red", linetype="dashed"))
>
> # 해당 점수까지만 선이 보이도록
> ggplot(data,aes(x=국어, y=reorder(이름,국어))) +
+ geom_segment(aes(yend=이름), xend=0, color="red") +
+ geom_point(size=5) +
+ theme_bw() +
+ theme(panel.grid.major.y=element_blank())
* geom_line( ) : 선을 그리는 함수
> setwd("d:\\r_temp")
> data <- read.csv("학생별과목별성적_3명.csv", header=T)
> data
이름 과목 점수
1 이효우 국어 90
2 양덕유 국어 70
3 박민정 국어 92
4 이효우 영어 85
5 양덕유 영어 65
6 박민정 영어 95
7 이효우 수학 55
8 양덕유 수학 80
9 박민정 수학 76
10 이효우 국사 88
11 양덕유 국사 75
12 박민정 국사 65
13 이효우 화학 91
14 양덕유 화학 76
15 박민정 화학 89
16 이효우 물리 79
17 양덕유 물리 89
18 박민정 물리 91
>
> # 이름과 과목순서대로 정렬
> data <- arrange(data, 이름,과목)
> data
이름 과목 점수
1 박민정 국사 65
2 박민정 국어 92
3 박민정 물리 91
4 박민정 수학 76
5 박민정 영어 95
6 박민정 화학 89
7 양덕유 국사 75
8 양덕유 국어 70
9 양덕유 물리 89
10 양덕유 수학 80
11 양덕유 영어 65
12 양덕유 화학 76
13 이효우 국사 88
14 이효우 국어 90
15 이효우 물리 79
16 이효우 수학 55
17 이효우 영어 85
18 이효우 화학 91
>
> # 이름을 기준으로 묶어서 line그래프로 출력
> ggplot(data,aes(x=과목,y=점수,color=이름,group=이름)) + geom_line()
> savePlot("g11.png", type="png")
>
> # 그래프에 점을 추가해서 출력
> ggplot(data, aes(x=과목, y=점수, color=이름, group=이름)) + geom_line() + geom_point()
> savePlot("g12.png", type="png")
>
> # 선그래프 옵션
> ggplot(data, aes(x=과목, y=점수, color=이름, group=이름, fill=이름)) + geom_line() + geom_point(size=5, shape=22)
* geom_area( ) : 선 아래에 색깔을 넣어주는 함수
> setwd("d:\\r_temp")
> dis <- read.csv("1군전염병발병현황_년도별.csv", sep=",", stringsAsFactors=FALSE)
> dis
년도별 콜레라 장티푸스 이질 대장균 A형간염
1 2002년 4 221 767 8 0
2 2003년 1 199 1117 52 0
3 2004년 10 174 487 118 0
4 2005년 16 219 317 43 0
5 2006년 5 200 389 37 0
6 2007년 7 223 131 41 0
7 2008년 5 188 209 58 0
8 2009년 0 168 180 62 0
9 2010년 8 133 228 56 0
10 2011년 3 148 171 71 5521
11 2012년 0 129 90 58 1197
>
> ggplot(dis, aes(x=년도별, y=장티푸스, group=1)) + geom_line()
>
> # geom_area함수를 사용하여 서 그래프 아래부분에 색을 넣어 출력
> ggplot(dis, aes(x=년도별, y=장티푸스, group=1)) + geom_area()
>
> # geom_area함수안에 설정값을 적어 색상변경
> ggplot(dis, aes(x=년도별, y=장티푸스, group=1)) + geom_area(color="red", fill="cyan", alpha=0.4)
>
> # 좌우부분 테두리 생략
> ggplot(dis, aes(x=년도별, y=장티푸스, group=1)) + geom_area(fill="cyan", alpha=0.4) + geom_line()
* geom_histogram( ) : 히스토그램
* geom_density( ) : 밀도 표현
* geom_boxplot( ) : 박스모양
* geom_violin( ) : 바이올린 그래프
* geom_dotplot( ) : 점 그래프 표현
* geom_density2d( ) : 등고선 등과 같은 2차원 데이터의 밀도표현
2. 저수준 작도 함수
- 기존에 그려진 그래프에 추가적인 선이나 설명을 넣는것
- 주요항목
도형 |
함수 |
점 |
points( ) |
직선 |
lines( ), segments( ), abline( ) |
격자 |
grid( ) |
화살표 |
arrows( ) |
직사각형 |
rect( ) |
문자 |
text( ), mtext( ), title( ) |
테두리와 축 |
box( ), axis( ) |
범례 |
legend( ) |
다각형 | polygon( ) |
> plot(1:10)
> abline(h=5)
> rect(1,6,4,9)
> arrows(1,1,4,4)
> text(8,9,"TEXT")
> title("Here is Main", "Here is Sub")
> legend(8,3, lty=1:3, c("P", "Q", "R"))
>
> # 주요예
> segments(2,2,3,3) # 점(2,2)와 (3,3)을 지나는 선분그리기
> arrows(5,5,7,7) # 점 (5,5)와 (7,7)을 지나는 화살표그리기
> text(a,b,labels) # (a,b) 위치에 문자열 labels 부분 출력
> text(2,8, "테스트", srt=45) # (2,8)지점에 "테스트"라는 글자를 45도로 기울여 출력하기
>
> # axis 사용 예
> plot(rnorm(100), rnorm(100), xlim=c(-5,5), ylim=c(-5,5), axes=F, ann=F)
> axis(1, pos=0, at=-5:5, adj=0, col=2)
> axis(2, pos=0, at=-5:5, adj=0, col=3, las=2)
> box()
>
댓글