I have a dataframe text
with count n
of word
appearing in each file file_num = 1 or 2 or 3
. I would like to use ggplot to generate three subplots, one for each value of file_num
, with word
on the y-axis and the frequency n
on x-axis. I want each sub-plot to be sorted according to increasing or decreasing value of n
observed withing each file_num
. I have tried many different ways to solve this seemingly trivial issue but have not been successful.
Here is dput
of my test data:
structure(list(file_num = c("1", "1", "1", "1", "2", "2", "2",
"2", "2", "3", "3", "3", "3", "3"), word = c("test", "quality",
"page", "limit", "information", "limit", "test", "instruments",
"quality", "limit", "test", "effective", "page", "system"), n = c(5,
35, 55, 75, 20, 30, 40, 60, 70, 101, 201, 301, 401, 501)), class = c("spec_tbl_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -14L), spec = structure(list(
cols = list(file_num = structure(list(), class = c("collector_character",
"collector")), word = structure(list(), class = c("collector_character",
"collector")), n = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))
Here is what I have tried:
library(tidytext)
library(stringr)
library(pdftools)
library(dplyr)
library(purrr)
library(ggplot2)
library(forcats)
text %>% group_by(file_num) %>% arrange(file_num, desc(n)) %>%
ggplot(.,aes(factor(word,levels = unique(word)), n, fill = file_num)) +
geom_bar(stat = "identity", position = "dodge") +
scale_x_discrete("Word") +
scale_y_continuous("n") + coord_flip() +
facet_grid(rows = vars(file_num), scales = "free")
Here is the plot that is generated using the above code on dataframe text
created using the dput
data. It shows the desired result (word
sorted with increasing value of n
) for file_num = 1, but not for file_num = 2 or 3: