Сортировка ggplot barplot по оси x в порядке убывания (только одна переменная по оси x) - PullRequest
1 голос
/ 07 апреля 2020

У меня есть большой фрейм данных (AKA "all_data") слов, которые были представлены в виде аудиозаписи Arabi c участникам, которые затем должны были выбрать один из четырех вариантов того, что, по их мнению, означало слово в английском Engli sh. Их выбор записан в столбце выбора, и правильный ответ должен быть в другом:

Предварительный просмотр моего экрана

В любом случае, я хотел добавьте столбец к этой "all_data" df, который показывает их наиболее частый ответ, даже если это не целевое слово, но я не мог понять, как это сделать. Итак, двигаясь дальше, я по крайней мере хотел визуализировать это, поэтому я создал столбцы, чтобы я мог по отдельности проверить каждое из 100 слов, чтобы увидеть, как люди думают, что это слово звучит - так что я отфильтровал рассматриваемое слово (делая это для каждого из 100 слов - это утомительно, я знаю), а затем сделал ось X столбцом «Выбор», как вы можете видеть в коде ниже:

ggplot(filter(all_data, Correct == "Stormy"), aes((Choice))) + geom_bar()

Это приводит к гистограмме, которую вы видите в правом нижнем углу экран печати, который я показал.

Я попробовал несколько вещей, чтобы переставить ось X в порядке частоты, но ничего не получалось! Я искал во всех других потоках, похожих на этот вопрос, но все они имеют ось Y для использования в переупорядочении, которого у меня нет, и поэтому я всегда получаю ошибки.

Я понимаю, что технически не существует определенной оси Y, поэтому R создает свой собственный «подсчет» слов на оси X, но я не могу понять, как получить имя для этого Посчитайте по оси Y, как вы можете видеть в моих многочисленных попытках выше.

В любом случае, после всего того, что я просто просматривал свои графики обычным способом и делал заметки, но есть ли что-нибудь, что можно сделать, чтобы помочь с любой из моих проблем?

Очень ценится!

Асан

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Спасибо всем.

Приведенные выше ответы, вероятно, сработали бы очень хорошо, но я решил, что проще всего было бы:

install.packages("forcats")
library(forcats)
ggplot(filter(all_data, Correct == "Rage"), aes(fct_infreq(factor(Choice)))) + geom_bar()

Большое спасибо всем за все ваша помощь!

0 голосов
/ 07 апреля 2020

Самый простой способ - вычислить частоту вручную, например, с помощью count или group_by + summarise и использовать агрегированный df для построения графика, используя geom_col вместо geom_bar. Затем вы можете просто изменить порядок Choice, например, forcats::fct_reorder в соответствии с частотой. Используя некоторые случайные выборочные данные для имитации c вашего набора данных, попробуйте следующее:

library(ggplot2)
library(dplyr)
library(forcats)

set.seed(42)

all_data <- data.frame(
  Choice = sample(c("Painful", "Shook", "Humilation"), 30, replace = TRUE),
  Correct = sample(c("Stormy", "Truth"), 30, replace = TRUE)
)

# Unordered bar plot
#ggplot(filter(all_data, Correct == "Stormy"), aes((Choice))) + geom_bar()

# Ordered bar plot
all_data %>%
  filter(Correct == "Stormy") %>% 
  count(Choice) %>% 
  ggplot(aes(forcats::fct_reorder(Choice, desc(n)), n)) + 
  geom_col()

Создано в 2020-04-07 по представ пакет (v0.3.0)

...