首页 文章

如何在刻面ggplot2条形图中订购条形图

提问于
浏览
8

如果我想从ggplot2条形图中选择从最大到最小的条形图,那么我通常会更新条形图类别的因子级别,如此

one_group <- data.frame(
  height   = runif(5),
  category = gl(5, 1)
)

o <- order(one_group$height, decreasing = TRUE)
one_group$category <- factor(one_group$category, levels = one_group$category[o])

p_one_group <- ggplot(one_group, aes(category, height)) +
  geom_bar(stat = "identity")
p_one_group

如果在不同的方面有几组我想要的条形图,每个小平面都有从最大到最小(和不同的x轴)排序的条形,那么该技术就会崩溃 .

给出一些样本数据

two_groups <- data.frame(
  height   = runif(10),
  category = gl(5, 2),
  group    = gl(2, 1, 10, labels = letters[1:2])
)

和绘图代码

p_two_groups <- ggplot(two_groups, aes(category, height)) +
  geom_bar(stat = "identity") +
  facet_grid(. ~ group, scales = "free_x")
p_two_groups

我需要做些什么来使酒吧订购正确?

如果有帮助,需要解决的一个问题是:在完成分面后如何更新因子水平?

2 回答

  • 3

    这是一个黑客:

    two_groups <- transform(two_groups, category2 = factor(paste(group, category)))
    two_groups <- transform(two_groups, category2 = reorder(category2, rank(height)))
    
    ggplot(two_groups, aes(category2, height)) +
      geom_bar(stat = "identity") +
      facet_grid(. ~ group, scales = "free_x") +
      scale_x_discrete(labels=two_groups$category, breaks=two_groups$category2)
    
    • make UNIQUE 所有条目的因子变量(category2)

    • 根据高度重新排序变量

    • 变量上的图:aes(x = category2)

    • 使用scale_x_discrete中变量(category2)的原始值(类别)重新标记轴 .

  • 14

    这是一个实现你想要的黑客 . 我无法弄清楚如何获得刻度线下方的类别值 . 因此,如果有人可以帮助解决这个问题,那就太棒了 . 让我知道这个是否奏效

    # add a height rank variable to the data frame
    two_groups = ddply(two_groups, .(group), transform, hrank = rank(height));
    
    # plot the graph
    
    p_two_groups <- ggplot(two_groups, aes(-hrank, height)) +
      geom_bar(stat = "identity") +
      facet_grid(. ~ group, scales = "free_x") +
      opts(axis.text.x = theme_blank()) +
      geom_text(aes(y = 0, label = category, vjust = 1.5))
    

相关问题