使用ggplot

时间:2017-02-23 18:50:43

标签: r ggplot2

我有一个包含大量重叠点的数据集,并使用ggplot创建一个气泡图来显示该数据。我需要在我的绘图上添加条形图,用于x轴上每个组的平均值(值可以是0,1或2)。我曾尝试使用geom_errorbar,但无法使用它来处理我的数据。任何帮助/建议将不胜感激。

以下是我的代码和生成类似虚假数据的脚本:

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))

1 个答案:

答案 0 :(得分:2)

我不完全确定我正确理解你的问题。在我看来,除了气泡之外,您还希望将y的每个值的x的平均值可视化为某种条形。 (你提到错误栏,但似乎这不是一个要求,而是你尝试过的。我将使用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