【问题标题】:Issues with labels in ggplot bar chartggplot 条形图中的标签问题
【发布时间】:2020-05-29 11:59:21
【问题描述】:

我目前有一个结构为as below的数据框:

  Establishment.date Species  Shade.Tol         Ele    Kipuka
1                1980  PSEMEN Intolerant Under 1050m On Kipuka
2                1981  PINCON Intolerant Above 1050m On Kipuka
3                1981  ABIPRO Intolerant Under 1050m On Kipuka
4                1981  ABIPRO Intolerant Under 1050m On Kipuka
5                1981  ABILAS   Tolerant Above 1050m On Kipuka
6                1982  ABILAS   Tolerant Above 1050m On Kipuka
7                1983  PSEMEN Intolerant Under 1050m On Kipuka
8                1984  TSUHET   Tolerant Under 1050m On Kipuka
9                1984  TSUHET   Tolerant Under 1050m On Kipuka
10               1984  PSEMEN Intolerant Under 1050m On Kipuka
11               1984  PINCON Intolerant Under 1050m On Kipuka
12               1984  ABIPRO Intolerant Above 1050m On Kipuka
13               1984  ABIPRO Intolerant Above 1050m On Kipuka

我正在尝试制作一个条形图,以突出显示在高海拔和低海拔地区出现的设施数量,这些设施的数量由它们的阴影容差构成,并将每个类别的数量显示为标签。我目前的方法是过滤数据框以获得新的汇总数据框,如下所示as below

# A tibble: 9 x 4
# Groups:   Establishment.date, Shade.Tol [7]
  Establishment.date Shade.Tol  Ele         count
               <int> <fct>      <fct>       <int>
1               1980 Intolerant Under 1050m     1
2               1981 Intolerant Above 1050m     1
3               1981 Intolerant Under 1050m     2
4               1981 Tolerant   Above 1050m     1
5               1982 Tolerant   Above 1050m     1
6               1983 Intolerant Under 1050m     1
7               1984 Intolerant Above 1050m     2
8               1984 Intolerant Under 1050m     2
9               1984 Tolerant   Under 1050m     2

并将新信息绘制到 ggplot 中,如下所示:

cores_clean %>%
  group_by(Establishment.date,Shade.Tol,Ele) %>%
  summarise(count = n()) %>%
ggplot(aes(x = Ele, y=count, label=count)) +
  geom_bar(stat = "identity",position = "dodge") +
  geom_text(aes(label=count),size = 3)+
  facet_wrap(~ Shade.Tol)+
  #scale_fill_grey()+
  theme_bw() + 
  labs(x = "Elevation Range",
       y = "Count",
       title = "Establishments")+
  theme(plot.title = element_text(hjust = 0.5))

但是当我运行代码时,图形输出会打印出如下堆叠的一行值,

不代表在数据框中找到的那些 (n=740)。我尝试添加geom_text(aes(label=sum(count))),但打印的数字位置相同,并且观察的总数重复了多次。不确定我是否错误地过滤了数据或没有正确地将其添加到 ggplot。

【问题讨论】:

  • 请包含您的数据,例如发布cores_clean %&gt;% group_by(Establishment.date,Shade.Tol,Ele) %&gt;% summarise(count = n()) %&gt;% dput 的输出
  • @Roman 我将输出发布为图像,其中显示“新汇总数据框”。如果这就是您的意思,我不确定如何在此处上传 csv 文件
  • 数据集的图像没有那么有用。将@Roman 中的代码输入到控制台,它应该会为您提供以structure(... 开头的输出。将该输出作为代码直接复制并粘贴到您的问题中。它将允许其他人复制和粘贴该代码以重新创建您的精确数据框。

标签: r ggplot2


【解决方案1】:

您的主要问题是您group_by(Estabilishment.date),但您似乎甚至不希望在您的图表中出现。这是一个使用stat_summary 计算总和的选项:

cores_clean %>%
  group_by(Establishment.date,Shade.Tol,Ele) %>%
  dplyr::summarise(count = n()) %>%
ggplot(aes(x = Ele, y=count, fill = as.factor(Establishment.date))) +
  geom_bar(stat = "identity") +
  stat_summary(geom = "text", aes(label = ..y.., group = Ele),
               fun = sum, vjust = -0.1) + 
  facet_wrap(~ Shade.Tol) +
  theme_bw() + 
  labs(x = "Elevation Range", y = "Count",
       title = "Establishments", fill = "Year")+
  theme(plot.title = element_text(hjust = 0.5))

或者,您可以从您的 group_by 中删除 Estabilishment.date 并执行以下操作:

cores_clean %>%
  group_by(Shade.Tol,Ele) %>%
  dplyr::summarise(count = n()) %>%
ggplot(aes(x = Ele, y=count)) +
  geom_bar(stat = "identity") +
  stat_summary(geom = "text", aes(label = ..y.., group = Ele),
               fun = sum, vjust = -0.1) + 
  facet_wrap(~ Shade.Tol) +
  theme_bw() + 
  labs(x = "Elevation Range", y = "Count",
       title = "Establishments")+
  theme(plot.title = element_text(hjust = 0.5))

【讨论】:

  • 第二个情节完美!问题肯定是按建立分组。年份,我认为汇总(计数)无论如何都会将所有值加在一起。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-07-24
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多