R에서 ggplot2로 히스토그램 오버레이
나는 R을 처음 사용하고 동일한 그래프에 3 개의 히스토그램을 플로팅하려고합니다. 모든 벌금을했다,하지만 내 문제는 2 히스토그램이 겹치는 곳을 볼 수 없다는 것입니다 - 그들은 오히려 볼 차단 : 히스토그램
밀도 플롯을 만들면 완벽 해 보입니다. 각 곡선은 검은 색 프레임 선으로 둘러싸여 있고 곡선이 겹치는 곳에서는 색상이 다르게 보입니다. 밀도 플롯
첫 번째 그림의 히스토그램으로 비슷한 것을 얻을 수 있는지 말해 줄 수 있습니까? 이것은 내가 사용하는 코드입니다.
lowf0 <-read.csv (....)
mediumf0 <-read.csv (....)
highf0 <-read.csv(....)
lowf0$utt<-'low f0'
mediumf0$utt<-'medium f0'
highf0$utt<-'high f0'
histogram<-rbind(lowf0,mediumf0,highf0)
ggplot(histogram, aes(f0, fill = utt)) + geom_histogram(alpha = 0.2)
유용한 팁에 대해 미리 감사드립니다!
현재 코드 :
ggplot(histogram, aes(f0, fill = utt)) + geom_histogram(alpha = 0.2)
는 모든 값을 사용하여 하나의 히스토그램 ggplot
을 구성한 다음 변수에 따라이 단일 히스토그램의 막대 색상을 지정합니다 .f0
utt
대신 원하는 것은 알파 블렌딩을 사용하여 서로 볼 수 있도록 세 개의 개별 히스토그램을 만드는 것입니다. 따라서 세 개의 개별 호출을 사용 geom_histogram
하여 각각 고유 한 데이터 프레임을 가져와 채울 수 있습니다.
ggplot(histogram, aes(f0)) +
geom_histogram(data = lowf0, fill = "red", alpha = 0.2) +
geom_histogram(data = mediumf0, fill = "blue", alpha = 0.2) +
geom_histogram(data = highf0, fill = "green", alpha = 0.2) +
다음은 일부 출력이있는 구체적인 예입니다.
dat <- data.frame(xx = c(runif(100,20,50),runif(100,40,80),runif(100,0,30)),yy = rep(letters[1:3],each = 100))
ggplot(dat,aes(x=xx)) +
geom_histogram(data=subset(dat,yy == 'a'),fill = "red", alpha = 0.2) +
geom_histogram(data=subset(dat,yy == 'b'),fill = "blue", alpha = 0.2) +
geom_histogram(data=subset(dat,yy == 'c'),fill = "green", alpha = 0.2)
다음과 같은 것을 생성합니다 :
오타 수정을 위해 수정되었습니다. 당신은 색깔이 아닌 채우기를 원했습니다.
@joran의 표본 데이터를 사용하여
ggplot(dat, aes(x=xx, fill=yy)) + geom_histogram(alpha=0.2, position="identity")
기본 위치 geom_histogram
는 "스택"입니다.
이 페이지의 "위치 조정"을 참조하십시오.
docs.ggplot2.org/current/geom_histogram.html
ggplot2에서 여러 / 겹치는 히스토그램을 표시하는 데 몇 줄만 있으면되지만 결과가 항상 만족 스럽지는 않습니다. 가 존재해야 적절한 테두리 사용 착색 할 수있는 눈을 위해 히스토그램 구별 .
다음 함수는 경계 색상, 불투명도 및 중첩 밀도 플롯의 균형을 유지 하여 뷰어가 분포 를 구별 할 수 있도록합니다 .
단일 히스토그램 :
plot_histogram <- function(df, feature) {
plt <- ggplot(df, aes(x=eval(parse(text=feature)))) +
geom_histogram(aes(y = ..density..), alpha=0.7, fill="#33AADE", color="black") +
geom_density(alpha=0.3, fill="red") +
geom_vline(aes(xintercept=mean(eval(parse(text=feature)))), color="black", linetype="dashed", size=1) +
labs(x=feature, y = "Density")
print(plt)
}
다중 히스토그램 :
plot_multi_histogram <- function(df, feature, label_column) {
plt <- ggplot(df, aes(x=eval(parse(text=feature)), fill=eval(parse(text=label_column)))) +
geom_histogram(alpha=0.7, position="identity", aes(y = ..density..), color="black") +
geom_density(alpha=0.7) +
geom_vline(aes(xintercept=mean(eval(parse(text=feature)))), color="black", linetype="dashed", size=1) +
labs(x=feature, y = "Density")
plt + guides(fill=guide_legend(title=label_column))
}
사용법 :
간단하게 위의 기능으로 데이터 프레임을 통과 원하는 인수와 함께 :
plot_histogram(iris, 'Sepal.Width')
plot_multi_histogram(iris, 'Sepal.Width', 'Species')
plot_multi_histogram 의 추가 매개 변수 는 카테고리 레이블이 포함 된 열의 이름입니다.
우리는 다양한 배포 수단을 가진 데이터 프레임을 만들어서 이것을보다 극적으로 볼 수 있습니다 .
a <-data.frame(n=rnorm(1000, mean = 1), category=rep('A', 1000))
b <-data.frame(n=rnorm(1000, mean = 2), category=rep('B', 1000))
c <-data.frame(n=rnorm(1000, mean = 3), category=rep('C', 1000))
d <-data.frame(n=rnorm(1000, mean = 4), category=rep('D', 1000))
e <-data.frame(n=rnorm(1000, mean = 5), category=rep('E', 1000))
f <-data.frame(n=rnorm(1000, mean = 6), category=rep('F', 1000))
many_distros <- do.call('rbind', list(a,b,c,d,e,f))
이전과 같이 데이터 프레임 전달 (및 옵션을 사용하여 확장 차트) :
options(repr.plot.width = 20, repr.plot.height = 8)
plot_multi_histogram(many_distros, 'n', 'category')
참고 URL : https://stackoverflow.com/questions/6957549/overlaying-histograms-with-ggplot2-in-r
'IT박스' 카테고리의 다른 글
node_modules / rxjs / internal / types.d.ts (81,44) : 오류 TS1005 : ';' (0) | 2020.07.26 |
---|---|
.data () 키 / 값을 기준으로 필터 요소 (0) | 2020.07.26 |
비트 맵을 파일로 변환 (0) | 2020.07.26 |
Rails 4-변수를 부분적으로 전달 (0) | 2020.07.26 |
HTML 테이블에 가로 스크롤 막대 추가 (0) | 2020.07.26 |