반응형
막대 그래프(Bar plot, Bar chart)
막대 그래프는 데이터의 카테고리별 빈도수 또는 값을 막대로 나타낸 그래프이다.
막대 그래프는 주로 범주형 데이터(카테고리, 클래스, 그룹 등)를 시각화할 때 사용되며,
각 막대는 범주(카테고리)에 따라 높이(값)로 표현되며, 막대의 높이는 해당 범주의 빈도수, 수량, 또는 특정 값을 나타낸다.
R 기본함수 : barplot 함수를 사용한 막대 그래프
library(palmerpenguins) data("penguins") #Dataset 불러오기 str(penguins) #Dataset 구성 확인 |
> str(penguins) #Dataset 구성 확인 tibble [344 × 8] (S3: tbl_df/tbl/data.frame) $ species : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ... $ island : Factor w/ 3 levels "Biscoe","Dream",..: 3 3 3 3 3 3 3 3 3 3 ... $ bill_length_mm : num [1:344] 39.1 39.5 40.3 NA 36.7 39.3 38.9 39.2 34.1 42 ... $ bill_depth_mm : num [1:344] 18.7 17.4 18 NA 19.3 20.6 17.8 19.6 18.1 20.2 ... $ flipper_length_mm: int [1:344] 181 186 195 NA 193 190 181 195 193 190 ... $ body_mass_g : int [1:344] 3750 3800 3250 NA 3450 3650 3625 4675 3475 4250 ... $ sex : Factor w/ 2 levels "female","male": 2 1 1 NA 1 2 1 2 NA NA ... $ year : int [1:344] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ... |
barplot #1
barplot(table(penguins$species),
main = "Species Count", ylab = "Count", xlab = "Species", col = "darkblue")
barplot #2 : horiz = F
barplot(table(penguins$species), horiz = F,
main = "Species Count (horiz = F)", ylab = "Count", xlab = "Species", col = "blue")
barplot #3 : horiz = T
barplot(table(penguins$species), horiz = T,
main = "Species Count (horiz = T)", ylab = "Species", xlab = "Count", col = "darkgreen")
barplot #4 : Group (species)별 다른 색상으로 표시
table(penguins$species) |
Adelie Chinstrap Gentoo 152 68 124 |
# 종별 색상 지정
colors <- c("darkblue", "darkgreen", "darkred")
# 막대 그래프 그리기
barplot(table(penguins$species),
main = "Species Count", xlab = "Species", ylab = "Count", col = colors)
300x250
ggplot + geom_barplot
geom_bar()에는 기본으로 count 기능이 적용되어 있어,
데이터를 그룹화하여 빈도수 또는 카테고리별로 표시한다.
막대 그래프의 막대 배치 옵션 (position = "옵션명")
stack (기본값) : 막대를 위로 쌓아서 표시
dodge : 막대를 옆으로 배열하여 겹치지 않게 표시
fill : 막대를 100%로 채워서 표시 각 범주의 막대를 100%로 표시
geom_barplot #1
ggplot(penguins, aes(x=species)) + geom_bar(fill="darkblue") +
labs(title = "Species Count", x = "Species", y = "Count")
geom_barplot #2 : Group (species)별 다른 색상으로 표시 (자동 지정)
x = species, fill = species
ggplot(penguins, aes(x=species)) + geom_bar(aes(fill=species)) +
labs(title = "Species Count", x = "Species", y = "Count")
geom_barplot #3 : Group (species)별 다른 색상으로 표시 (색상 지정)
scale_fill_manual(values = colors)
# 종별 색상 지정
colors <- c("darkblue", "darkgreen", "darkred")
# 막대 그래프 그리기
ggplot(penguins, aes(x=species)) + geom_bar(aes(fill=species)) +
scale_fill_manual(values = colors) +
labs(title = "Species Count", x = "Species", y = "Count")
geom_barplot #4 : 두 Group (species, sex) 표시 [누적 막대그래프]
ggplot(penguins, aes(x=species)) + geom_bar(aes(fill=sex)) +
labs(title = "Species Count", x = "Species", y = "Count")
geom_barplot #5 : 두 Group (species, sex) 별도 표시 [position = "dodge"]
ggplot(penguins, aes(x=species)) + geom_bar(aes(fill=sex), position = "dodge") +
labs(title = "Species Count", x = "Species", y = "Count")
geom_barplot #6 : 두 Group (species, sex) 비율 표시 [position = "fill"]
ggplot(penguins, aes(x=species)) + geom_bar(aes(fill=sex), position = "fill") +
labs(title = "Species Count", x = "Species", y = "Count")
geom_barplot #7 : 값 지정
stat = "identity"
# 데이터 전처리: 종별 빈도수 계산 penguins_count <- penguins %>% group_by(species) %>% summarize(count = n()) penguins_count |
> penguins_count # A tibble: 3 × 2 species count <fct> <int> 1 Adelie 152 2 Chinstrap 68 3 Gentoo 124 |
ggplot(penguins_count, aes(x=species, y=count, fill=species)) + geom_bar() + scale_fill_manual(values = colors) + labs(title = "Species Count", x = "Species", y = "Count") |
Error in `geom_bar()`: ! Problem while computing stat. ℹ Error occurred in the 1st layer. Caused by error in `setup_params()`: ! `stat_count()` must only have an x or y aesthetic. Run `rlang::last_trace()` to see where the error occurred. |
"geom_bar"는 데이터를 직접 사용하는 것이 아니라 빈도수를 계산하는 stat_count()와 함께 사용됨에 따라, Error 메세지 표시 |
ggplot(penguins_count, aes(x=species, y=count, fill=species)) + geom_bar(stat = "identity") +
scale_fill_manual(values = colors) +
labs(title = "Species Count", x = "Species", y = "Count")
ggplot + geom_col
geom_col()도 ggplot2 패키지를 사용하여 막대 그래프를 그리는 함수이다.
geom_bar()와 유사하지만, geom_bar는 데이터를 직접 사용하는 것이 아니라
빈도수를 계산하는 stat_count()을 통해서, x축만 입력해도 통계적 변환 후 그래프에 표시
geom_col은 데이터를 변환하지 않고 그대로 표시
geom_col #1
ggplot(penguins_count, aes(x=species, y=count, fill=species)) + geom_col() +
scale_fill_manual(values = colors) +
labs(title = "Species Count", x = "Species", y = "Count")
geom_col #2
ggplot(penguins_count, aes(x=count, y=species, fill=species)) + geom_col() +
scale_fill_manual(values = colors) +
labs(title = "Species Count", x = "Count", y = "Species")
geom_col #3 : 두 Group (species, sex) 표시 [누적 막대그래프]
# 데이터 전처리: 종별 빈도수 계산 penguins_count <- penguins %>% group_by(species, sex) %>% summarize(count = n()) penguins_count |
> penguins_count # A tibble: 8 × 3 # Groups: species [3] species sex count <fct> <fct> <int> 1 Adelie female 73 2 Adelie male 73 3 Adelie NA 6 4 Chinstrap female 34 5 Chinstrap male 34 6 Gentoo female 58 7 Gentoo male 61 8 Gentoo NA 5 |
ggplot(penguins_count, aes(x=species, y=count, fill=species)) + geom_col(aes(fill=sex)) +
labs(title = "Species Count", x = "Species", y = "Count")
geom_col #4 : 두 Group (species, sex) 별도 표시 [position = "dodge"]
ggplot(penguins_count, aes(x=species, y=count, fill=species)) +
geom_col(aes(fill=sex), position = "dodge") +
labs(title = "Species Count", x = "Species", y = "Count")
geom_col #5 : 두 Group (species, sex) 비율 표시 [position = "fill"]
ggplot(penguins_count, aes(x=species, y=count, fill=species)) +
geom_col(aes(fill=sex), position = "fill") +
labs(title = "Species Count", x = "Species", y = "Count")
728x90
'데이터 분석 (with Rstudio)' 카테고리의 다른 글
[Rstudio] Line plot 선 그래프 with ggplot (0) | 2023.10.18 |
---|---|
[Rstudio] 산점도 (scatter plot) with ggplot (1) | 2023.10.17 |
[Rstudio] 한 화면에 여러 개 복수 그래프 출력 (par, plot_grid) (0) | 2023.10.15 |
[Rstudio] Boxplot 박스플롯 (상자 수염 그림) with ggplot (1) | 2023.10.15 |
[Rstudio] histogram 히스토그램 with ggplot (1) | 2023.10.10 |