如何在r中创建一个正态分布的矩阵?

-7 statistics r normal-distribution matrix

我希望像素网格中填充正态分布的值,如下图所示

在此输入图像描述

有谁知道如何在R中这样做?

Mau*_*ers 5

目前尚不清楚你想做什么.您是否在询问如何从双变量正态分布中进行采样?或者如何创建热图?或者如何将文字叠加到热图上?但好吧,我会咬......

下面是一个从头开始的示例如何生成数据并生成一个热图,其中的数字表示每个箱的计数框.

# 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);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者,如果你只是在热图有兴趣,你可以使用ggplot2stat_bin2d.

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

在此输入图像描述

或者gplots::hist2d.

此处查看选项...