2017-02-23 25 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

這是你以後在做什麼?我第一次用計算使用geom_segmentdplyr包,然後添加線段到您的情節組級別意味着:

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

我不能完全肯定我理解正確,你的問題。在我看來,除了氣泡之外,您還想將每個值爲xy的平均值視爲某種條形圖。 (你提到了錯誤條,但似乎這不是要求,而只是你的嘗試,我將用geom_col()代替。)

我假設你想用計數來權衡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 

當創建的情節,我用data2作爲數據geom_point()data2_mean的數據geom_col()做設定。首先放置酒吧很重要,因爲泡沫應該位於酒吧的頂部。

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