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