답변
당신이하고 싶은 것이 명확하지 않습니다. 2 변수 정규 분포에서 표본 추출 방법을 묻는 중입니까? 아니면 히트 맵을 만드는 방법? 또는 히트 맵에 텍스트를 오버레이하는 방법은 무엇입니까? 하지만 괜찮아요. ...
데이터를 생성하고 빈 상자 당 개수를 나타내는 숫자가 포함 된 히트 맵을 생성하는 방법을 처음부터 보여주는 예입니다.
아니면 히트 맵에만 관심이 있다면, 당신은 stat_bin2d
와 ggplot2
을 사용할 수 있습니다
# 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);
.
또는 gplots::hist2d
require(ggplot2);
ggplot(data.frame(df), aes(x1, x2)) + stat_bin2d(bins = 20) + scale_fill_gradientn(colours = rainbow(32));
.
더 많은 옵션은 을 참조하십시오 ...
대단히 고마워요! 코드의 모든 줄을 이해하지 못하기 때문에 조금 더 쉬울 수도 있습니다. :-) – Robert
@ 로버트 여러분 환영합니다. 당신이 눈치 챘을 때, 당신의 질문은 상당히 부정적인 평가를 받았다. SO가 다른 사람들에게 코드를 작성하도록 요청하는 포럼이 아니기 때문입니다. R을 가르치기위한 포럼도 아닙니다. 당신과 같은 질문은 대개 뺨을 때다. 대신 SO 회원은 코드를 디버그/개선하는 데 도움이 될 것입니다 **. 미래에 대한 조언으로, [SO 둘러보기] (https://stackoverflow.com/tour)와 [질문하는 방법]을 배우십시오 (https://stackoverflow.com/help/how- 묻다)). –
알았어. 하지만 나는 코드를 이해하지 못하기 때문에 직접 해보고 싶다. – Robert
값을 계산하는 논리는 어떻게되어야합니까? 결과를 산출하기 위해 무엇을 시도 했습니까? 그래픽 유형은 *** 히트 맵 ***입니다. – jogo