8

次のようなデータセットがあります。

a <- data.frame(x=rep(c(1,2,3,5,7,10,15,20), 5),
                y=rnorm(40, sd=2) + rep(c(4,3.5,3,2.5,2,1.5,1,0.5), 5))
ggplot(a, aes(x=x,y=y)) + geom_point() +geom_smooth()

グラフ出力

そのプロットと同じ出力が必要ですが、滑らかな曲線ではなく、x 値の各セットの平均/標準偏差間の線分を取りたいだけです。グラフは上のグラフと似ているはずですが、曲線ではなくギザギザになっています。

これを試しましたが、x 値が一意でなくても失敗します。

ggplot(a, aes(x=x,y=y)) + geom_point() +stat_smooth(aes(group=x, y=y, x=x))
geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)?
4

4 に答える 4

8

?stat_summaryあなたが見るべきものです。

ここに例があります

# functions to calculate the upper and lower CI bounds
uci <- function(y,.alpha){mean(y) + qnorm(abs(.alpha)/2) * sd(y)}
lci <- function(y,.alpha){mean(y) - qnorm(abs(.alpha)/2) * sd(y)}
ggplot(a, aes(x=x,y=y))  + stat_summary(fun.y = mean, geom = 'line', colour = 'blue') + 
            stat_summary(fun.y = mean, geom = 'ribbon',fun.ymax = uci, fun.ymin = lci, .alpha = 0.05, alpha = 0.5)

ここに画像の説明を入力

于 2012-08-20T07:05:48.203 に答える
4

ggplot2 0.9.3.1 を使用すると、次のことがうまくいきました。

ggplot(a, aes(x=x,y=y)) + geom_point() +
 stat_summary(fun.data = 'mean_sdl', mult = 1, geom = 'smooth')

'mean_sdl' は、Hmisc パッケージの関数 'smean.sdl' の実装であり、mult-variable は、表示される標準偏差 (平均の上下) の数を示します。

元の機能の詳細については、次を参照してください。

library('Hmisc')
?smean.sdl
于 2013-05-05T14:55:22.243 に答える
4

組み込みの集計関数のいずれかを使用できますmean_sdl。コードを以下に示します

ggplot(a, aes(x=x,y=y)) + 
 stat_summary(fun.y = 'mean', colour = 'blue', geom = 'line')
 stat_summary(fun.data = 'mean_sdl', geom = 'ribbon', alpha = 0.2)
于 2012-08-20T13:52:59.943 に答える
3

http://had.co.nz/ggplot2/stat_summary.htmlggplot2のWeb サイトで Hadley Wickham が提案した要約関数を作成してみてください。彼の提案をコードに適用する:

p <- qplot(x, y, data=a)

stat_sum_df <- function(fun, geom="crossbar", ...) { 
 stat_summary(fun.data=fun, colour="blue", geom=geom, width=0.2, ...) 
} 

p + stat_sum_df("mean_cl_normal", geom = "smooth") 

これにより、次の図が得られます。

ここに画像の説明を入力

于 2012-08-20T14:26:51.360 に答える