- 공유 링크 만들기
- 이메일
- 기타 앱
데이터 시각화
내용
Bar plot
막대그래프는 목록변수의 분포(빈도수)를 나타냅니다. 막대의 위치는 수직 또는 수평으로 작성할 수 있습니다. 가장 간단한 형태는 다음 함수를 사용하는 것입니다.
- barplot(객체, main, xlab, ylab, horiz, names.arg)
- 객체는 벡터 또는 행렬 형입니다.
- main: 제목
- xlab, ylab: x, y 축 라벨
- horiz = True 이면 수평바가 생성
- names.arg: 각 바의 라벨을 작성
library(vcd)
ar<-Arthritis names(ar)
[1] "ID" "Treatment" "Sex" "Age" "Improved"
head(ar)
ID Treatment Sex Age Improved 1 57 Treated Male 27 Some 2 46 Treated Male 29 None 3 77 Treated Male 30 None 4 17 Treated Male 32 Marked 5 36 Treated Male 46 Marked 6 23 Treated Male 58 Marked
table()
는 교차 분류 요인(cross-classifying factors)을 사용하여 요인 수준의 각 조합에서 카운트의 분할표(contingency table, 교차표)를 작성합니다.
count<-table(ar$Improved);count
None Some Marked 42 14 28
par(mfrow=c(1, 2)) barplot(count, main="막대그래프", xlab="imporvement", ylab="Frequency") barplot(count, main="수평 막대그래프", xlab="Frequency", ylab="Improvement", horiz=TRUE)
그래프를 작성 대상인 목록변수가 factor 또는 ordered factor 라면 plot() 함수에 의해 수직 막대그래프를 작성할 수 있습니다.
class(ar$Improved)
[1] "ordered" "factor"
par(mfrow=c(1,2)) plot(ar$Improved, main="막대그래프", xlab="imporvement", ylab="Frequency") plot(ar$Improved, main="수평 막대그래프", xlab="Frequency", ylab="Improvement", horiz=TRUE)
Stacked and grouped bar plot
barplot()의 객체가 벡터가 아니라 행렬인 경우 결과 그래프는 누적 또는 그룹화된 막대 플롯이 됩니다. beside=FALSE(기본값)인 경우 행렬의 각 열은 플롯에 막대를 생성하고 열의 값은 누적되어 막대의 높이로 나타납니다. beside=TRUE인 경우 행렬의 각 열은 그룹을 나타내며 각 열의 값은 누적되지 않고 병치됩니다. 치료 유형 및 개선 상태의 교차표를 고려하십시오.
cnt<-table(ar$Improved, ar$Treatment) cnt
Placebo Treated None 29 13 Some 7 7 Marked 7 21
windows(height=7, width=7) #그림의 새창이 생성됩니다. par(mfrow=c(1,2)) barplot(cnt, main="Stacked bp", xlab="Imporvement", ylab="Frequency", col=c("red","yellow","green")) barplot(cnt, main="Stacked bp",xlab="Imporvement", ylab="Frequency", col=c("red","yellow","green"), legend=rownames(cnt), beside=TRUE)
barplot은 단순히 빈도수에 국한되지는 않습니다. 예를 들어 aggregation()함수에 의해 생성된 그룹별 mean, sd등을 작성할 수 있습니다.
states<-data.frame(state.region, state.x77) means<-aggregate(states$Illiteracy, by=list(state.region), FUN=mean); means
Group.1 x 1 Northeast 1.000000 2 South 1.737500 3 North Central 0.700000 4 West 1.023077위 결과를 변수 x에 대해 정렬합니다.
order(x): 객체 x를 정렬하여 대응되는 인덱스를 결과로 반환
means<-means[order(means$x),]; means
Group.1 x 3 North Central 0.700000 1 Northeast 1.000000 4 West 1.023077 2 South 1.737500
par(mfrow=c(1,1)) barplot(means$x, names.arg=means$Group.1) title("Mean Illiteracy Rate")
막대 플롯 조정
막대 플롯의 모양을 조정하는 방법에는 여러 가지가 있습니다. 예를 들어, 막대가 많은 경우 막대 레이블이 겹치기 시작할 수 있습니다. cex.names 옵션을 1보다 작은 값을 지정하여 레이블 크기가 감소시킬 수 있습니다. 선택적으로 names.arg 인수를 사용하면 막대에 레이블을 지정하는 데 사용되는 이름의 문자형 벡터를 지정할 수 있습니다. 그래픽 매개변수를 사용하여 텍스트 간격을 지정할 수도 있습니다.
이러한 플롯의 조정은 par()
의 다양한 인자를 사용하여 일으킬 수 있습니다. 다음에 사용된 인자는 mar와 las입니다.
- mar: 플롯의 네 면에 지정할 여백 행 수를 제공하는 c(하단, 왼쪽, 상단, 오른쪽) 형식의 숫자 벡터입니다. 기본값은 c(5, 4, 4, 2) + 0.1입니다.
- las: axis label의 스타일
- 0: 기본값으로 축과 평형
- 1:항상 평형
- 2: 축과 수직
- 3:항상 수직
par(mar=c(5, 8, 4, 2)) par(las=2) cnt<-table(ar$Improved) barplot(cnt, main="Treatment outcome", horiz=TRUE, ces.name=0.8, names.arg=c("No Improvement","Some Improvement", "Marked Imporvement"))
스피노그램(Spinograms)
스피노그램에서 누적 막대 그림은 각 막대의 전체높이가 1이고 각 세그먼트(부분) 높이가 비율을 나타내도록 다시 조정됩니다. 스피노그램은 vcd 패키지의 spine()
함수를 통해 생성됩니다. 다음 코드는 간단한 스피노그램을 생성합니다.
attach(ar) cnt<-table(Treatment, Improved) spine(cnt, main="Spinogram") detach(ar)
Pie chart
파이 차트는 다음 함수로 생성됩니다.
- pie(x, labels)
- x: 음수가 아닌 수치형벡터로서 각 원소는 원의 부분면적을 나타냅니다.
- labels: 각 부분의 명칭
다음은 객체 states의 Income을 state.region으로 그룹화하여 각 그룹의 합을 pie chart로 나타낸 것입니다. 또한 3D차트로 나타내기 위해 plotrix 패키지를 사용합니다.
attach(states) inSum<-aggregate(Income, by=list(state.region), FUN=sum); inSum par(mar=c(5,4,4,2)+0.1) par(mfrow=c(1,2)) lbl<-levels(state.region); lbl pie(inSum$x, labels=lbl, main="Income") pct<-c(inSum$x/sum(inSum$x)) lbl2<-paste(lbl, round(pct, 1), '%', sep=" ") pie(inSum$x, labels=lbl2, col=rainbow(length(lbl2)),main="Income(%)")
par(mfrow=c(1,2)) library(plotrix) pie3D(inSum$x, labels=lbl, explode=0.1, main='3D pie chart') #각 지역에 포함된 도시의 수 city<-table(state.region) lbl3<-paste(lbl, '\n', city, sep="") pie(inSum$x, labels=lbl3, main="city # in region") detach(states)
댓글
댓글 쓰기