geom_rect と alpha - これはハードコードされた値でも機能しますか? 質問する

geom_rect と alpha - これはハードコードされた値でも機能しますか? 質問する

タイトルは同じですが、質問は完全に言い換えられています。

最初のプロットではアルファが機能するのに、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 を指定する必要がありません。

どちらの方法でも同じプロットが返されます。

ここに画像の説明を入力してください

おすすめ記事