R 에서 제공하는 Iris(붓꽃) 데이터를 활용하여 실습 및 정리 진행
PIE 그래프
- 해당 데이터가 전체에서 어느 정도 차지하는지 시각적으로 확인하기 위한 그래프
- 원형 도형을 사용, 원호의 크기에 따라 차지하는 정도를 확인 가능
iris_oriData <- iris # iris 데이터 호출(기본 제공) str(iris) #구조 확인
- 데이터를 분리 및 가공(품종 별 개수)
#품종별로 데이터를 분리 #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()를 응용하여 다수의 그래프 배치 : 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)")
- 데이터 셋 : 전체 데이터 이용(행 생략 시 전체 데이터 참조)
- 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" |







댓글
댓글 쓰기