r - 向facet_wrap中的每个方面添加标题

标签 r ggplot2 facet facet-wrap

我很好奇是否可以在facet_wrap 中的每个面上放置轴标题。我可以接近,但无法让 x 和 y 正确显示。该代码当前在同一轴上显示 x 和 y。我知道这并不完全是它应该发挥的作用,但我想看看是否可以在不进行更复杂的事情的情况下完成它(用 grob 或其他东西安排单独的图)。

简而言之,我希望 y_names 和 x_names 出现在各自的轴上。

testdat<-data.frame(x_names=c("A","B","C"),x_vals=c(1,2,3),y_names=c("B","C","A"), y_vals=c(2,3,1))
ggplot(testdat, aes(x_vals, y_vals)) +
  geom_point(pch=21) +
  facet_wrap(y_names~x_names, 
             ncol=1,
             scales="free",
             strip.position="left",
             labeller=as_labeller(c(A= "Apple",
                                    B= "Bread",
                                    C= "Cantaloupe"))
  )+
  theme( strip.background = element_blank(),
         strip.placement = "outside",
         axis.title.x=element_blank(),
         axis.title.y=element_blank())

最佳答案

我不确定你的意思 - 也许是这个?

library(ggplot2)

testdat <- data.frame(x_names = c("A","B","C"),
                      x_vals  = c(1, 2, 3),
                      y_names = c("B", "C", "A"), 
                      y_vals  = c(2, 3, 1))

ggplot(testdat, aes(x_vals, y_vals)) +
  geom_point(pch = 21) +
  facet_grid(y_names ~ x_names, 
             labeller = as_labeller(c(A = "Apple",
                                      B = "Bread",
                                      C = "Cantaloupe")),
              switch = "both") +
  theme( strip.background = element_blank(),
         strip.placement  = "outside",
         axis.title.x     = element_blank(),
         axis.title.y     = element_blank())


编辑

当两个分面因素完全相关时,OP 似乎想要三个(可能完全不相关)图。这相当于对单个变量进行分面。然而,我们希望每个方面都有一个单独的轴。可能有多种方法可以直接在 ggplot 中实现此目的,但它们都非常复杂,并且包括添加自定义注释。

我认为在这种情况下,迄今为止最简单、最保留自由的方法是使用gridExtra::grid.arrange将绘图添加在一起,这不需要任何黑客攻击或grob操作。这很简单:

p1 <- ggplot(filter(testdat, x_names == "A", y_names == "B"), aes(x_vals, y_vals)) + 
        geom_point() + labs(x = "Apple", y = "Banana")

p2 <- ggplot(filter(testdat, x_names == "B", y_names == "C"), aes(x_vals, y_vals)) +
        geom_point() + labs(x = "Banana", y = "Cherry")

p3 <- ggplot(filter(testdat, x_names == "C", y_names == "A"), aes(x_vals, y_vals)) +
        geom_point() + labs(x = "Cherry", y = "Apple")

gridExtra::grid.arrange(p1 , p2, p3)

enter image description here reprex package 创建于 2020-07-22 (v0.3.0)

关于r - 向facet_wrap中的每个方面添加标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63038935/

相关文章:

r - 将字符向量转换为 R 中的单行数据帧

r - 按邮政编码进行子集化(因子级别)

r - 当日期格式无法识别时,如何减去 R 中的日期列?

r - 如何在表示 ggplot2 中所有观测值的 x 轴上添加因子水平?

r - ggplot2 中的多个 y 超过 x

java - hibernate 搜索 : configure Facet for custom FieldBridge

r - 如何在ggplot2中为带有图例的垂直线添加标签

r - 动物园里的动物 : can we aggregate a daily time series of factors and flag activity by ID?

r - 在 y 范围改变后标记堆叠条形图(用 ggplot 制作)

r - 在ggplot2中使用facet_wrap和scales = "free"设置各个轴限制