如何在R ggplot中绘制前2行与其他行的关系(饼图)

时间:2018-07-14 13:00:49

标签: r ggplot2

说,我有一个数据集,我在其中计算字母az的出现次数。 我想在R中绘制一个饼形图,其中显示了前2个计数与其他计数。我有以下代码生成数据集并计算字母a到z的出现次数。

library(dplyr)
set.seed(1)
dat <- data.frame(ID = sample(letters,100,rep=TRUE))
dat %>% 
  group_by(ID) %>%
  summarise(no_rows = length(ID))

它的输出看起来像这样:

   ID no_rows
1   a       2
2   b       3
3   c       3
4   d       3
5   e       2
6   f       4
7   g       6
8   h       1
9   i       6
10  j       5
11  k       6
12  l       4
13  m       7
14  n       2
15  o       2
16  p       2
17  q       5
18  r       4
19  s       5
20  t       3
21  u       8
22  v       4
23  w       5
24  x       4
25  y       3
26  z       1

排名前2的结果是第13 (no_rows=7)和21 (no_rows=8)行。因此,我的饼形图应该包含前2个(7+8=15)和其他(其余no_rows的总和)。

我是R和绘图的新手。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找类似以下的内容。要点是ungroup,以便对数据进行排序,然后arrange对所需的方式进行排序。然后,我使用了case_whenrow_number来给数据添加标签。然后ggplot馅饼。虽然我不喜欢饼图:)

library(dplyr)
set.seed(1)
dat <-  data.frame(ID = sample(letters,100,rep=TRUE), stringsAsFactors = FALSE)
dat %>% 
  group_by(ID) %>%
  summarise(no_rows = length(ID)) %>%
  ungroup %>%
  arrange(desc(no_rows) ) %>%
  mutate( label = case_when(row_number() <=  2 ~ ID, 
                            row_number() > 2 ~ 'all other')) ->
  data_to_plot

library(ggplot2)

ggplot(data_to_plot, aes(x=factor(1), fill=label))+
  geom_bar(width = 1)+
  coord_polar("y")

reprex package(v0.2.0)于2018-07-14创建。