24

私は基本的な箱ひげ図をどこでやっていますy=agex=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で、は1番目のグループで、y = 30は〜グループの年齢平均です。構文がどれほど柔軟で豊富であるかを知ってggplot2いるので、よりも実際の統計出力を使用するよりエレガントな方法があることを望んでいましたannotate

任意の提案/リンクをいただければ幸いです!

ありがとう!!

4

3 に答える 3

36

これはあなたが求めているもののようなものですか?で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")

黒の数字は観測数、赤の数字は平均値です。joranの答えは、ボックスの上部に数字を配置する方法を示しています ここに画像の説明を入力してください

帽子のヒント:https ://stackoverflow.com/a/3483657/1036500

于 2013-03-27T14:32:19.917 に答える
18

これがあなたが探しているものだと思いますか?

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美しさのためにどの関数でも使用できることは明らかです。

于 2013-03-27T14:29:44.910 に答える
4

最初の問題に答えてください。xボックスの上に値を表示するには、レベル名ではなく数値として値を指定する必要があります。したがって、最初の値より上の値をプロットするには、を与えx=1ます。

data(ToothGrowth)
ggplot(ToothGrowth,aes(supp,len))+geom_boxplot()+
   annotate("text",x=1,y=32,label=30)
于 2013-03-27T14:11:44.210 に答える