如何从条形图中删除条形段轮廓?

How can I remove the bar segment outlines from a bar chart?

我有一个相当大的数据框,我想从中创建多面条形图。一切正常,但由于条形高度由许多单独的值堆叠而成,因此条形不再是纯色,而是以段轮廓颜色为主。

数据框如下所示:

> 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

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

这是我的代码:

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

结果是这样的。左图是PDF输出的,右图是PNG输出的(好一点,但还是能看到白边)。

来自 here 我知道如何指定轮廓颜色,但我还没有找到如何完全删除轮廓。我曾尝试将 color=""color=NAcolor=element.empty() 添加到 geom_bar(),但其中 none 确实如此。

如何删除该轮廓并获得实心条?也许对所有值进行 bin 并绘制 bin 总和?我希望有一个更简单的解决方案。

使用这样的示例数据框:

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

你得到了这个丑陋的东西。但如果你这样做

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

你得到的是整个组而不是个别案例的聚合结果。

郑重声明,这就是我使用 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")