R에서 boxplot()를 만드는 방법 BoxRStudio에서의 그래프
⚡ 스마트 요약
BoxR에서 `geom_boxplot()` 함수(ggplot2 패키지)를 사용하여 숫자 분포를 중앙값, 사분위수, 수염, 이상치로 요약하는 박스 플롯을 작성합니다. 이 가이드에서는 대기질 데이터셋에 박스 플롯을 생성하고 색상, 점, 흔들림, 노치, 그룹 비교 등을 추가하는 방법을 보여줍니다.

R의 boxplot()
R의 boxplot() 사분위수별 데이터 분포를 시각화하고 이상치의 존재를 감지하는 데 도움이 됩니다. ggplot2 라이브러리의 기하학적 객체 geom_boxplot()을 사용하여 R에서 boxplot()을 그릴 수 있습니다.
본 논문에서는 R의 ggplot 라이브러리를 사용하여 박스플롯(boxplot()) 함수를 소개하기 위해 대기질 데이터셋을 활용할 것입니다. 이 데이터셋은 1973년 5월부터 9월까지 뉴욕의 일일 대기질 측정값을 기록하고 있으며, 총 153개의 관측치를 포함합니다. 다음 변수들을 사용할 것입니다.
- 오존: 수치변수
- 바람: 수치변수
- 월: XNUMX월부터 XNUMX월까지. 수치변수
상자를 그리기 전에 상자의 각 부분이 무엇을 나타내는지 정확히 아는 것이 좋습니다.
읽는 방법 Box 그래프: 사분위수, 사분위범위 및 이상치
상자 그림의 각 요소는 5개 요약 통계량의 각 수치를 나타냅니다. 어떤 요소가 무엇을 의미하는지 알면 상자 그림은 단순한 장식이 아닌 분석 도구로 활용될 수 있습니다.
- 하단 힌지: 제1사분위수(Q1) 아래에 관측치의 25%가 위치합니다.
- 중앙선: 제2사분위수입니다. 상자 안에서의 위치를 통해 왜곡도를 알 수 있습니다. 선이 아래쪽으로 치우쳐 있으면 데이터가 오른쪽으로 치우쳐 있다는 뜻입니다.
- 상단 경첩: 제3사분위수(Q3)입니다. 관측치의 75%가 이 값 아래에 있습니다.
- Box 신장: 사분위 범위(IQR = Q3 – Q1)는 데이터의 중간 절반을 포함하며, 데이터의 분포를 측정하는 표준적이고 견고한 척도입니다.
- 구레나룻: 이 값들은 가장 극단적인 관측값까지 확장되지만, 여전히 가장 가까운 경첩의 사분위 범위(IQR)의 1.5배 이내에 있습니다. 이 값들은 최소값과 최대값이 아닙니다.
- 수염 너머의 지점: 1.5 IQR 규칙에 따라 이상치로 표시된 관측값입니다.
두 가지 주의 사항이 있습니다. 첫째, 여기서 "이상치"는 통계적 표시이지 오류가 아닙니다. 오존 농도와 같이 왜곡된 분포에서는 높은 값이 예상되는 현상이므로 삭제해서는 안 됩니다. 둘째, 상자 그림은 분포의 형태를 숨기기 때문에 상자가 동일한 두 그룹이 실제 데이터는 매우 다를 수 있습니다. 아래 그림과 같이 점을 무작위로 이동시키면 이러한 문제를 방지할 수 있습니다.
Box R에서 플롯, 히스토그램, 바이올린 플롯 비교
세 차트 모두 수치 분포를 나타내지만, 각각은 다른 차트가 숨기고 있는 무언가를 드러냅니다.
| 기준 | Box 음모 | 히스토그램 | 바이올린 플롯 |
|---|---|---|---|
| 쇼 | 중앙값, 사분위수, 이상치 | 각 구간별 빈도 | 전체 밀도 곡선 |
| Rev여러 개의 봉우리 | 아니 | 가능 | 가능 |
| 이상치를 표시합니다 | 네, 명확하게 | 시각적으로만 | 직접적이지 않음 |
| 여러 그룹을 비교하기 | 우수한 | 어색한 | 좋은 |
| 튜닝 옵션이 필요합니다 | 아니 | 네, 빈 개수 | 네, 대역폭입니다. |
| ggplot2 객체 | geom_boxplot() | geom_histogram() | geom_violin() |
일반적인 절충안은 밀도 분포와 사분위수 요약을 하나의 차트에 담을 수 있도록 바이올린 플롯 안에 좁은 상자 그림을 그리는 것입니다. 자세한 내용은 다음을 참조하십시오. 히스토그램 튜토리얼 비교의 구간화 측면에서.
만들기 Box 음모
R에서 첫 번째 boxplot()을 만들기 전에 다음과 같이 데이터를 조작해야 합니다.
- 1단계: 데이터 가져오기
- 2단계: 불필요한 변수 삭제
- 3단계: 월을 순서형 팩터로 변환합니다.
- 4단계: 각 월을 시작, 중간, 끝의 세 부분으로 나누는 새로운 범주형 변수를 생성합니다.
- 5단계: 누락된 관측값 제거
이러한 모든 단계는 dplyr과 파이프라인 연산자 %>%를 사용하여 수행됩니다.
library(dplyr) library(ggplot2) # Step 1 data_air <- airquality %>% #Step 2 select(-c(Solar.R, Temp)) %>% #Step 3 mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), #Step 4 day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
좋은 방법은 looking() 함수를 사용하여 데이터의 구조를 확인하는 것입니다.
glimpse(data_air)
출력:
## Observations: 153 ## Variables: 5 ## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ... ## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6... ## $ Month <ord> May, May, May, May, May, May, May, May, May, May, May,... ## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,... ## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
Ozone과 Solar.R 모두에 NA 값이 포함되어 있습니다. geom_boxplot() 함수는 이러한 값을 자동으로 삭제하고 경고 메시지를 출력하므로, 명시적으로 제거하는 것이 더 깔끔합니다.
# Step 5
data_air_nona <-data_air %>% na.omit()
기본 상자 그림
이제 월별 오존 분포를 그래프로 나타내시오.
# Store the graph box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone)) # Add the geometric object box plot box_plot + geom_boxplot()
Code 설명
- 나중에 사용할 수 있도록 그래프를 저장하세요.
- 박스플롯: 기본 플롯은 박스플롯 객체에 저장되므로 전체 호출을 반복하지 않고도 나중에 레이어를 추가할 수 있습니다.
- 기하학적 객체를 추가합니다.
- ggplot boxplot에 data_air_nona 데이터 세트를 전달합니다.
- aes() 인수 내에 x축과 y축을 추가합니다.
- + 기호는 R이 코드를 계속 읽기를 원한다는 것을 의미합니다. 코드를 쪼개서 더 읽기 쉽게 만듭니다.
- geom_boxplot()를 사용하여 상자 그림을 만듭니다.
출력:
그래프의 측면 변경
그래프의 측면을 뒤집을 수 있습니다.
box_plot +
geom_boxplot()+
coord_flip()
Code 설명
- box_plot: 저장한 그래프를 사용합니다. 그래프에 새 정보를 추가할 때마다 모든 코드를 다시 쓸 필요가 없습니다.
- geom_boxplot(): 상자와 수염을 그립니다.
- coord_flip(): 그래프의 측면을 뒤집습니다.
출력:
이상치 색상 변경
이상치의 색상, 모양 및 크기를 변경할 수 있습니다.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code 설명
- outlier.colour=”red”: 이상치의 색상을 제어합니다.
- outlier.shape=2: 이상치의 모양을 변경합니다. 2는 삼각형을 가리킨다.
- outlier.size=3: 삼각형의 크기를 변경합니다. 숫자가 클수록 마커가 더 크게 그려집니다.
출력:
요약 통계 추가
상자 그림 자체에는 표시되지 않는 그룹 평균과 같은 요약 통계를 겹쳐서 표시할 수 있습니다.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code 설명
- stat_summary() 함수는 계산된 통계량을 상자 그림 위에 추가합니다.
- `fun` 인수는 반환할 통계량을 제어합니다. 여기서는 평균입니다. 이전 코드에서는 `fun.y`를 사용했는데, ggplot2는 버전 3.3.0부터 `fun.y`를 더 이상 사용하지 않도록 권장하고 있습니다.
- 참고: 최소 및 최대와 같은 다른 통계도 사용할 수 있습니다. 동일한 그래프에 두 개 이상의 통계가 표시될 수 있습니다.
- geom = “point”: 점으로 평균을 표시합니다.
- size=3: 포인트의 크기
- color =”steelblue”: 포인트 색상
출력:
Box 점으로 플롯
다음으로, 상자 위에 점 그래프 레이어를 추가합니다. 각 점은 하나의 관측값을 나타내므로 각 상자 뒤에 있는 표본 크기를 확인할 수 있습니다.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code 설명
- geom_dotplot() 함수는 각 관측치마다 하나의 점을 그리고, 각 빈(bin) 내에 점들을 쌓아서 표시합니다.
- binaxis='y': y축을 따라 점의 위치를 변경합니다. 기본적으로 x축
- dotsize=1: 점의 크기
- stackdir='center': 점을 쌓는 방법: 네 가지 값:
- "위로"(기본값),
- "아래에"
- "센터"
- “중앙 전체”
출력:
제어 미학 Box 음모
상자의 색상을 변경합니다
그룹의 색상을 변경할 수 있습니다.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code 설명
- 그룹의 색상은 aes() 맵에서 제어됩니다.pingcolor=Month 속성을 사용하면 월별로 상자 그림의 색상을 변경할 수 있습니다.
출력:
Box 여러 그룹으로 플롯
여러 그룹을 추가하는 것도 가능합니다. 측정일에 따른 공기질의 차이를 시각화할 수 있습니다.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code 설명
- aes() 맵ping 기하학적 객체의 속성은 표시할 그룹을 제어합니다(이 변수는 팩터여야 합니다).
- aes(fill= day_cat)를 사용하면 x축에 각 달에 대한 세 개의 상자를 만들 수 있습니다.
출력:
Box 지터링된 점이 있는 플롯
개별 관측값을 나타내는 또 다른 방법은 점들을 무작위로 이동시키는 것입니다. 점 이동은 범주형 x축으로 인해 많은 점들이 동일한 위치에 나타날 때 일반적으로 사용되는 방법입니다.
이 방법은 중복을 방지합니다.ping 이산 데이터의 경우.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code 설명
- geom_jitter()는 각 점에 작은 무작위 변위를 추가하여 겹침 현상을 방지합니다.ping 값이 드러납니다.
- shape=15는 점의 모양을 변경합니다. 15는 정사각형을 나타냅니다.
- color = “steelblue”: 포인트의 색상을 변경합니다.
- position = position_jitter(width = 0.21): x축 단위로 측정되는 점들의 측면 이동 거리를 제어합니다. 기본값은 범주 간 간격의 40%입니다.
출력:
지터 방식을 적용한 첫 번째 그래프와 포인트 방식을 적용한 두 번째 그래프의 차이점을 확인할 수 있습니다.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
노치 Box 음모
geom_boxplot()의 흥미로운 기능은 R의 노치 박스 플롯 함수입니다. 노치 플롯은 중앙값 주위로 상자를 좁힙니다. 노치 박스 플롯의 주요 목적은 그룹 간 중앙값의 유의성을 비교하는 것입니다. 노치가 겹치지 않을 때 두 그룹의 중앙값이 다르다는 강력한 증거가 있습니다. 노치는 다음과 같이 계산됩니다.
여기서 IQR은 사분위 범위이고 n은 그룹 내 관측치 수입니다. 해당 표시는 중앙값의 95% 신뢰 구간을 대략적으로 나타냅니다.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code 설명
- geom_boxplot(notch = TRUE): 중앙값 주변에 홈이 있는 상자 그림을 그립니다.
출력:
제목, 레이블 및 사용자 지정 색상을 추가하는 방법 Box R에서 그래프 그리기
위 그래프는 ggplot2의 기본 설정을 사용하는데, 이 설정은 데이터 프레임에서 변수 이름을 그대로 가져옵니다. 출판 가능한 차트를 위해서는 읽기 쉬운 레이블과 의도적으로 선택된 색상 팔레트가 필요합니다.
제목 및 축 레이블. labs() 함수 호출 한 번으로 모든 텍스트 요소가 설정됩니다.
box_plot +
geom_boxplot(fill = "coral", alpha = 0.7) +
labs(title = "Ozone concentration by month",
subtitle = "New York, May to September 1973",
x = "Month",
y = "Ozone (parts per billion)",
caption = "Source: airquality dataset") +
theme_classic()
원하는 색상을 직접 선택하세요. fill이 aes() 함수 내부에 매핑될 때는 scale_fill_manual()을 사용하고, colour가 aes() 함수 내부에 매핑될 때는 scale_colour_manual()을 사용하십시오.
ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) + geom_boxplot() + scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) + theme_classic() + theme(legend.position = "none")
여기서는 범례를 표시하지 않았습니다. x축에 이미 각 월의 이름이 표시되어 있으므로, 이를 반복하면 공간 낭비가 되기 때문입니다.
상자들을 다시 정렬합니다. 요인 수준이 축의 순서를 결정합니다. '월'은 순서가 있는 요인으로 생성되었기 때문에 이미 시간 순서대로 표시됩니다. 순서가 없는 요인의 경우 중앙값을 기준으로 정렬하세요.
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
차트를 저장하는 중입니다. ggsave() 함수는 사용자가 지정한 해상도로 마지막 그래프를 디스크에 저장합니다.
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box R에서 그래프 그리기: Code 참조
아래 표는 위에서 설명한 각 상자 그림 변형에 대한 ggplot2 호출을 나열합니다.
| 목표 | Code |
|---|---|
| 기본 상자 그림 |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| 화면 방향을 바꾸세요 |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| 노치 박스 플롯 |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box 지터된 점이 있는 플롯 |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| 그룹별 색상 |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| 카테고리별 여러 그룹 |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| 그룹 평균을 더합니다. |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
또한 확인:- 초보자를 위한 R 튜토리얼: R 프로그래밍 언어 배우기











