ggplotヒストグラム(y軸=カウント)を経験的および正規密度曲線でオーバーレイしたいと思います。私は試した:
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
ggplot(v, aes(x = value)) +
geom_histogram(aes(y = ..density..),
bins = 40, colour = "black", fill = "white") +
geom_line(aes(y = ..density.., color = 'Empirical'), stat = 'density') +
stat_function(fun = dnorm, aes(color = 'Normal'),
args = list(mean = 10, sd = 2.5)) +
scale_colour_manual(name = "Colors", values = c("red", "blue"))
しかし、これはyスケールの密度を持っているので、y軸として頻度が必要です。
私の2番目の試行では、頻度(カウント)をy軸としてプロットを作成しましたが、経験的な密度のみを使用しました。
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
b <- seq(0, 20, by = 0.5)
p1 <- ggplot(v, aes(x = value)) +
geom_histogram(aes(y = ..count..),
breaks = b,
binwidth = 0.5,
colour = "black",
fill = "white") +
geom_line(aes(y = ..density.. * (1000 * 0.5),
color = 'Empirical'),
stat = 'density') +
scale_colour_manual(name = "Colors", values = c("red", "blue"))
同じプロットにdnorm曲線も表示できませんでした。たとえば次の線を試してみると、x軸に密度曲線(青い線)が表示されました。
p2 <- p1 + stat_function(fun = dnorm, aes(color = 'Normal'),
args = list(mean = 10, sd = 2.5))
p2
(経験的な線のように)ビン幅で曲線を適応させる必要があると思いますが、それを行う方法がわかりません。
私はSOでこの問題を検索し、多くの同様の質問を見つけることができました。しかし、それらはすべて、私の最初の試行(y軸として密度を使用)、カウント軸を使用した経験的なオーバーレイ(2番目の試行)、または私がよく知らない他の(基本)プロットコマンドのいずれかに対処しました。
@ user20650からのリンクに従ってコードを書き直し、@ PatrickTによる回答を問題に適用しました。
library(ggplot2)
n = 1000
mean = 10
sd = 2.5
binwidth = 0.5
set.seed(1234)
v <- as_tibble(rnorm(n, mean, sd))
b <- seq(0, 20, by = binwidth)
ggplot(v, aes(x = value, mean = mean, sd = sd, binwidth = binwidth, n = n)) +
geom_histogram(aes(y = ..count..),
breaks = b,
binwidth = binwidth,
colour = "black",
fill = "white") +
geom_line(aes(y = ..density.. * n * binwidth, colour = "Empirical"),
size = 1, stat = 'density') +
stat_function(fun = function(x)
{dnorm(x, mean = mean, sd = sd) * n * binwidth},
aes(colour = "Normal"), size = 1) +
labs(x = "Score", y = "Frequency") +
scale_colour_manual(name = "Line colors", values = c("red", "blue"))
決定的な変更は、stat-function
nとbinwidthに必要な適応が提供されるラインにあります。さらに、パラメータをaes()に渡すことができることを知りませんでした。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加