ggplot2
を使用して次のヒストグラム密度プロットを作成します。 「通常の」方法(基本パッケージ)では、本当に簡単です。
set.seed(46)
vector <- rnorm(500)
breaks <- quantile(vector,seq(0,1,by=0.1))
labels = 1:(length(breaks)-1)
den = density(vector)
hist(df$vector,
breaks=breaks,
col=Rainbow(length(breaks)),
probability=TRUE)
lines(den)
これまでのところ、ggplotでこれに到達しました。
seg <- cut(vector,breaks,
labels=labels,
include.lowest = TRUE, right = TRUE)
df = data.frame(vector=vector,seg=seg)
ggplot(df) +
geom_histogram(breaks=breaks,
aes(x=vector,
y=..density..,
fill=seg)) +
geom_density(aes(x=vector,
y=..density..))
しかし、「y」スケールの寸法は間違っています。次の実行で「y」スケールが正しくなることに注意しました。
ggplot(df) +
geom_histogram(breaks=breaks,
aes(x=vector,
y=..density..,
fill=seg)) +
geom_density(aes(x=vector,
y=..density..))
わかりません。 y=..density..
があります。これは高さです。それで、なぜ私はそれを埋めようとするときに私のスケールが修正されるのですか?
色が必要です。各ブロックのブレークと色がデフォルトのggplotの塗りつぶし色に従って方向的に設定されているヒストグラムが必要です。
手動で、パーセンタイルバーに色を追加しました。これがうまくいくかどうかを確認してください。
library(ggplot2)
ggplot(df, aes(x=vector)) +
geom_histogram(breaks=breaks,aes(y=..density..),colour="black",fill=c("red","orange","yellow","lightgreen","green","darkgreen","blue","darkblue","purple","pink")) +
geom_density(aes(y=..density..)) +
scale_x_continuous(breaks=c(-3,-2,-1,0,1,2,3)) +
ylab("Density") + xlab("df$vector") + ggtitle("Histogram of df$vector") +
theme_bw() + theme(plot.title=element_text(size=20),
axis.title.y=element_text(size = 16, vjust=+0.2),
axis.title.x=element_text(size = 16, vjust=-0.2),
axis.text.y=element_text(size = 14),
axis.text.x=element_text(size = 14),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
fill=seg
はグループ化されます。実際、seg
の各値に対して異なるヒストグラムを取得しています。色が必要ない場合は、これを使用できます。
ggplot(df) +
geom_histogram(breaks=breaks,aes(x=vector,y=..density..), position="identity") +
geom_density(aes(x=vector,y=..density..))
色が必要な場合は、ggplot2以外の密度値を計算するのが最も簡単な場合があります。
y-axis
の解釈に関する混乱は、カウントではなく密度がプロットされているためである可能性があります。したがって、y-axis
の値は、サンプル全体の比率です。ここで、バーの合計は1
に等しくなります。