2015-03-02 122 views
0

我想绘制一个带有点的“组合”条形图。 考虑到以下虚拟数据:组合条形图和ggplot2中的点

library(ggplot2) 
library(gridExtra) 
library(dplyr) 

se <- function(x){sd(x)/sqrt(length(x))} 

p1 <- ggplot(mtcars, aes(y=disp, x=cyl, fill=cyl)) 
p1 <- p1 + geom_point() + theme_classic() + ylim(c(0,500)) 

my_dat <- summarise(group_by(mtcars, cyl), my_mean=mean(disp),my_se=se(disp)) 

p2 <- ggplot(my_dat, aes(y=my_mean,x=cyl,ymin=my_mean-my_se,ymax=my_mean+my_se)) 
p2 <- p2 + geom_bar(stat="identity",width=0.75) +  geom_errorbar(stat="identity",width=0.75) + theme_classic() + ylim(c(0,500)) 

最后的情节看起来应该: example plot

回答

4

您可以添加图层在一起,但如果他们有不同的数据和/或美学你要包括每个图形层中的参数dataaes

p3 <- ggplot() + 
    geom_bar(data=my_dat, aes(y=my_mean,x=cyl,ymin=my_mean-my_se,ymax=my_mean+my_se), stat="identity", width = 0.75) + 
    geom_errorbar(data=my_dat, aes(y=my_mean,x=cyl,ymin=my_mean-my_se,ymax=my_mean+my_se), width = 0.75) + 
    geom_point(data=mtcars, aes(y=disp, x=cyl, fill=cyl)) + 
    ylim(c(0,500)) + 
    theme_classic() 

如果你想它,以便点是关闭的条边,你可以减去共青团值的偏移量在点移动。像@LukeA提到的那样,通过将geom_point更改为geom_point(data=mtcars, aes(y=disp, x=cyl-.5, fill=cyl))

+0

或'geom_point(数据= mtcars,AES(Y = DISP,X = CYL-.5,补= CYL))'以获得所需的偏移。 – lukeA 2015-03-02 21:05:35

1

您可以分别指定每个图层到ggplot2。通常,您对每个geom都使用相同的数据框和选项,因此在ggplot()中设置默认值是有意义的。在你的情况,你应该分别指定每个GEOM:

library(ggplot2) 
library(gridExtra) 
library(dplyr) 

se <- function(x){sd(x)/sqrt(length(x))} 
my_dat <- summarise(group_by(mtcars, cyl), 
        my_mean = mean(disp), 
        my_se = se(disp)) 
p1 <- ggplot() + 
    geom_bar(data = my_dat, 
      aes(y = my_mean, x = cyl, 
       ymin = my_mean - my_se, 
       ymax = my_mean + my_se), stat="identity", width=0.75) + 
    geom_errorbar(data = my_dat, 
       aes(y = my_mean, x = cyl, 
        ymin = my_mean - my_se, 
        ymax = my_mean + my_se), stat="identity", width=0.75) + 
    geom_point(data = mtcars, aes(y = disp, x = cyl, fill = cyl)) + 
    theme_classic() + ylim(c(0,500)) 

p1