2016-04-29 5 views
1

このanswerに表示されるggplot-basedboxplotをどのように再現することができますか?base R boxplot functionを使用しますか? x-axis上のグループが互いに離間されている場合、それは素晴らしいことだベースR関数を使用した複数の因子ラベルのboxplot

d<-data.frame(x=rnorm(1500),f1=rep(seq(1:20),75),f2=rep(letters[1:3],500)) 
# first factor has 20+ levels 
d$f1<-factor(d$f1) 
# second factor a,b,c 
d$f2<-factor(d$f2) 

boxplot(x~f2*f1,data=d,col=c("red","blue","green"),frame.plot=TRUE,axes=FALSE) 

:上記のリンクから

サンプル日付。

私はggplot2についての知識が限られています。

EDIT

ベースRの機能を使用して、より提案を待っている間、私はggplot2でいくつかの進歩を遂げています。

このサンプルデータを使用して、上のリンクのように整列したx-axisのプロットを作成するにはどうすればよいですか?あなたはatオプションを使用して、箱の場所を指定することができます

library(ggplot2) 
ggplot(dat3, aes(x = ID, y = value, group=interaction(obs, ID), fill=obs)) + 
    geom_boxplot() + 
    scale_fill_manual(values = c("yellow", "orange")) 


    dat3=structure(list(values = c(0, 0, 0, 0, 0, 0, 0, 0, -0.0169491525423729, 
0, 0, 0, 0, 1, 1, 0.64367816091954, 0.64367816091954, 0, 0, -0.0163934426229508, 
-0.021978021978022, 0.109195402298851, 0, 0, 0, 0, 0.207650273224044, 
0.4375, 0, 0, 0, 0, 0.302325581395349, 0.303370786516854, 0.270588235294118, 
-0.0188679245283019, 0.156462585034014, 0.092436974789916, 0.69, 
-0.021978021978022, 0.64367816091954, 0.614906832298137, 0.612903225806452, 
0.274853801169591, 0, 0.303370786516854, 0, 0, -0.03125, 0.229813664596273, 
0.557142857142857, 0, 0.109195402298851, 0.0746268656716418, 
0.180616740088106, 0.210526315789474, 0.310344827586207, 1, 1, 
0.0825688073394495, 0.294117647058824, 0, 0.4375, 0, 0.230769230769231, 
0.347826086956522, -0.0163934426229508, 0.156462585034014, 0, 
0, 0, 1, 0, 0, 0, 0.483333333333333, 0.483333333333333, 0, 0, 
0, 0, 0, -0.0169491525423729, 0, 0.310344827586207, 0, 0.296875, 
0.302325581395349, 0, 0, 0, 0, 0, 0, 0.482758620689655, 0, 0, 
0, 0, 0, 0, 0, 0, 0.150684931506849, 0.150684931506849, 0, 0, 
-0.021978021978022, -0.021978021978022, 0.270588235294118, 0, 
0, 0.482758620689655, 0.482758620689655, 0.272727272727273, 0.272727272727273, 
0, 1, 0, 0, 0.642857142857143, 0.211864406779661, 0.156462585034014, 
-0.0449438202247191, -0.0449438202247191, 0.389763779527559, 
0.389763779527559, -0.021978021978022, 0.211864406779661, 0.213197969543147, 
0.213197969543147, 0.358620689655172, -0.0163934426229508, 0.483333333333333, 
0, 0, 0.362139917695473, 0.362139917695473, 0.261904761904762, 
0.483333333333333, 1, 1, 0.236453201970443, 0.302325581395349, 
0.310344827586207, 1, 1, 0.358974358974359, 0.358974358974359, 
-0.0606060606060606, 0.0721649484536082, 0.615384615384615, 0.615384615384615, 
0.347826086956522, 1, 0, 0, 0, -0.0273972602739726, -0.0273972602739726, 
-0.0169491525423729, -0.0256410256410256, 0.107142857142857, 
0.107142857142857, 0.302325581395349, -0.0163934426229508, -0.0264900662251656, 
0.311111111111111, 0.311111111111111, 0.156462585034014, 0.156462585034014, 
-0.0483091787439614, 0.311111111111111, -0.0333333333333333, 
-0.0333333333333333, 0.311111111111111), ind = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), .Label = c("ETS", 
"ETS.1", "ETS.2", "ETS.3", "ETS.4", "ETS.5", "ETS.6", "ETS.7" 
), class = "factor"), ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), .Label = c("4", "5", 
"6", "7", "8", "9", "10", "11"), class = "factor"), obs = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("obs", 
"capa"), class = "factor")), .Names = c("values", "ind", "ID", 
"obs"), row.names = c(NA, 176L), class = "data.frame") 
+0

ggplotコードは、リンク内の答えです。 baseplot関数は上のコードで与えられています。もう何が問題なの? –

+1

@AdamQuek - 他の質問での回答の著者として、それは実際にggplotと完全には一致しません。ボックスのグループは、OP要求としてx軸に沿ってグループ化されません。 – thelatemail

答えて

4

次は私の正確なアライメントを(:8、各グループの中央に整列私は数字1が必要)与えるものではありません。

set.seed(1) 
d<-data.frame(x=rnorm(1500),f1=rep(seq(1:20),75),f2=rep(letters[1:3],500)) 
# first factor has 20+ levels 
d$f1<-factor(d$f1) 
# second factor a,b,c 
d$f2<-factor(d$f2) 
boxplot(x~f2*f1,data=d, at = (1:80)[-4*(1:20)], col=c("red","blue","green"),frame.plot=TRUE,axes=FALSE) 
axis(1,at=seq(2,80,4),labels=1:20,cex.axis=0.7) 

enter image description here

+0

回答に返信してくれてありがとう。あなたが提供したソリューションにはまだいくつかの問題があります。軸には、ggplot2ソリューションとは異なり、各グループに対して3ティックがあります。また、あなたのコードと一緒に 'axis(1、at = seq(2,60,3)、labels = 1:20、cex.axis = 0.7)'を実行すると、ラベルがずれることになります。ボックスの間隔の回避策を提供します。 labels = c( "Jan"、 "Feb")などの軸ラベルはどうですか? – code123

+0

@ code123私の例では、正しいラベルを得るために 'axis(1、at = seq(2,80,4)、labels = 1:20、cex.axis = 0.7)'を使います。私は自分の答えを変更しました。 –

+0

偉大な答え。とても有難い。私はウェブを検索しましたが、これに関する洞察は見つかりませんでした。 – code123

関連する問題