在ggplot2中以升序绘制由另一个变量分组的变量的级别

时间:2017-09-28 03:41:08

标签: r ggplot2

我想按变量的级别按升序排列条形图。其他帖子herehere无效。

这是一个示例数据

x <- c(rep(letters[1:2], each = 6))
y <- c(rep(letters[3:8], times = 2))
z <- c(2, 4, 7, 5, 11, 8, 9, 2, 3, 4, 10, 11)
dat <- data.frame(x,y,z)

我想要实现的是按照递增的顺序绘制yx分组的级别的条形图。

以下按递增顺序排列y

library(tidyverse)    
dat2 <- dat %>% group_by(y) %>%
  arrange(x, z) %>%
  ungroup() %>%
  mutate(y = reorder(y, z))
dat2

然而,由此产生的情节并非我所期待的。

ggplot(dat2, aes(y,z)) +
  geom_bar(stat = "identity") +
  facet_wrap(~x, scales = "free")

如何按yz的递增顺序排列x的级别?

1 个答案:

答案 0 :(得分:2)

如果您希望每个方面内的条形图增加,则y的相同值需要处于不同方面的不同位置。试试这个:

dat3 <- dat %>%
  mutate(x.y = paste(x, y, sep = ".")) %>%
  mutate(x.y = factor(x.y, levels = x.y[order(z)]))
# this creates a new variable that combines x & y; different facets
# simply use different subsets of values from this variable

ggplot(dat3, aes(x.y,z)) +
  geom_bar(stat = "identity") +
  scale_x_discrete(name = "y", breaks = dat3$x.y, labels = dat3$y) +
  facet_wrap(~x, scales = "free")

plot