R) 그래프


R 에서 제공하는 Iris(붓꽃) 데이터를 활용하여 실습 및 정리 진행



PIE 그래프




- 해당 데이터가 전체에서 어느 정도 차지하는지 시각적으로 확인하기 위한 그래프
- 원형 도형을 사용, 원호의 크기에 따라 차지하는 정도를 확인 가능

iris_oriData <- iris # iris 데이터 호출(기본 제공)
str(iris) #구조 확인
- 데이터의 구조, 총 4개의 열, 150개의 데이터를 포함

- 데이터를 분리 및 가공(품종 별 개수)
#품종별로 데이터를 분리
#subset(분리할 데이터셋, 조건) : 해당 조건에 따라 데이터를 분리
iris_setosa = subset(iris_oriData, iris_oriData$Species=="setosa")
iris_versicolor = subset(iris_oriData, iris_oriData$Species=="versicolor")
iris_virginica = subset(iris_oriData, iris_oriData$Species=="virginica")

#nrow(데이터셋) : 데이터의 행 개수 반환
#각 50개 씩 데이터 확인
iris_speciesCount = c(nrow(iris_oriData), nrow(iris_versicolor), nrow(iris_virginica))

3개의 품종의 각각 50개 씩 데이터 확인, 백분율 벡터 생성
pie(데이터, labels=지정 라벨 벡터, col = 각 라벨 별 지정 색 벡터(미기재 시 default 색 지정), colockwise=TRUE/FALSE)

#col_ : pie 그래프에서 각 항목의 지정 색을 위한 벡터
col_ = c("red","yellow","green")

#paste(text1, text2, text3, ...) : 각 텍스트를 연결
#label 표기를 위한 벡터
per_label = paste(iris_speciesLabels," : ",round(iris_speciesCount/sum(iris_speciesCount),1)*100,"%")

#lty : pie 그래프의 선(0 : 선 없음, 1 : 실선default, 2 : 점선)
#labels : 표기 라벨
#col : 그래프 항목별 색
#clockwise : 그래프 작성 시 시작점이 시계의 12시 방향 지정 여부
pie(iris_speciesCount, labels = per_label, col = col_, lty = 0, clockwise = TRUE)

#legend : 범례 생성
#첫번째 인자 : 지정 위치
#두번째 인자 : text 값
#fill : 지정 색
legend("bottomright", iris_speciesLabels, fill=col_)

pie 적용 가능 옵션

옵션 설명 기본값 지정 가능한 값
x 데이터 (수치형 벡터) 필수 입력 양수 값의 벡터 (c(10, 20, 30))
labels 각 조각의 레이블(이름) 지정 NULL 문자 벡터 (c("A", "B", "C"))
col 조각의 색상 설정 NULL (기본 색상) 색상명 또는 HEX 코드 ("red", "#FF5733")
border 조각 경계선 색상 지정 "black" 색상명 또는 "NA" (경계선 없음)
radius 원 크기 조절 1 0 ~ 1 (기본: 1, 작으면 크기 축소)
clockwise 시계 방향 그리기 여부 FALSE TRUE (시계방향) / FALSE (반시계방향)
init.angle 시작 각도 (0도 기준 회전) 0 0 ~ 360 (기본: 0)
density 조각 패턴 (점선, 줄무늬 등) 밀도 조절 NULL NULL (채우기 없음) 또는 0 ~ 100
angle 패턴 방향 (각도) 조절 45 0 ~ 360 (패턴이 있을 때만 적용)
lty 조각 테두리 선 스타일 1 (실선) 0 (없음), 1 (실선), 2 (점선), 3 (파선) 등
edges 조각의 부드러움 조절 200 10 ~ 1000 (값이 작을수록 각지게 표현)
cex 레이블 글자 크기 조절 1 0.1 ~ 5 (기본 1, 1보다 크면 확대)
font 레이블 글꼴 스타일 1 (일반) 1 (일반), 2 (굵게), 3 (이탤릭), 4 (굵은 이탤릭)


hist히스토그램


- 데이터의 빈도 분포를 그래프로 시각화한 그래프
- 막대형 데이터로 각 데이터 값에 대해 지정

데이터 품종 중 setosa, Sepal.Length의 데이터만 추출 후 히스토그램 작성

hist(데이터 셋, main="주 제목", xlab="x축 이름", col="그래프 색", breaks=데이터의 구간 개수) 
iris_oriData <- iris
str(iris)

#품종 중 setosa의 Sepal.Length에 대한 데이터만 추출
iris_setosa = subset(iris_oriData$Sepal.Length, iris_oriData$Species=="setosa")

#히스토그램 생성
#main : 주 제목
#xlab : x축 이름 지정
#col : 막대의 색 지정
#breaks : 구간을 해당 값으로 나눔(10개로 나눔)
hist(iris_setosa, main="setosa sepal length", xlab = "sepal length", col="red", breaks = 10 )


hist 적용 가능 옵션

옵션 설명 기본값 지정 가능한 값
x 히스토그램을 그릴 데이터 벡터 필수 입력 수치형 벡터 (iris$Sepal.Length)
breaks 막대(bin)의 개수 또는 구간 지정 자동 계산 정수값 또는 벡터 (10, seq(4, 8, 0.5))
col 막대 색상 지정 NULL (기본 색상) 색상명 또는 HEX 코드 ("red", "#FF5733")
border 막대 테두리 색상 지정 NULL 색상명 또는 "black"
main 히스토그램 제목 NULL 문자열 ("Histogram Title")
xlab x축 레이블 NULL 문자열 ("X-axis Label")
ylab y축 레이블 NULL 문자열 ("Y-axis Label")
probability y축을 빈도 대신 확률로 변환 FALSE TRUE 또는 FALSE
axes 축 표시 여부 TRUE TRUE 또는 FALSE
ylim y축 범위 지정 자동 설정 벡터 (c(0, 50))
xlim x축 범위 지정 자동 설정 벡터 (c(4, 8))
right 구간을 오른쪽 포함 여부 결정 TRUE TRUE 또는 FALSE
density 막대 내부 패턴 밀도 NULL 정수값 (10 ~ 100)
angle 패턴 방향 지정 45 정수값 (0 ~ 360)


막대 그래프 barplot

- 각 항목 별 수치 값을 막대로 표기한 형태
- 히스토스램과 유사하나, 각 항목 당 수치 값이 존재, 다양한 형태로 작성이 가능하다
※ barplot 에 대해서는 별도로 정리 예정

                   



- Sepal.Length 값이 5.0을 초과하는 값들에 대해 품종별로 정리
- subplot 에서의 조건의 경우 논리연산 적용( and : & , or : | , not : !)

barplot(데이터 셋,  main = "주 제목", xlab="x축 제목", ylab="y축 제목", ylim=y값 범위(벡터), names=y축 각 이름(벡터), col="그래프의 막대 색")
iris_oriData <- iris
str(iris)

#품종별, Sepal.Length 값이 5.0을 초과하는 값들만 필터링
iris_setosa = subset(iris_oriData, iris_oriData$Species=="setosa" & iris_oriData$Sepal.Length>5.0)
iris_versicolor = subset(iris_oriData, iris_oriData$Species=="versicolor" & iris_oriData$Sepal.Length>5.0)
iris_virginica = subset(iris_oriData, iris_oriData$Species=="virginica" & iris_oriData$Sepal.Length>5.0)

#행 개수를 통한 sepal.length 가 5.0 을 초과하는 개수를 기록
iris_speciesCount = c(nrow(iris_setosa), nrow(iris_versicolor), nrow(iris_virginica))
iris_speciesLabels = c("setosa", "versicolor", "virginica")

#ylim : y축 범위(최소, 최대 범위 지정)
#names : x축의 각 막대 명
text_xyset = barplot(iris_speciesCount,
        main="iris species sepal length(5.0>)",
        xlab="species",
        ylab="count",
        ylim=c(0, max(iris_speciesCount)+10),
        col="lightblue",
        names = iris_speciesLabels
        )

#텍스트 작성을 이용하여 각 막대의 수치 표기
text(text_set, iris_speciesCount+2 , labels = iris_speciesCount )

히스토그램에 비해 다양한 유형의 그래프가 존재함
→ 중첩, 가로형 , 그룹화 등


옵션 설명 기본값 지정 가능한 값
height 막대의 높이를 나타내는 값 필수 입력 수치형 벡터 또는 행렬
beside 막대를 개별적으로 표시할지 여부 (그룹형/누적형 선택) FALSE (누적형) TRUE (그룹형) / FALSE (누적형)
col 막대 색상 NULL (기본 색상) 색상명 또는 HEX 코드 ("red", "#FF5733")
border 막대 테두리 색상 NULL 색상명 또는 "black"
main 그래프 제목 NULL 문자열 ("Title")
xlab X축 레이블 NULL 문자열 ("X-axis Label")
ylab Y축 레이블 NULL 문자열 ("Y-axis Label")
ylim Y축 범위 지정 자동 설정 벡터 (c(0, 50))
xlim X축 범위 지정 자동 설정 벡터 (c(0, 5))
names.arg 각 막대의 레이블 NULL 문자 벡터 (c("A", "B", "C"))
horiz 가로 막대 그래프 여부 FALSE (세로) TRUE (가로) / FALSE (세로)
las 축 레이블 방향 0 (기본) 0 ~ 3 (0: 기본, 1: 수평, 2: 수직, 3: 반전)
cex.names 축 레이블 크기 조정 1 양수 값 (기본: 1, 1보다 크면 확대)
legend.text 범례 추가 NULL 문자 벡터 (c("Group 1", "Group 2"))
args.legend 범례 위치 및 스타일 지정 NULL 목록 (list(x="topright", bty="n"))
space 막대 간격 조절 NULL (자동) 0 ~ 1 (값이 클수록 간격 증가)


상자그래프boxplot

- 데이터의 대략적인 분포, 이상치 등의 확인과 비교 할 수 있도록 도와주는 시각화 기법
- par()를 이용하여 3개의 boxplot 생성


- par()를 응용하여 다수의 그래프 배치 : par(mfrow/mfcol = c(행, 열))
- boxplot을 통해 이상치 확인 가능

boxplot(데이터 셋, horizontal=TRUE/FALSE, main="주제목")
iris_oriData <- iris
str(iris)

iris_setosa = subset(iris_oriData, iris_oriData$Species=="setosa" & iris_oriData$Sepal.Length>5.0)
iris_versicolor = subset(iris_oriData, iris_oriData$Species=="versicolor" & iris_oriData$Sepal.Length>5.0)
iris_virginica = subset(iris_oriData, iris_oriData$Species=="virginica" & iris_oriData$Sepal.Length>5.0)

#3행, 1열의 형태로 그래프 배치
par(mfrow=c(3,1))

#그래프가 생성되는 순으로 배치됨
#horizontal : 가로/세로 지정
boxplot(iris_setosa$Sepal.Length, horizontal = TRUE, main="setosa sepal length(>5.0)")
boxplot(iris_versicolor$Sepal.Length, horizontal = TRUE, main="versicolor sepal length(>5.0)")
boxplot(iris_virginica$Sepal.Length, horizontal = TRUE, main="virginica sepal length(>5.0)")

boxplot 에서 왼쪽에서 사각형의 시작점을 1분위수(25%), 굵은 선으로 표기된 지점을 2분위 수(50%, 중앙값), 사각형의 오른쪽 끝은 3분위수(75%) 라 칭함

이외의 사각형을 벗어난 표기된 값은 이상치라 함

여러변수의 비교

- 데이터 셋 : 전체 데이터 이용(행 생략 시 전체 데이터 참조)
- names : 각 박스플롯의 이름(x축)
boxplot(iris[, 1:4], 
        main = "Boxplot of Iris Dataset Variables", 
        col = c("red", "blue", "green", "yellow"),
        names = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"))


품종(Species)별 Sepal.Length 박스플롯 비교

- 데이터 셋의 경우 데이터 수치 값 ~ 분류 대상 으로 표기하여 한번에 진행
boxplot(Sepal.Length ~ Species, data = iris, 
        main = "Boxplot of Sepal Length by Species",
        xlab = "Species", ylab = "Sepal Length",
        col = c("red", "blue", "green"))

boxplot 적용 가능 옵션

옵션 설명 기본값 지정 가능한 값
x 박스플롯을 그릴 데이터 필수 입력 수치형 벡터, 행렬, 데이터프레임
formula 그룹별 박스플롯을 생성하는 공식 NULL 예: y ~ x 형식 (집단별 비교)
data 공식 사용 시 데이터프레임 지정 NULL 예: data = iris
col 박스의 색상 NULL (기본 색상) 색상명 또는 HEX 코드 ("red", "#FF5733")
border 박스 테두리 색상 "black" 색상명 또는 "NA" (테두리 없음)
main 그래프 제목 NULL 문자열 ("Title")
xlab X축 레이블 NULL 문자열 ("X-axis Label")
ylab Y축 레이블 NULL 문자열 ("Y-axis Label")
horizontal 가로 박스플롯 여부 FALSE (세로) TRUE (가로) / FALSE (세로)
outline 이상치(outliers) 표시 여부 TRUE TRUE (표시) / FALSE (제거)
notch 중앙값 신뢰구간 표시 FALSE TRUE (표시) / FALSE (제거)
range 수염(whiskers) 길이 조정 1.5 양수 값 (클수록 길어짐)
width 박스 너비 조정 NULL 벡터 또는 스칼라 값 (기본 자동 조정)
log 축을 로그 스케일로 변환 "" (일반 축) "x", "y", "xy"

댓글