如何用ggplot stat_summary来表示两个colsums?

时间:2016-11-11 18:59:19

标签: r ggplot2

我认为R为设计工具设计的工具是ggplot2 stat_summary所以我拒绝barplot因为身体中的链接线程。

这里的问题是R表结构的声明,我认为分别为ECG 1ECG 2的列标题为M.1.sumM.2.sum。 我试着用means.long <- melt(M.1.sum, M.2.sum)来做。 我认为,每个项目M.1.sumM.2.sumids中都有相应的行方式ID,这些ID也应包含在数据结构中。 我对其表列和行声明的建议是aes(x=ids, y=value),其中value是关于ggplot声明中的总和。 代码

library('ggplot2')
library('reshape2')

M <- structure(c(-0.21, -0.205, -0.225, -0.49, -0.485, -0.49, 
   -0.295, -0.295, -0.295, -0.56, -0.575, -0.56, -0.69, -0.67, 
   -0.67, -0.08, -0.095, -0.095), .Dim = c(3L, 6L))
M2 <- structure(c(-0.121, -0.1205, -0.1225, -0.149, -0.485, -0.49, 
   -0.295, -0.295, -0.295, -0.56, -0.1575, -0.56, -0.69, -0.67, 
   -0.117, -0.08, -0.1095, -0.1095), .Dim = c(3L, 6L))

ids <- seq(1,6)    
M.1.sum <- colSums(M)
M.2.sum <- colSums(M2)

# http://stackoverflow.com/q/22305023/54964
means.long <- melt(M.1.sum, M.2.sum)
ggplot(means.long, aes(x=ids, y=value ))+ # ,fill=factor(ids))) + 
  stat_summary(fun.y=mean, geom="bar",position=position_dodge(1)) + 
  scale_fill_discrete(name="ECG",
                      breaks=c(1, 2),
                      labels=c("1", "2"))+
  stat_summary(fun.ymin=min,fun.ymax=max,geom="errorbar",
               color="grey80",position=position_dodge(1), width=.2) + 
  xlab("ID")+ylab("Sum potential")

#deprecated because stat_summary designed for the case
#barplot(M.1.sum, ids)
#barplot(M.2.sum, ids)

输出看起来不正确

enter image description here

预期输出:6x两列并排,两个项目的图例

不确定如何使用此fill=factor(ids))),因为我没有在表格中标记任何列。 你怎么能更好地摆好桌子呢?

R:3.3.1
操作系统:Debian 8.5

1 个答案:

答案 0 :(得分:3)

对于ggplot,必须有一个数据框,其中包含所有内容(至少对于单个绘图层,例如,绘图中的所有条形图)。您创建列总和的数据框,然后尝试使用外部向量作为id和分组,这使事情变得困难。

我就是这样做的:

means = rbind(
    data.frame(mean = colSums(M), source = "M", col = 1:ncol(M)),
    data.frame(mean = colSums(M2), source = "M2", col = 1:ncol(M2))
)

means$col = factor(means$col)
## one nice data frame with everything needed for the plot    
means
#       mean source col
# 1  -0.6400      M   1
# 2  -1.4650      M   2
# 3  -0.8850      M   3
# 4  -1.6950      M   4
# 5  -2.0300      M   5
# 6  -0.2700      M   6
# 7  -0.3640     M2   1
# 8  -1.1240     M2   2
# 9  -0.8850     M2   3
# 10 -1.2775     M2   4
# 11 -1.4770     M2   5
# 12 -0.2990     M2   6

ggplot(means, aes(x = col, y = mean, fill = source)) +
    geom_bar(stat = 'identity', position = 'dodge')

enter image description here

您似乎也想要错误栏。我不知道什么会定义这些错误栏 - 如果你看geom_errorbar它会期望美学yminymax。如果您计算所需的任何值并将其作为列添加到上面的数据框中,则应将错误栏添加到绘图中。