2017-11-24 7 views
-7

は、私は誰もがRでこれを行う方法を知っていrで正規分布を持つ行列を作成するには?

enter image description here

下の写真のようにそれで正規分布の値で満たされたピクセルグリッドを持っていたいですか?

+0

値を計算するロジックはどのようにする必要がありますか?何をあなたの結果を生み出そうとしましたか?グラフィックタイプは***ヒートマップ***です。 – jogo

答えて

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); 

enter image description here

それとも、ヒートマップ内にのみ興味があるなら、あなたはstat_bin2dggplot2を使用することができます。

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

enter image description here

またはgplots::hist2d

その他のオプションについては、hereを参照してください。

+0

ありがとうございます! あなたのコードのすべての行を理解していないので少し簡単かもしれません。:-) – Robert

+0

@Robertよろしくお願いします。あなたが気づいたように、あなたの質問はかなり否定的な評価を引きつけています。 SOはあなたのためにコードを書くように他の人に依頼するフォーラムではないからです。これはあなたにRを教えるフォーラムでもありません。あなたのような質問は、通常、面倒です。代わりに、SOメンバーは、コードをデバッグ/改善するのを手伝ってくれます。将来のためのアドバイスとして、[SOツアー](https://stackoverflow.com/tour)と[質問方法]を学ぶべきです(https://stackoverflow.com/help/how-聞く、質問する))。 –

+0

入手しました。しかし、私は自分でそれを試してみたいコードを理解していないので。 – Robert

関連する問題