2017-11-24 11 views

답변

5

당신이하고 싶은 것이 명확하지 않습니다. 2 변수 정규 분포에서 표본 추출 방법을 묻는 중입니까? 아니면 히트 맵을 만드는 방법? 또는 히트 맵에 텍스트를 오버레이하는 방법은 무엇입니까? 하지만 괜찮아요. ...

데이터를 생성하고 빈 상자 당 개수를 나타내는 숫자가 포함 된 히트 맵을 생성하는 방법을 처음부터 보여주는 예입니다.

enter image description here

아니면 히트 맵에만 관심이 있다면, 당신은 stat_bin2dggplot2을 사용할 수 있습니다

# Create sample data 
require(MASS); 
set.seed(2017); 
mu <- c(5, 5); 
sigma <- diag(c(2, 2)); 
df <- as.data.frame(mvrnorm(10000, mu = mu, Sigma = sigma)); 
colnames(df) <- c("x1", "x2"); 

# Bin breaks 
nbins <- 20; 
breaks_x <- seq(floor(min(df$x1)), ceiling(max(df$x1)), length.out = nbins); 
breaks_y <- seq(floor(min(df$x2)), ceiling(max(df$x2)), length.out = nbins); 

# Frequency table 
freq <- as.data.frame(table(
    as.numeric(cut(df$x1, breaks = breaks_x)), 
    as.numeric(cut(df$x2, breaks = breaks_y)))); 

# Plot matrix 
mat <- diag(nbins) * 0; 
mat[cbind(freq[, 1], freq[, 2])] <- freq[, 3]; 
image(breaks_x, breaks_y, mat, col= rainbow(10)); 
text(breaks_x[freq$Var1], breaks_y[freq$Var2], freq$Freq, cex = 0.8); 
.

enter image description here

또는 gplots::hist2d

require(ggplot2); 
ggplot(data.frame(df), aes(x1, x2)) + stat_bin2d(bins = 20) + scale_fill_gradientn(colours = rainbow(32)); 
.

더 많은 옵션은 을 참조하십시오 ...

+0

대단히 고마워요! 코드의 모든 줄을 이해하지 못하기 때문에 조금 더 쉬울 수도 있습니다. :-) – Robert

+0

@ 로버트 여러분 환영합니다. 당신이 눈치 챘을 때, 당신의 질문은 상당히 부정적인 평가를 받았다. SO가 다른 사람들에게 코드를 작성하도록 요청하는 포럼이 아니기 때문입니다. R을 가르치기위한 포럼도 아닙니다. 당신과 같은 질문은 대개 뺨을 때다. 대신 SO 회원은 코드를 디버그/개선하는 데 도움이 될 것입니다 **. 미래에 대한 조언으로, [SO 둘러보기] (https://stackoverflow.com/tour)와 [질문하는 방법]을 배우십시오 (https://stackoverflow.com/help/how- 묻다)). –

+0

알았어. 하지만 나는 코드를 이해하지 못하기 때문에 직접 해보고 싶다. – Robert