タイトルは同じですが、質問は完全に言い換えられています。
最初のプロットではアルファが機能するのに、2 番目のプロットでは機能しないのはなぜですか? ハードコードされた値では rect が正しい場所に描画されても透明にならないのに、data.frame では期待どおりに機能するのはなぜかわかりません。
mtcars$cyl <- factor(mtcars$cyl)
mtcars$am <- factor(mtcars$am)
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(data=data.frame(xmin=100, xmax=200, ymin=0, ymax=Inf), aes(xmin=xmin, xmax=xmax, ymin=ymin,ymax=ymax), fill="red", alpha=0.2)
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2)
ベストアンサー1
これは私にとって不可解だったので、グーグルで調べたところ、何か新しいことを学ぶ(彼らの例のいくつかの不規則性を回避した後)。
どうやら、あなたがやっていることは、多数の四角形を重ねて描画することであり、実質的には、必要な半透明を無効にしています。したがって、これを克服する唯一の方法は、別の df に四角形の座標をハードコードするか、または...
ggplot() +
geom_density(data=mtcars, aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), alpha=0.2, fill="red")
... data.frame をプロットにグローバルに割り当てないでください。代わりに、必要なレイヤー (この例では ) でのみ使用しgeom_density
、他のレイヤーは df フリーのままにしてください。または、さらに良い方法として、 を使用して、annotate
デフォルトの df の下からプロットを変更します。
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
annotate("rect", xmin=100, xmax=200, ymin=0, ymax=Inf, alpha=0.2, fill="red")
後者の方法では、プロット全体に単一の data.frame を使用できるため、各レイヤーに同じ df を指定する必要がありません。
どちらの方法でも同じプロットが返されます。