删除堆栈每一层上的geom_text标签

时间:2018-11-13 13:24:01

标签: r ggplot2

我有以下要制作ggplot的data.frame:

> topmicegrn
Topic Antigen           n    tc
    0     BCP 0.350533878 25193
    0     HEL 0.344341682 25193
    0     OVA 0.194974795 25193
    0     RSV 0.110149645 25193
    1     BCP 0.453020134   298
    1     HEL 0.228187919   298
    1     OVA 0.318791946   298
   10     BCP 0.979310345   145
   10     OVA 0.013793103   145
   10     HEL 0.006896552   145
...

情节看起来像这样的atm:

ggplot(topmicegrn, aes(Topic, n, label=tc)) +
  geom_bar(stat = "identity", aes(fill = Antigen)) +
  geom_text(stat='identity', position = 'stack') + 
  scale_fill_brewer(palette="YlGnBu") +
  coord_flip() 

Link to plot

现在,我想仅在每个小节的末尾保留“ tc”标签(因此,每个“主题”保留一个标签),并消除每个堆栈上的标签。我尝试使用geom_text(aes(group=Topic)),但结果与图相同。

此外,并非每个“主题”都包含每个“抗原”,而且顺序也很混乱(“主题”列是我按特定顺序排序的一个因素),因此使用these solutions不起作用为了我。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

数据集不完整,但这可能有效。 您似乎在跨行重复了tc,因此需要过滤掉重复项。 您可以通过仅使用该数据创建另一个更简单的数据框来做到这一点

这是一种实现方式:

library(tidyverse)
topmicegrn <-
  read.table(text=
             "Topic Antigen           n    tc
0     BCP 0.350533878 25193
0     HEL 0.344341682 25193
0     OVA 0.194974795 25193
0     RSV 0.110149645 25193
1     BCP 0.453020134   298
1     HEL 0.228187919   298
1     OVA 0.318791946   298
10     BCP 0.979310345   145
10     OVA 0.013793103   145
10     HEL 0.006896552   145",
           header = T, stringsAsFactors = F)

topmicegrn_tc <-
  topmicegrn %>% 
  group_by(Topic) %>% 
  summarise(tc = max(tc))

ggplot(topmicegrn, aes(Topic, n)) +
  geom_bar(stat = "identity", aes(fill = Antigen)) +
  scale_fill_brewer(palette="YlGnBu") +
  coord_flip() +
  geom_text(data = topmicegrn_tc,
            aes(x= Topic, y = 1, label= tc),
            stat='identity', hjust = 1) 

reprex package(v0.2.1)于2018-11-13创建