使用 geom_bar 按列中一个特定值的计数对 y 轴进行排序

Meg*_*ole 2 r ggplot2 geom-bar

想知道如何通过减少猕猴桃的数量来对 y 轴上的簇进行排序?

df = data.frame()
df = data.frame(matrix(df, nrow=200, ncol=2))
colnames(df) <- c("cluster", "name")
df$cluster <- sample(20, size = nrow(df), replace = TRUE)
df$fruit <- sample(c("banana", "apple", "orange", "kiwi", "plum"), size = nrow(df), replace = TRUE)

p = ggplot(df, aes(x = as.factor(cluster), fill = as.factor(fruit)))+
  geom_bar(stat = 'count') + 
  theme_classic()+
  coord_flip() +
  theme(axis.text.y = element_text(size = 20),
        axis.title.x = element_text(size = 20),
        axis.title.y = element_text(size = 20),
        axis.text=element_text(size=20)) +
  theme(legend.text = element_text(size = 20)) +
  xlab("Cluster")+
  ylab("Fruit count") +
  labs( fill = "")
p
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

All*_*ron 5

我可能会在绘图之前将其作为数据操作来执行。注意,我已将 kiwi 移动到堆叠顺序中的第一个位置,这样我们就可以看到当我们向下移动 y 轴时,条形变小。

library(tidyverse)

df %>%
  mutate(cluster = factor(cluster, 
                          names(sort(table(fruit == 'kiwi', cluster)[2,]))),
         fruit = factor(fruit, c('kiwi', 'apple', 'banana', 
                                 'orange', 'plum'))) %>%
  ggplot(aes(x = cluster, fill = fruit))+
  geom_bar(position = position_stack(reverse = TRUE)) + 
  theme_classic()+
  coord_flip() +
  theme(axis.text.y = element_text(size = 20),
        axis.title.x = element_text(size = 20),
        axis.title.y = element_text(size = 20),
        axis.text=element_text(size=20)) +
  theme(legend.text = element_text(size = 20)) +
  scale_fill_manual(values = c('olivedrab', 'yellowgreen', 'yellow2', 
                               'orange2', 'plum4')) +
  xlab("Cluster")+
  ylab("Fruit count") +
  labs( fill = "")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述