首页 > 解决方案 > ggplot中的排序列

问题描述

我已经尝试过其他人的建议(ggplot中的 Order bar和ggplot2 bar graph 中的 Order Bars)来排序列,但我仍然无法得到它。

我有一个数据集,其中有一个名为“Zap”的列,其中包含我想要从最高出现计数到最少排序的值。这是我的 R 代码:

mydata %>% 
  group_by(Zap) %>% 
  summarize(count = n()) %>% 
  mutate(percent = count/sum(count)) %>% 
  ggplot(aes(x=Zap, y=count, fct_infreq(Zap))) +
  xlab("EA5 Zigbee Enabled")+
  geom_col() +
  geom_text(aes(label = paste0(round(100 * percent, 1), "%")), vjust = -0.25)

该代码实际上并没有重新排序任何东西。这就是我得到的(未排序)

在此处输入图像描述

我也试过这个:

mydata %>% 
  group_by(Zap) %>% 
  summarize(count = n()) %>% 
  mutate(percent = count/sum(count)) %>% 
  ggplot(aes(x=Zap, y=count)) +

  x=reorder(Zap,Zap, function(x)-count(x)) +

  xlab("EA5 Zigbee Enabled")+
  geom_col() +
  geom_text(aes(label = paste0(round(100 * percent, 1), "%")), vjust = -0.25)

但是这段代码给了我一个错误:

重新排序错误(Zap,Zap,函数(x)-count(x)):找不到对象“Zap”

任何想法我做错了什么?

标签: rggplot2

解决方案


您可以使用reorder(Zap, -count)x 变量的定义按其计数对 x 变量进行排序aes

mydata %>% 
  group_by(Zap) %>% 
  summarize(count = n()) %>% 
  mutate(percent = count/sum(count)) %>% 
  ggplot(aes(x=reorder(Zap, -count), y=count, fct_infreq(Zap))) +
  xlab("EA5 Zigbee Enabled")+
  geom_col() +
  geom_text(aes(label = paste0(round(100 * percent, 1), "%")), vjust = -0.25)

在此处输入图像描述

数据示例

mydata <- data.frame(Zap = c(rep("enabled",85*5),rep("enabled22",1*5),rep("disabled",14*5)))


推荐阅读