【问题标题】:R: ggplot2 - Label prints every row like a blur, instead of just the sum of the valuesR:ggplot2 - 标签像模糊一样打印每一行,而不仅仅是值的总和
【发布时间】:2015-02-07 21:23:08
【问题描述】:

我只需要将“会话”的总和放在每个栏的顶部。但我只是得到这个:

这是我的代码:

ggplot(VisitasData, aes(factor(Fuentes), sessions, fill = Fuentes)) + 
        geom_bar(stat="identity", position = "dodge") +
        geom_text(aes(label = comma(sessions)), position=position_dodge(width=0.9), vjust=-0.25) +
        scale_fill_manual(breaks = c("0", "1", "3", "6", "9"),
                          labels = c("Directo", "Email", "References",
                                     "SEO", "Social Media"),
                          values = c("#E69F00", "#56B4E9", "#009E73", 
                                     "#F0E442", "#0072B2"))

【问题讨论】:

  • 你能给我们看看你的数据样本吗?

标签: r ggplot2


【解决方案1】:

如果没有看到您的数据,我无法确定,但以下是正在发生的事情,并附有一些虚假数据:

# Fake data
set.seed(23)
dat = data.frame(cat=rep(LETTERS[1:3], each=4), value=sample(100:1000, 12))

   cat value
1    A   619
2    A   300
3    A   398
4    A   738
5    B   835
6    B   479
7    B   962
8    B   974
9    C   850
10   C   988
11   C   871
12   C   724

# Analogous to your plot
ggplot(dat, aes(cat, value, fill=cat)) +
  geom_bar(stat="identity", position="dodge", alpha=0.25) + 
  geom_text(aes(label=value))

上面发生的情况是ggplot 为每一行数据添加了一个条形。结果,由于alpha=0.25 参数使条形透明,因此您可以看到四个条形图被重叠绘制。 ggplot 这样做是因为 stat="identity" 告诉 ggplot 按原样获取数据而不应用任何转换。但是没有stat="identity"geom_bar 会抛出一个错误,因为geom_bar 的默认statstat="bin"(意思是创建行数的直方图)并且您不能将变量映射到y 和也可以使用stat="bin"(而且直方图也不是你想要的)。

相反,您需要告诉ggplot 首先对每个类别中的值求和,然后绘制总和。例如:

ggplot(dat, aes(cat, value, fill=cat)) +
  stat_summary(fun.y=sum, geom="bar", position="dodge") + 
  stat_summary(fun.y=sum, geom="text", aes(label=..y..))

您还可以在ggplot 之外创建摘要数据框,然后将摘要数据框提供给ggplot。然后你会使用geom_bar(stat="identity") 来获得你想要的条形图。

【讨论】:

  • 谢谢@eipi10,我从 dplyr 做了一个总结,然后绘制图表。再次感谢。
猜你喜欢
  • 2021-11-20
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多