私は_y=age
およびx=Patient groups
age <- ggplot(data, aes(factor(group2), age)) + ylim(15, 80)
age + geom_boxplot(fill = "grey80", colour = "#3366FF")
私はあなたがいくつかのことで私を助けてくれることを望んでいました:
1)ペイントでこれを行うことなく、各グループボックスプロットの上にグループごとにいくつかの観測値を含めることができます(ただし、グループラベルがあるX軸ではありません)?私は使用してみました:
age + annotate("text", x = "CON", y = 60, label = "25")
ここで、CON
は最初のグループであり、y = 60
は、このグループの箱ひげ図のすぐ上にあります。ただし、コマンドは機能しませんでした。 x
をカテゴリ変数ではなく連続変数として読み取ることが、何らかの処理があると思います。
2)また、箱ひげ図の中央値ではなく平均値を使用することについて多くの質問がありますが、私に役立つコードはまだ見つかりませんか?
3)同じ問題で、ボックスプロットに平均グループ統計を含める方法はありますか?おそらく
age + stat_summary(fun.y=mean, colour="red", geom="point")
ただし、平均値の位置のドットのみが含まれます。または再び使用
age + annotate("text", x = "CON", y = 30, label = "30")
ここで、CON
は最初のグループであり、y = 30
はグループの平均年齢です。柔軟性と豊かさを知るggplot2
構文は、annotate
ではなく実際の統計出力を使用するよりエレガントな方法があることを望んでいました。
どんな提案/リンクも大歓迎です!
ありがとう!!
これはあなたが望んでいるようなものですか? stat_summary
、要求どおり:
# function for number of observations
give.n <- function(x){
return(c(y = median(x)*1.05, label = length(x)))
# experiment with the multiplier to find the perfect position
}
# function for mean labels
mean.n <- function(x){
return(c(y = median(x)*0.97, label = round(mean(x),2)))
# experiment with the multiplier to find the perfect position
}
# plot
ggplot(mtcars, aes(factor(cyl), mpg, label=rownames(mtcars))) +
geom_boxplot(fill = "grey80", colour = "#3366FF") +
stat_summary(fun.data = give.n, geom = "text", fun.y = median) +
stat_summary(fun.data = mean.n, geom = "text", fun.y = mean, colour = "red")
黒の数字は観測数、赤の数字は平均値です。ジョランの答えは、ボックスの一番上に数字を置く方法を示しています
これがあなたが探しているものだと思いますか?
myboxplot <- ddply(mtcars,
.(cyl),
summarise,
min = min(mpg),
q1 = quantile(mpg,0.25),
med = median(mpg),
q3 = quantile(mpg,0.75),
max= max(mpg),
lab = length(cyl))
ggplot(myboxplot, aes(x = factor(cyl))) +
geom_boxplot(aes(lower = q1, upper = q3, middle = med, ymin = min, ymax = max), stat = "identity") +
geom_text(aes(y = max,label = lab),vjust = 0)
あなたが平均について尋ねていたとき、私は誤って中央値を使用したことに気づきましたが、middle
美学のためにどんな関数でも使用できることは明らかです。
最初の問題に答えてください。ボックスの上に値を表示するには、レベル名としてではなく数値としてx
値を指定する必要があります。したがって、最初の値より上の値をプロットするには、x=1
。
data(ToothGrowth)
ggplot(ToothGrowth,aes(supp,len))+geom_boxplot()+
annotate("text",x=1,y=32,label=30)