2017-11-24 19 views
4

私はRでグループ化されたboxplotを作成しようとしています。私は2つのグループを持っています:AとB、各グループに5つの測定値を持つ3つのサブグループがあります。Rでグループ化されたボックスプロットを作成するには?

次は私が箱ひげ図を構築方法ですが、誰かが行うには良い、短い、または簡単な方法を持っている場合はどのように正しく、私はグループ化することができ、私は

A1 <- c(1,2,9,6,4) 
A2 <- c(5,1,9,2,3) 
A3 <- c(1,2,3,4,5) 
B1 <- c(2,4,6,8,10) 
B2 <- c(0,3,6,9,12) 
B3 <- c(1,1,2,8,7) 

DF <- data.frame(A1, A2, A3, B1, B2, B3) 

boxplot(DF, col = rainbow(3, s = 0.5)) 
axis(side = 1, at = c(2,5), labels = c("A","B")) 
legend("topleft", fill = rainbow(3, s = 0.5), legend = c(1,2,3), horiz = T) 

enter image description here

を感謝しますAとBのボックスを(ジョイント)し、シンプルなAとBに軸のタイトルを固定します。

私は、データが長いフォーマットであるとき、それは副広いこのようなグループにそれらに簡単です

enter image description here

答えて

3

ような何かをしたいと思います。あなたのベクトルを皮切り:

DF2 <- data.frame(
    x = c(c(A1, A2, A3), c(B1, B2, B3)), 
    y = rep(c("A", "B"), each = 15), 
    z = rep(rep(1:3, each=5), 2), 
    stringsAsFactors = FALSE 
) 
str(DF2) 
# 'data.frame': 30 obs. of 3 variables: 
# $ x: num 1 2 9 6 4 5 1 9 2 3 ... 
# $ y: chr "A" "A" "A" "A" ... 
# $ z: int 1 1 1 1 1 2 2 2 2 2 ... 

cols <- rainbow(3, s = 0.5) 
boxplot(x ~ z + y, data = DF2, 
     at = c(1:3, 5:7), col = cols, 
     names = c("", "A", "", "", "B", ""), xaxs = FALSE) 
legend("topleft", fill = cols, legend = c(1,2,3), horiz = T) 

atを使用して手動で配置を制御するので、「視覚的なグループ分けは、」非常に堅牢ではありません。 (あなたはwidthおよび/またはboxwexでそれらの間の間隔を制御することができます。)

base R boxplot

をあなたはまたggplot2を選択する場合があります:

library(ggplot2) 
ggplot(DF2, aes(y, x, fill=factor(z))) + 
    geom_boxplot() 

ggplot boxplot

2

は、あなたが使用する必要がありますggplot2

ggplot() + 
    geom_boxplot(data = df, mapping = aes(col_name, value, fill=index)) + 
    theme(axis.text.x = element_blank()) + 
    geom_segment(data=hline1, mapping=aes(x=1, y=-0.5, xend=3, yend=-0.5), size=2) + 
    annotate("text", x = 2, y = -1, label = "A") + 
    geom_segment(data=hline1, mapping=aes(x=4, y=-0.5, xend=6, yend=-0.5), size=2) + 
    annotate("text", x = 5, y = -1, label = "B") 

enter image description here

関連する問題