2015-08-27 81 views
0

我有这个相当大的数据框,我想从中创建多面条形图。这一切都有效,但由于酒吧高度是从许多单独的值堆叠起来的,酒吧不再是纯色,而是由节段轮廓颜色支配。如何从条形图中删除条形轮廓线?

数据帧看起来像这样:

> head(alldata[c("unit.size", "bppmbp")]) 
    unit.size  bppmbp 
1   6 0.11927224 
2  10 0.11430256 
3   1 0.07951483 
4   7 0.09442386 
5  13 0.18884771 
6   8 0.09939353 

我要绘制bppmbp的总和为每个unit.size(unit.size变为从1到51)。

这是我的代码:

ggplot(data) + 
    aes(x=unit.size, y=bppmbp, fill=unit.size) + 
    geom_bar(stat="identity") 

结果看起来是这样的。左边的截图来自PDF输出,来自PNG输出的右边截图(好一点,但你仍然可以看到白色边框)。

Bar plot with messed up bars (PDF)Bar plot with messed up bars (PNG)

here我明白如何指定轮廓颜色,但我还没有找到如何完全删除大纲。我曾尝试将color="",color=NAcolor=element.empty()加到geom_bar(),但他们都没有。

我该如何去除那个轮廓并且有实心的条纹?也许把所有的价值都存起来,然后只是绘制仓位数字?我希望有一个更简单的解决方案。

+2

先尝试汇总数据,而不是依赖ggplot中的堆栈。 – joran

+0

谢谢;你可能是对的。我添加了一大块数据,但我想这个问题应该是“我怎样才能聚合这个数据框,所以ggplot不会造成难看的堆栈”。 – mpe

+0

有无数的方法来聚合R中的数据,并且互联网上有无数的资源来解释如何。开始查看'聚合'或像** plyr **,** dplyr **或** data.table **这样的软件包。 – joran

回答

1

有了这样的示例数据帧:

x group subject 
1 50 test  1 
2 52 test  1 
3 23 test  1 
4 53 test  2 
5 23 test  2 
6 53 test  2 
7 62 control  3 
8 63 control  3 
9 36 control  3 
10 57 control  4 
11 58 control  4 
12 58 control  4 

library(Rmisc);library(ggplot2) 
dfc_subjects<- summarySE(df,measurevar = "x",groupvars = c("subject","group")) 
dfc_subjects 
    subject group N x   sd   se  ci 
1  1 test 3 41.66667 16.1967075 9.3511734 40.234852 
2  2 test 3 43.00000 17.3205081 10.0000000 43.026527 
3  3 control 3 53.66667 15.3079500 8.8380491 38.027056 
4  4 control 3 57.66667 0.5773503 0.3333333 1.434218 

聚集与个体对象,并减少在剧情该维度。

ggplot(dfc_subjects, aes(x=group, y=x, color=group)) + 
     geom_bar(stat="identity") 

enter image description here

你得到这个难看的东西。但如果你这样做

dfc_group<- summarySE(df,measurevar = "x",groupvars = "group") 
dfc_group 
    group N  x  sd  se  ci 
1 control 6 55.66667 9.93311 4.055175 10.42416 
2 test 6 42.33333 15.01555 6.130072 15.75785 

ggplot(dfc_group, aes(x=group, y=x, color=group)) + 
     geom_bar(stat="identity") 

你得到的东西是聚集在组而不是个别情况。

enter image description here

+0

谢谢,你的回答非常有帮助!我想这个问题应该少一些“我如何让ggplot少堆栈”以及更多“如何聚合我的数据框”。 'summarySE()'看起来不错,但我需要一个函数来根据另一个列求和。基本上,'聚合()'或什么的。我添加了我的data.frame的一个示例子集。尽管如此,仍接受 – mpe

+0

。感谢您付出的努力,向我展示了一种聚合我的数据的方式! – mpe

0

为了记录在案,我这是怎么使用aggregate()解决我的问题:

> data.aggregate = aggregate(alldata$bppmbp, by = list(alldata$unit.size), sum) 
> names(data.aggregate) = c("unit.size", "bppmbp") 

此总结取决于unit.size的bppmbp列,给了我一个更简洁的数据帧我可以绘制使用正常ggplot(...) + geom_bar(...)

> head(data.aggregate) 
    unit.size bppmbp 
1   1 87.30581 
2   2 89.60076 
3   3 701.26025 
4   4 94.01366 
5   5 49.36587 
6   6 203.07879 

> ggplot(tablata, aes(x=unit.size, y=bppmbp, fill=unit.size)) + 
    geom_bar(stat="identity") + 
    xlab("Unit length") + 
    ylab("bp/Mbp") 

Bar chart without stacking artifacts