5

ミラー化された 95% の密度曲線をプロットし、アルファを密度にマップしたいと思います。

foo <- function(mw, sd, lower, upper) {
x <- seq(lower, upper, length=500)
dens <- dnorm(x, mean=mw, sd=sd, log=TRUE)
dens0 <- dens -min(dens)
return(data.frame(dens0, x))
}

df.rain <- foo(0,1,-1,1)

library(ggplot2)


drf <- ggplot(df.rain, aes(x=x, y=dens0))+
geom_line(aes(alpha=..y..))+
geom_line(aes(x=x, y=-dens0, alpha=-..y..))+
stat_identity(geom="segment", aes(xend=x, yend=0, alpha=..y..))+
stat_identity(geom="segment", aes(x=x, y=-dens0, xend=x, yend=0, alpha=-..y..))
drf

これは問題なく動作しますが、エッジと中央のコントラストをより際立たせたいと思います。つまり、エッジをほぼ白にして、中央部分だけを黒にしたいのです。私は改ざんしてきましたscale_alpha()が、運がありませんでした。何か案は?

編集: 最終的に、いくつかの雨滴をプロットしたいと思います。つまり、個々の滴は小さくなりますが、陰影ははっきりと見えるはずです。

4

3 に答える 3

4

dens0にマッピングする代わりに、次のようにマッピングalphacolorます。

drf <- ggplot(df.rain, aes(x=x, y=dens0))+
   geom_line(aes(color=..y..))+
   geom_line(aes(x=x, y=-dens0, color=-..y..))+
   stat_identity(geom="segment", aes(xend=x, yend=0, color=..y..))+
   stat_identity(geom="segment", aes(x=x, y=-dens0, xend=x, yend=0, color=-..y..))

ここに画像の説明を入力

今でも色のコントラストは主に尻尾に見られます。2 つの色を使用すると少し効果があります (色の切り替えは 0.25 であることに注意してください)。

drf + scale_color_gradient2(midpoint = 0.25)

ここに画像の説明を入力

最後に、dens0値の分布を含めるために、カラー スケールの中間点をデータの中央値に基づいています。

drf + scale_color_gradient2(midpoint = median(df.rain$dens0))

ここに画像の説明を入力

ノート!: ただし、データを微調整する方法では、データのほとんどのコントラストは、データセット内のより極端な値にあります。非線形スケールをいじったり、私が行ったようにカラー スケールを微調整したりして、これをマスクしようとすると、実際のデータの誤った図が表示される可能性があります。

于 2012-07-31T11:00:43.413 に答える
3

geom_line() の代わりに geom_ribbon() を使用したソリューションを次に示します。

df.rain$group <- seq_along(df.rain$x)
tmp <- tail(df.rain, -1)
tmp$group <- tmp$group - 1
tmp$dens0 <- head(df.rain$dens0, -1)
dataset <- rbind(head(df.rain, -1), tmp)
ggplot(dataset, aes(x = x, ymin = -dens0, ymax = dens0, group = group, 
  alpha = dens0)) + geom_ribbon() + scale_alpha(range = c(0, 1))

ここに画像の説明を入力

ggplot(dataset, aes(x = x, ymin = -dens0, ymax = dens0, group = group, 
  fill = dens0)) + geom_ribbon() + 
  scale_fill_gradient(low = "white", high = "black")

ここに画像の説明を入力

色の変更については、ポールの回答を参照してください。

dataset9 <- merge(dataset, data.frame(study = 1:9))
ggplot(dataset9, aes(x = x, ymin = -dens0, ymax = dens0, group = group, 
    alpha = dens0)) + geom_ribbon() + scale_alpha(range = c(0, 0.5)) + 
    facet_wrap(~study)

ここに画像の説明を入力

于 2012-07-31T11:20:07.967 に答える
0

あなたの両方の答えを熟考している間、私は実際に私が探していたものを正確に見つけました. 最も簡単な方法は、単純scale_colour_gradientnにグレーのベクトルを使用することです。

library(RColorBrewer)
grey <- brewer.pal(9,"Greys")

drf <- ggplot(df.rain, aes(x=x, y=dens0, col=dens0))+
 stat_identity(geom="segment", aes(xend=x, yend=0))+
 stat_identity(geom="segment", aes(x=x, y=-dens0, xend=x, yend=0))+
 scale_colour_gradientn(colours=grey)
drf
于 2012-08-02T11:10:39.837 に答える