、geom_tile
タイル境界がalpha
マッピングに従うべきであると私には思えたが、彼らは表示されません。この問題を回避するには、geom_segment
を使用して、境界線を配置する場所と同じ位置に線分を描画します。これらのセグメントはalpha
のマッピングに従います。
以下のコードでは、まずセグメントを描画するための新しいデータフレームsegs
を作成します。元のデータを使用することもできますが、短い1行1列です。
library(dplyr)
segs = expand.grid(x=(min(volcano3d$x)-1):max(volcano3d$x),
y=(min(volcano3d$y)-1):max(volcano3d$y)) %>%
left_join(volcano3d)
プロットにセグメントを追加するために、我々は、それぞれ、垂直または水平セグメントのための正しい順序でのxとyの値を取得するたびにソートする必要があります。また、にcolour="#FFFFFF00"
を使用して、デフォルトのタイル境界線を削除します。下のプロットで
ggplot(volcano3d, aes(fill=z, colour=z, alpha=y)) +
geom_tile(colour="#FFFFFF00", aes(x, y)) +
geom_segment(data=segs %>% arrange(x,y),
aes(x=x+0.5, xend=x+0.5, y=y+0.5, yend=lag(y)+0.5), size=0.2) +
geom_segment(data=segs %>% arrange(y,x),
aes(x=x+0.5, xend=lag(x)+0.5, y=y+0.5, yend=y+0.5), size=0.2)
、あなたはタイルの境界線を見ることができますが、彼らは、タイル自身と一緒にフェード。境界線はタイルの上に描かれているため少し暗くなり、タイルだけの不透明度が約2倍になります。
あなたがタイルの境界があまり顕著になりたい場合は、タイルアルファ値に対するそれらalpha
値をスケールダウンすることができます。
ggplot(volcano3d, aes(fill=z, colour=z, alpha=y)) +
#geom_tile(colour="#FFFFFF00", aes(x, y)) +
geom_segment(data=segs %>% arrange(x,y),
aes(x=x+0.5, xend=x+0.5, y=y+0.5, yend=lag(y)+0.5), size=1.5) +
geom_segment(data=segs %>% arrange(y,x),
aes(x=x+0.5, xend=lag(x)+0.5, y=y+0.5, yend=y+0.5), size=1.5)
がここにあります:
ggplot(volcano3d, aes(fill=z, colour=z)) +
geom_tile(colour="#FFFFFF00", aes(x, y, alpha=y)) +
geom_segment(data=segs %>% arrange(x,y),
aes(x=x+0.5, xend=x+0.5, y=y+0.5, yend=lag(y)+0.5, alpha=0.2*y), size=0.2) +
geom_segment(data=segs %>% arrange(y,x),
aes(x=x+0.5, xend=lag(x)+0.5, y=y+0.5, yend=y+0.5, alpha=0.2*y), size=0.2)
セグメントはタイルの色とアルファ値を模倣していることを自分自身を納得させるためには、タイルやプロット太い線を削除することができます色のグラディエントが変化するバージョンで、の範囲でコントラストが向上します個の値は:
ggplot(volcano3d, aes(fill=z, colour=z, alpha=y)) +
geom_tile(colour="#FFFFFF00", aes(x, y)) +
geom_segment(data=segs %>% arrange(x,y),
aes(x=x+0.5, xend=x+0.5, y=y+0.5, yend=lag(y)+0.5), size=0.2) +
geom_segment(data=segs %>% arrange(y,x),
aes(x=x+0.5, xend=lag(x)+0.5, y=y+0.5, yend=y+0.5), size=0.2) +
scale_fill_gradient2(low="red", mid="yellow", high="blue", midpoint=mean(range(volcano3d$z))) +
scale_colour_gradient2(low="red", mid="yellow", high="blue", midpoint=mean(range(volcano3d$z)))
あなたがscale_color_gradient 'のようなもの(低= '#00000000'、高= 'hotpink')'でこれを行うことができるはずのように思えるが、それは悲しげに無視します(それはそれを受け入れるが...) - 多分色空間の問題。 – alistaire
そうだと思いますが、scale_color_gradient()にアルファを指定しても効果がないことがわかりました。色と塗りつぶしに別々のアルファが必要なようです。 – pthomp
アルファはそれ自身の審美的です。そのため、 'scale_alpha_continuous'が存在します。しかし、はい、 'geom_tile'では、塗りつぶしにのみ影響し、ストロークには影響しません。'scale_color_gradient'アプローチはちょっとハッキリですが、根底にあるカラーハンドリングのせいで失敗するようです。あまりにも多くの作業として拒否されるかもしれませんが、正しく組み立てれば、GitHubの問題が発生する可能性があります。 – alistaire