将ggplot barplot x轴按降序排序(x轴上只有一个变量)

问题描述 投票:1回答:1

我有一个大的数据框(又称“ all_data”),这些单词以阿拉伯语音频的形式呈现给参与者,然后参与者必须从四个选项中进行选择,他们认为该单词的含义是英语。他们的选择记录在选择栏中,正确的答案应该在另外一个答案中:

Preview of my screen

[无论如何,我想在此“ all_data” df中添加一列,以显示其最频繁的响应,即使这不是目标词,但我也不知道该怎么做。因此,继续前进,我至少希望对其进行可视化,因此我创建了条形图,这样我就可以分别检查100个单词中的每个单词,以查看人们认为这个单词听起来是什么样子-因此,我过滤了有问题的单词(对每个我知道100个单词很乏味),然后将x轴设置为“选择”列,如下面的代码所示:

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

这会导致您在我显示的打印屏幕右下角看到的条形图。

我尝试了几件事来按频率顺序重新排列x轴,但没有任何效果!我已经搜索了所有与该问题类似的所有其他线程,但是它们都具有y轴以用于重新排序,而我没有这些轴,因此我总是会出错。

我知道从技术上讲,没有定义y轴,因此R会在x轴上创建自己的单词“计数”,但我似乎无法弄清楚如何在y中获得该计数的名称。如您在我上述多次尝试中所见。

无论如何,我只是以常规方式查看地块并做笔记,但是有什么人可以帮助解决我的任何问题吗?

非常感谢!

Ahsan

r ggplot2 bar-chart
1个回答
0
投票

最简单的方法是手动计算频率,例如通过countgroup_by + summarise并使用汇总df使用geom_col而非geom_bar进行绘图。然后,您可以通过例如简单地对Choice重新排序。 forcats::fct_reorder根据频率。使用一些随机样本数据来模拟您的数据集,请尝试以下操作:

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()

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLmltZ3VyLmNvbS9yNzBuVXlFLnBuZyJ9” alt =“”>

reprex package(v0.3.0)在2020-04-07创建

© www.soinside.com 2019 - 2024. All rights reserved.