【问题标题】:Add a text variable to each bar cluster in a ggplot bar chart向 ggplot 条形图中的每个条形簇添加一个文本变量
【发布时间】:2016-02-11 06:46:14
【问题描述】:

我有一些这样的数据:

site <- c('twitter', 'facebook', 'gplus')
bouncerate <- c(35, 29, 17)
conversionrate <- c(20, 30, 32)
users <- c(350, 800, 42)
df <- data.frame(site, bouncerate, conversionrate, users) %>% melt()

我是这样画的:

ggplot(subset(df, variable!='users'), aes(x=site, y=value)) + 
  geom_bar(stat="identity", aes(fill=variable), position="dodge") +
  coord_flip() +
  scale_fill_brewer(palette = "Set1”)

如您所见,我正在尝试绘制“速率”变量。但我还想将“用户”变量的值放在栏的右侧。它看起来像这样:

所以我的问题是,我如何获得这些用户数?我想也许 geom_label 可以做到这一点,但我看不到如何将标签的坐标与集群联系起来。

而且,虽然上面的示例没有显示,但如果用户数量最多的集群位于顶部,其余的则从那里下降,我会很高兴。

【问题讨论】:

  • 排序条(相当于排序你的轴)是an r-faq。只需使用 reorder() 重新排序您的因子。
  • 太棒了!我会努力的。我只是澄清了这个问题的文字,以确保我的主要问题是明确的。
  • 展示您的尝试也可能很好 - 就个人而言,我会用我想要绘制的数据构建一个数据框(一个名为 site 的因子与您的数据中的级别相同,并且名为label 的列,其中包含您要添加的文本)并使用geom_text

标签: r ggplot2


【解决方案1】:

这是geom_text的一种方式:

ggplot(subset(df, variable!='users'), aes(x=site, y=value)) + 
  geom_bar(stat="identity", aes(fill=variable), position="dodge") +
  coord_flip() +
  scale_fill_brewer(palette = "Set1") +
  geom_text(data=subset(df, variable=="users"), 
aes(x=site, y=40, 
label=paste("(", value ,"\n", variable, ")", sep = "")))

【讨论】:

  • 谢谢!完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 2019-09-05
  • 2019-06-21
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多