在Facet Plot中按y值排序

时间:2016-11-15 11:35:47

标签: r ggplot2

考虑以下data.frame

RANK_GROUP <- as.factor(c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))
CHANNEL_CATEGORY <- as.factor(c(1,  2,  10, 15, 17, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 43, 44, 1,  2,  10, 15, 17, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 43))
CATEGORY_COUNT <- c(105, 23, 417, 10, 58, 6, 535, 211, 215, 465, 28, 273, 70, 47, 7,1,21,3,69, 14, 493, 3, 44, 3, 516, 162, 253, 516, 24, 228, 64, 59, 2, 45)

data <- data.frame(RANK_GROUP, CHANNEL_CATEGORY,CATEGORY_COUNT)

我想为每个发行版创建一个带有条形图的Facet-Plot:

ggplot(data = data) +
  aes(x=CHANNEL_CATEGORY, y = CATEGORY_COUNT) +
  geom_bar(stat="identity", position ="dodge", colour="black") +
  facet_grid(. ~ RANK_GROUP)

Plot

如何根据每个方面的y值来订购图?

1 个答案:

答案 0 :(得分:1)

接受了食谱的帮助,

library(dplyr)

pd <- data %>%
      group_by(RANK_GROUP) %>%
      top_n(nrow(data), abs(CATEGORY_COUNT)) %>% 
      ungroup() %>%
      arrange(RANK_GROUP, CATEGORY_COUNT) %>%
      mutate(order = row_number())

 pd$order <- as.factor(pd$order)

ggplot(data = pd) +
  aes(x=order, y = CATEGORY_COUNT) +
  geom_bar(stat="identity", position ="dodge", colour="black") +
  facet_grid(. ~ RANK_GROUP)+
  scale_x_discrete(labels = CHANNEL_CATEGORY , breaks = order)+
 theme(axis.text.x = element_text(angle = 60, hjust = .5, size = 8)) +
 labs(x="Channel")

enter image description here