R을 이용한 막대 그래프 및 히스토그램 예제
⚡ 스마트 요약
R에서 막대 그래프와 히스토그램은 ggplot2를 사용하여 생성하며, 범주형 데이터에는 geom_bar() 함수를, 연속형 데이터에는 geom_histogram() 함수를 사용합니다. 이 가이드에서는 색상, 그룹화 등을 사용자 지정하는 방법을 설명합니다.pingmtcars 데이터셋에서 스태킹, 방향, 비닝 및 막대 내 레이블을 조정합니다.

R에서 막대 그래프란 무엇인가요?
막대 차트는 X축에 범주형 변수를 표시하는 좋은 방법입니다. 이 유형의 그래프는 y축의 두 가지 측면을 나타냅니다.
- 첫 번째는 각 그룹에 속하는 항목의 발생 횟수를 세는 것입니다.
- 두 번째 그래프는 y축에 변수의 요약 통계(최소값, 최대값, 평균값 등)를 보여줍니다.
여러분은 다음과 같은 변수를 포함하는 mtcars 데이터셋을 사용하게 됩니다.
- cyl: 자동차의 실린더 번호입니다. 숫자변수
- am: 변속기 유형. 자동은 0, 수동은 1입니다. 숫자 변수
- mpg: 갤런당 마일. 숫자변수
히스토그램은 모양이 매우 비슷하기 때문에 코드를 작성하기 전에 차이점을 명확히 하는 것이 좋습니다.
R에서 막대 그래프와 히스토그램의 주요 차이점
두 도표는 비슷하게 생겨서 끊임없이 혼동됩니다. 서로 다른 질문에 답하고 다른 기하학적 도형을 사용합니다.
| 기준 | 막대 차트 | 히스토그램 |
|---|---|---|
| X축 변수 | 범주형 또는 요인형 | 연속형 및 수치형 |
| 바가 상징하는 것 | 하나의 카테고리 | 하나의 값 구간 또는 빈 |
| 막대 사이의 간격 | 네, 카테고리는 별개입니다. | 아니요, 쓰레기통은 바로 옆에 있어요. |
| 바 주문 | 자유롭게 재배열 가능 | 수치 스케일에 의해 고정됨 |
| 질문에 대한 답변 | 그룹 간 비교는 어떻게 되나요? | 하나의 변수는 어떻게 분포되어 있습니까? |
| ggplot2 객체 | geom_bar() | geom_histogram() |
일반적인 규칙은 다음과 같습니다. 막대의 순서를 바꿔도 의미가 통하면 막대 그래프를 사용하고, 순서를 바꿔도 의미가 없어지면 히스토그램을 사용합니다. 동일한 연속 변수에 대한 사분위수 기반 요약을 위해서는 히스토그램을 사용하십시오. 상자 그림.
R에서 막대 그래프를 만드는 방법
그래프를 생성하려면 R, 게시 준비가 완료된 그래프를 생성하는 라이브러리 ggplot을 사용할 수 있습니다. 이 라이브러리의 기본 구문은 다음과 같습니다.
ggplot(data, mapping = aes()) + geometric object arguments: data: dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common objects are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
이 튜토리얼에서는 막대 그래프를 그리는 기하학적 객체인 geom_bar()와 연속형 데이터를 그리는 geom_histogram()에 대해 중점적으로 다룹니다.
막대 차트: 개수
첫 번째 그래프는 geom_bar()를 사용하여 원통의 빈도를 보여줍니다. 아래 코드는 가장 기본적인 구문입니다.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code 설명
- mtcars 데이터 세트를 ggplot에 전달합니다.
- aes() 함수의 인수 내부에서 x축을 요인 변수 cyl로 설정합니다.
- + 기호는 R이 코드를 계속 읽기를 원한다는 것을 의미합니다. 코드를 쪼개서 더 읽기 쉽게 만듭니다.
- 기하학적 객체에는 geom_bar()를 사용합니다.
출력:
주의 사항: 변수를 요인으로 변환해야 합니다. 그렇지 않으면 R에서 변수를 숫자로 처리합니다. 아래 예를 참조하세요.
그래프 사용자 정의
그래프를 사용자 정의하기 위해 XNUMX개의 인수를 전달할 수 있습니다.
- `stat`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar
막대 색상 변경
막대의 색상을 변경할 수 있습니다. 막대의 색상은 모두 유사합니다.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code 설명
- 막대의 색상은 aes() 맵에 의해 제어됩니다.ping 기하학적 객체 내부(즉, ggplot() 함수 내부가 아닌)에 색상을 지정할 수 있습니다. fill 인수를 사용하여 색상을 변경할 수 있으며, 여기서는 산호색을 선택했습니다.
출력:
이 코드를 사용할 수 있습니다.
grDevices::colors()
R에서 사용할 수 있는 모든 색상을 보려면 약 650가지 색상이 있습니다.
강도 변경
막대 색상의 강도를 높이거나 낮출 수 있습니다.
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code 설명
- 막대의 강도를 높이거나 낮추려면 알파 값을 변경하면 됩니다. 알파 값이 클수록 강도가 높아지고, 알파 값이 작을수록 강도가 낮아집니다. 알파 값은 0에서 1까지의 범위를 가지며, 1일 때는 색상이 팔레트와 정확히 일치하고, 0일 때는 막대가 보이지 않습니다. 여기서는 알파 값을 0.5로 설정합니다.
출력:
그룹별 색상
막대의 색상을 변경할 수 있습니다. 즉, 각 그룹마다 서로 다른 색상이 적용됩니다. 예를 들어 cyl 변수에는 세 가지 수준이 있으므로 세 가지 색상으로 막대 차트를 그릴 수 있습니다.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code 설명
- aes() 함수 내부의 fill 인자는 막대의 색상을 변경합니다. fill = x축 변수로 설정하면 색상을 변경할 수 있습니다. 예시에서 x축 변수는 cyl이므로 fill = factor(cyl)이 됩니다.
출력:
막대에 그룹 추가
다른 요인 수준에 따라 y축을 더 분할할 수 있습니다. 예를 들어, 실린더 유형에 따라 자동 및 수동 변속기의 수를 셀 수 있습니다.
다음과 같이 진행하게 됩니다:
- 1단계: mtcars 데이터세트로 데이터 프레임 만들기
- 2단계: 자동 변속기의 경우 am 변수에 auto, 수동 변속기의 경우 man으로 레이블을 지정합니다. ggplot() 함수에서 factor()를 사용할 필요가 없도록 am과 cyl을 인수로 변환합니다.
- 3단계: 실린더별 전송 횟수를 계산하기 위해 막대형 차트를 그립니다.
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
데이터 세트가 준비되면 그래프를 그릴 수 있습니다.
# 3 단계
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code 설명
- ggplot() 함수는 데이터셋 데이터와 aes() 맵을 인수로 받습니다.ping.
- aes()에는 x축 변수와 막대를 채우는 데 필요한 변수(예: am)가 포함됩니다.
- geom_bar(): 막대 차트 생성
출력:
지도ping 막대는 각 레벨에 해당하는 두 가지 색상으로 채워집니다. 데이터 세트에서 다른 요인 변수를 선택하면 그룹을 쉽게 변경할 수 있습니다.
백분율로 표시되는 막대 차트
원시 개수 대신 백분율로 막대를 시각화할 수 있습니다.
# 백분율로 나타낸 막대 차트
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code 설명
- geom_bar() 인수에 position = "fill"을 사용하여 y축에 백분율이 있는 그래픽을 만듭니다.
출력:
나란히 바
그룹변수와 함께 막대그래프를 나란히 그리는 것은 쉽습니다.
# Bar chart side by side ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = position_dodge()) + theme_classic()
Code 설명
- position=position_dodge(): 막대 정렬 방법을 명시적으로 알려줍니다.
출력:
요약 통계가 포함된 막대 그래프
튜토리얼의 두 번째 부분에서는 y축에 개수가 아닌 계산된 값이 표시됩니다. 이는 여전히 막대 그래프이며, 진정한 히스토그램은 아래 부분에서 다루어지며 다른 기하학적 객체를 사용합니다.
귀하의 목표는 각 실린더 유형의 갤런당 평균 마일을 사용하여 그래프를 만드는 것입니다. 유익한 그래프를 그리려면 다음 단계를 따르세요.
- 1단계: 실린더별 갤런당 평균 마일을 사용하여 새 변수 만들기
- 2단계: 기본 히스토그램 만들기
- 3단계: 방향 변경
- 4단계: 색상 변경
- 5단계: 크기 변경
- 6단계: 그래프에 라벨 추가
단계 1) 새 변수 만들기
간단히 자동차의 실린더 수로 갤런당 평균 마일을 반환하는 data_histogram이라는 데이터 프레임을 만듭니다. 이 새 변수를 평균_mpg라고 부르고 평균을 소수점 이하 두 자리로 반올림합니다.
# 1 단계
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
단계 2) 기본 히스토그램 만들기
히스토그램을 그릴 수 있습니다. 아직 고객에게 보여줄 만큼 완성도가 높지는 않지만, 추세는 이미 보여줍니다.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code 설명
- aes()에는 이제 두 개의 변수가 있습니다. cyl 변수는 x축을 나타내고, 평균_mpg는 y축을 나타냅니다.
- geom_bar() 함수가 행 수를 세는 대신 y축 변수를 그대로 사용하도록 하려면 `stat = “identity”`를 전달해야 합니다. geom_bar() 함수의 기본값은 `stat = “count”입니다.
출력:
단계 3) 방향 변경
그래프의 방향을 세로에서 가로로 변경합니다.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code 설명
- coord_flip()을 사용하여 그래프의 방향을 제어할 수 있습니다.
출력:
단계 4) 색상 변경
x축 변수의 요인 수준에 따라 막대의 색상을 구분할 수 있습니다.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + coord_flip() + theme_classic()
Code 설명
- fill=cyl 맵을 사용하면 그룹별로 그래프를 그릴 수 있습니다.pingR은 cyl 변수의 레벨에 따라 색상을 자동으로 처리합니다.
출력:
단계 5) 크기 변경
그래프를 더 보기 좋게 만들려면 막대의 너비를 줄이세요.
graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity", width = 0.5) + coord_flip() + theme_classic()
Code 설명
- geom_bar() 함수 내부의 width 인수는 막대의 두께를 제어합니다. 값이 클수록 막대가 두꺼워집니다.
- 그래프는 다음 단계에서 변경 없이 재사용되므로 객체 그래프에 저장됩니다. 중간 그래프를 저장하면 코드의 가독성을 유지할 수 있습니다.
출력:
단계 6) 그래프에 라벨 추가
마지막 단계에서는 각 막대 안에 mean_mpg 값을 레이블로 추가합니다.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code 설명
- geom_text() 함수는 텍스트의 미학을 제어하는 데 유용합니다.
- label=: 막대 내부에 레이블을 추가합니다.
- 평균_mpg: 라벨에 변수 평균_mpg를 사용합니다.
- hjust는 막대 그래프에서 레이블의 위치를 제어합니다. 값이 1에 가까우면 레이블이 막대 끝 부분에 위치하고, 값이 클수록 축 쪽으로 이동합니다. 그래프 방향이 세로인 경우 hjust를 vjust로 변경하십시오.
- color=”white”: 텍스트 색상을 변경합니다. 여기서는 흰색을 사용합니다.
- size=3: 텍스트의 크기를 설정합니다.
출력:
R에서 막대 그래프의 막대 순서를 정하고 레이블을 지정하는 방법
최종적으로 완성된 차트와 출판 가능한 차트를 구분하는 두 가지 중요한 작업은 막대를 값 순으로 정렬하고 축에 적절한 레이블을 지정하는 것입니다.
막대 그래프 순서 변경. ggplot2는 기본적으로 요인 수준을 알파벳순으로 정렬하는데, 이는 정보 전달에 가장 효과적인 순서가 아닌 경우가 많습니다. x 변수를 reorder() 함수로 감싸서 두 번째 변수를 기준으로 정렬하세요.
# Sort the bars from lowest to highest mean_mpg ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) + geom_bar(stat = "identity", fill = "coral") + theme_classic()
정렬 방향을 반대로 하려면 정렬 변수 앞에 마이너스 부호(-)를 붙이세요. 예: reorder(cyl, -mean_mpg).
제목과 축 레이블 추가하기. labs() 함수는 한 번의 호출로 모든 텍스트 요소를 설정합니다.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + labs(title = "Average fuel economy by cylinder count", subtitle = "mtcars dataset", x = "Number of cylinders", y = "Mean miles per gallon", fill = "Cylinders", caption = "Source: mtcars") + theme_classic()
labs() 함수 내부에서 fill = NULL로 설정하면 범례 제목이 완전히 사라지고, x축에 이미 그룹 이름이 있는 경우 theme(legend.position = “none”)을 사용하면 범례가 제거됩니다.
원하는 색상을 직접 선택하세요. 기본 팔레트를 원하는 스타일에 맞는 팔레트로 교체하여 차트가 집의 스타일과 일치하도록 하세요.
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
R에서 geom_histogram() 함수를 사용하여 히스토그램을 생성하는 방법
히스토그램은 단일 연속 변수의 분포를 보여줍니다. ggplot2는 범주를 세는 대신 숫자 범위를 구간으로 나누고 각 구간에 속하는 관측치의 수를 계산합니다.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R은 기본값인 30개의 빈이 임의적이므로 더 나은 빈 개수를 선택하라는 메시지를 출력합니다. 이 값은 두 개의 인수로 제어됩니다.
- 쓰레기통범위를 나눌 간격의 개수입니다.
- 빈폭각 구간의 너비를 변수의 단위로 나타낸 것입니다. 단위가 의미 있는 경우에 사용하세요.
# Set the number of bins ggplot(mtcars, aes(x = mpg)) + geom_histogram(bins = 10, fill = "coral", color = "white") + theme_classic() # Or set the width of each bin instead ggplot(mtcars, aes(x = mpg)) + geom_histogram(binwidth = 4, fill = "coral", color = "white") + theme_classic()
히스토그램에서 가장 중요한 선택은 구간 설정입니다. 구간 수가 너무 적으면 두 번째 봉우리와 같은 실제 구조가 가려지고, 너무 많으면 차트가 노이즈로 가득 차게 됩니다. 최적의 값을 찾기 전에 여러 값을 시도해 보세요.
그룹 간 비교. 분포를 읽기 쉽게 유지하려면 요소를 매핑하고 위치를 설정하세요.
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
position = “identity”로 설정하고 알파 값을 줄이면 히스토그램이 겹쳐져 모양을 직접 비교할 수 있습니다. 빈을 나란히 보려면 position = “dodge”를 사용하세요.
개수 대신 밀도. 집단의 크기가 다를 경우, 면적이 비교 가능하도록 밀도를 그래프로 나타낸 후, 평활화된 곡선을 겹쳐 표시합니다.
ggplot(mtcars, aes(x = mpg)) + geom_histogram(aes(y = after_stat(density)), bins = 10, fill = "coral", alpha = 0.6) + geom_density(color = "steelblue", linewidth = 1) + theme_classic()
R에서 막대 그래프 및 히스토그램 그리기: Code 참조
막대 그래프는 x축이 범주형이고 y축이 개수 또는 요약 통계인 경우에 적합합니다. 아래 표는 위에서 설명한 각 변형에 대한 ggplot2 호출을 나열합니다.
| 목표 | Code |
|---|---|
| 카운트 |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| 다양한 채우기 색상으로 계산 |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| 그룹으로 계산, 누적 |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| 그룹별로 나란히 계산 |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| 그룹으로 계산, % 단위로 누적됨 |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| 값(요약 통계) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| 연속 변수의 히스토그램 |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













