微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R:ggplot 使用 facet_wrap 和 coord_flip

如何解决R:ggplot 使用 facet_wrap 和 coord_flip

我有两个数据框,我想使用 facet_wrap 将它们绘制在一起,如下所示:

# create data frames    
d = data.frame(
      f = rep(c("f1","f2"),each = 4),x = rep(c("a","b","c","d"),2),y = c(0,2,3,1,6))
    
# plot ggplot
ggplot(d,aes(x,y)) +
  geom_col() +
  facet_wrap(~ f) +
  coord_flip() 

结果:

enter image description here

两个图共享它们的 x 轴,我将其翻转到一边。但是,x 轴的顺序遵循字母顺序。这不是我想要的。相反,我想使用以下从上到下的顺序手动对 x 轴进行排序:“a”、“c”、“d”、“b”。

我尝试通过以下代码对 x 轴值进行预排序,但效果为零:

d2 = d[order(c("a","a","d","b")),] 

ggplot(d2,y)) +
  geom_col() +
  facet_wrap(~ f) +
  coord_flip() 

还有很多其他问题,人们希望使用不同的顺序(例如 here)分别对所有图的 x 轴重新排序,但是 我想使用所有地块的顺序相同。有没有人知道如何在保持简单的同时做到这一点?

解决方法

您需要将 x 转换为 factor 并手动输入值。在这种情况下,由于您的轴已翻转,因此您需要将列表放入...翻转中。

library(tidyverse)

d = data.frame(
  f = rep(c("f1","f2"),each = 4),x = rep(c("a","b","c","d"),2),y = c(0,2,3,1,6))

d$x <- factor(d$x,levels= c('b','d','c','a'))

# plot ggplot
ggplot(d,aes(x,y)) +
  geom_col() +
  facet_wrap(~ f) +
  coord_flip() 

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。