2017-02-23 9 views
1

重複する点が多いデータセットがあり、そのデータを表示するバブルプロットを作成するためにggplotを使用しました。私はx軸上の各グループの手段のために私のプロットに棒を追加する必要があります(値は0,1,2)。私はgeom_errorbarを使用しようとしましたが、データで動作させることができませんでした。どんな助力/提案も非常に高く評価されるでしょう。バブルプロットのグループごとの平均値(ggplotを使用)

次は私のコードと似ている偽のデータを生成するためのスクリプトです:

y <- seq(from=0, to=3.5, by=0.5) 
x <- seq(from=0, to=2, by=1) 
xnew <- sample(x, 100, replace=T) 
ynew <- sample(y, 100, replace=T) 
data <- data.frame(xnew,ynew) 

data2 <- aggregate(data$xnew, by=list(x=data$xnew, y=data$ynew), length) 
names(data2)[3] <- "Count" 

ggplot(data2, aes(x = x, y = y)) + 
    geom_point(aes(size=Count)) + 
    labs(x = "Copies", y = "Score") + 
    aes(ymax=..y.., ymin=..y..) + 
    scale_x_continuous(breaks = seq(0, 2, 1)) + 
    scale_y_continuous(breaks = seq(0, 3, 0.5)) + 
    theme(legend.position = "bottom", legend.direction = "horizontal", 
    axis.line = element_line(size=1, colour = "black"), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    panel.background = element_blank(), 
    axis.text.x = element_text(colour="black", size = 10), 
    axis.text.y = element_text(colour="black", size = 10)) 

答えて

0

はあなたが後にしている何本か?私は、最初のグループレベルがdplyrパッケージを使用することを意味して計算して、geom_segmentを使用して、あなたのプロットにラインセグメントを追加しました:

library(ggplot2) 
library(dplyr) 
data2 <- data2 %>% group_by(x) %>% mutate(mean.y = mean(y)) 
ggplot(data2, aes(x = x, y = y)) + 
geom_point(aes(size=Count)) + 
labs(x = "Copies", y = "Score") + 
aes(ymax=..y.., ymin=..y..) + 
scale_x_continuous(breaks = seq(0, 2, 1)) + 
scale_y_continuous(breaks = seq(0, 3, 0.5)) + 
theme(legend.position = "bottom", legend.direction = "horizontal", 
    axis.line = element_line(size=1, colour = "black"), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    panel.background = element_blank(), 
    axis.text.x = element_text(colour="black", size = 10), 
    axis.text.y = element_text(colour="black", size = 10)) + 
geom_segment(aes(y = mean.y, yend = mean.y, x = x -0.25, xend = x + 0.25)) 
+0

これはまさに私がやろうとしていたものです。カウントオブジェクトが作成されたコードの部分に追加するだけでした。ありがとうございました! – Kimmy

0

私は私が正しくあなたの質問を理解していることを完全に確認していません。気泡に加えて、xの値ごとに平均値yをある種のバーとして視覚化したいと思うようです。あなたはエラーバーについて言及していますが、これは必須条件ではなく、あなたが試したものです。

平均をy以上とするといいと思います。 、sum(y * Count)/sum(Count)。あなたはdplyrを使用して、これらの値を含むデータフレームを作成することができます。

data2_mean 
## # A tibble: 3 × 2 
##  x  y 
## <dbl> <dbl> 
## 1  0 1.833333 
## 2  1 1.750000 
## 3  2 2.200000 

プロットを作成するときに、私はgeom_col()のデータセットとしてgeom_point()data2_meanに設定されたデータとしてdata2を使用しています。バブルはバーの上に置く必要があるので、バーを最初に置くことが重要です。

ggplot() + 
    geom_col(aes(x = x, y = y), data2_mean, fill = "gray60", width = 0.7) + 
    geom_point(aes(x = x, y = y, size = Count), data2) + 
    labs(x = "Copies", y = "Score") + 
    scale_x_continuous(breaks = seq(0, 2, 1)) + 
    scale_y_continuous(breaks = seq(0, 3, 0.5)) + 
    theme(legend.position = "bottom", legend.direction = "horizontal", 
    axis.line = element_line(size=1, colour = "black"), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    panel.background = element_blank(), 
    axis.text.x = element_text(colour="black", size = 10), 
    axis.text.y = element_text(colour="black", size = 10)) 

コードに比べて変更されたものは、scale_x_continuous()より前になります。これにより、次のプロットが生成されます。

enter image description here

+0

それは私が探していたものではありませんでした。私は平均ではるかに薄いバーが必要でした。あなたのご意見ありがとうございます。私はその提案を感謝します。 – Kimmy

関連する問題