티스토리 뷰
R의 기본 함수인 hist() 외에도 ggplot2를 이용해 더 정교한 히스토그램을 그릴 수 있습니다.
hist()를 이용한 히스토그램 그리기가 궁금하다면 click
> set.seed(1000)
> df <- data.frame(
+ sample=factor(rep(c("A", "B"), each=300)),
+ value=round(c(rnorm(300, mean=40, sd=5), rnorm(300, mean=60, sd=10)))
+ )
> head(df)
sample value
1 A 38
2 A 34
3 A 40
4 A 43
5 A 36
6 A 38
우선 A, B 두 샘플의 서로 다른 평균값을 가진 데이터를 만들어줍니다.
> library(ggplot2)
# Basic histogram
> ggplot(df, aes(x=value)) +
+ geom_histogram()
# Change the width of bins
> ggplot(df, aes(x=value)) +
+ geom_histogram(binwidth=1)
ggplot2 라이브러리를 우선 불러온 후 value 값을 이용해 히스토그램을 그릴 수 있습니다. 여기서 binwidth값을 이용해서 오른쪽과 같은 세분화된 히스토그램을 얻을 수 있습니다.
> p <- ggplot(df, aes(x=value)) +
+ theme_minimal()
# Change colors
> p + geom_histogram(binwidth=1,
+ color="black", fill="gray")
# Add mean line
> p + geom_histogram(binwidth=1,
+ color="black", fill="gray") +
+ geom_vline(aes(xintercept=mean(value)),
+ color="black", linetype="dashed", size=1)
히스토그램의 둘레 색과, 내부 색을 변경이 가능하고, 또 평균값과 같이 원하는 위치에 선을 추가할 수 도 있습니다.
# histogram with density plot
> p + geom_histogram(aes(y=..density..),
+ binwidth=1,
+ color="black", fill="gray") +
+ geom_density(alpha=0.3, fill="red")
# histogram with density plot and mean line
> p + geom_histogram(aes(y=..density..),
+ binwidth=1,
+ color="black", fill="gray") +
+ geom_density(alpha=0.3, fill="red") +
+ geom_vline(aes(xintercept=mean(value)),
+ color="black", linetype="dashed", size=1)
density를 함께 표기할 수 있는데, 이는 전체적인 경향을 확인하기에 좋습니다.
> p <- ggplot(df, aes(x=value, fill=sample, color=sample)) +
+ theme(legend.position="top")
# Stacked histograms
> p + geom_histogram(alpha=0.5, position='stack')
# Overlaid histograms
> p + geom_histogram(alpha=0.5, position="identity")
# Interleaved histograms
> p + geom_histogram(alpha=0.5, position="dodge")
ggplot에서 fill, color에 value값을 넣어줌으로써 A, B가 나누어진 히스토그램도 확인할 수 있습니다. 특히 position에 형태를 변경해줌으로써 원하는 그래프를 얻을 수 있습니다.
> library(plyr)
> mu <- ddply(df, "sample", summarise, grp.mean=mean(value))
> head(mu)
sample grp.mean
1 A 40.09667
2 B 59.78000
> ggplot(df, aes(x=value, fill=sample, color=sample)) +
+ geom_histogram(aes(y=..density..), alpha=0.5, position="identity") +
+ geom_density(alpha=0.3) +
+ geom_vline(data=mu, aes(xintercept=grp.mean, color=sample),
+ linetype="dashed", size=1) +
+ theme(legend.position="top") +
+ theme_minimal()
두 가지 샘플에 대해서도 따로 density값과 mean 라인을 추가할 수도 있습니다.
'R' 카테고리의 다른 글
R | prop.table()을 이용해 proportion/비율/퍼센트 구하기 (0) | 2020.03.31 |
---|---|
R | format()을 이용해 numeric vector다루기 (0) | 2020.03.26 |
R | 숫자 천단위 마다 콤마 찍기 (formattable) (1) | 2020.03.25 |
R | Correlation 그리는 세가지 방법 - pairs(), ggpairs(), corrplot() (0) | 2020.03.23 |
R | 히스토그램 그리기, hist() (0) | 2020.03.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 데이터
- 코로나바이러스
- SEQ
- geom_bar
- Excel
- 파이썬
- plot
- Coding
- 숫자
- geom_line
- 엑셀
- BIOINFORMATICS
- RStudio
- Visualization
- comma
- covid
- 팟빵
- for loop
- coronavirus
- Command
- hist
- Order
- 2진수
- Python
- r
- visualizing
- Cast
- format
- Heatmap
- data
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함