1

我的数据如下所示:

> str(bigrams_joined)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   71319 obs. of  2 variables:
 $ line   : int  1 1 1 1 1 1 1 1 1 1 ...
 $ bigrams: chr  "in practice" "practice risk" "risk management" "management is"

我想将数据集中前 10 个或 15 个最常出现的二元组绘制到 ggplot2 中的条形图上,并让条形图与 y 轴上的标签水平运行。

非常感谢您对此的任何帮助!

谢谢

4

2 回答 2

1

看起来你需要count()你的二元组(来自 dplyr),然后你需要在你的情节中订购它们。这些天来,我更喜欢使用fct_reorder()来自 forcats 之类的东西。

library(janeaustenr)
library(tidyverse)
library(tidytext)

data_frame(txt = prideprejudice) %>%
    unnest_tokens(bigram, txt, token = "ngrams", n = 2) %>%
    count(bigram, sort = TRUE) %>%
    top_n(15) %>%
    ggplot(aes(fct_reorder(bigram, n), n)) +
    geom_col() +
    coord_flip() +
    labs(x = NULL)
#> Selecting by n

reprex 包(v0.2.0)于 2018 年 4 月 22 日创建。

于 2018-04-22T20:58:57.877 回答
1

你可以像这样,dplyr 的top_n 函数来过滤前 15 个二元组 + ggplot 来绘制它们。

library(dplyr)
library(ggplot2)


bigrams_joined %>%
  top_n(15, bigrams) %>% 
  ggplot(aes(bigrams)) + 
  geom_bar() +  
  coord_flip()

或订购:

bigrams_joined %>%
  group_by(bigrams) %>% 
  mutate(n = n()) %>% 
  ungroup() %>% 
  top_n(15, bigrams) %>% 
  mutate(bigrams = reorder(bigrams, n)) %>%
  ggplot(aes(bigrams)) + 
  geom_bar() +
  coord_flip()
于 2018-04-20T11:33:16.307 回答