【问题标题】:ggplot2 + facet_: Reverse axes for some facets?ggplot2 + facet_:某些方面的反向轴?
【发布时间】:2018-01-18 22:12:04
【问题描述】:

我想将三个子图组合成一个图,分面是一种自然的方式。然而,这些子图之一会更容易/更自然地阅读反向 x 轴(而我想不理会其他子图)。有没有办法使用 facet_grid() 或 facet_wrap() 来完成这个?

我考虑过的另一种选择是 grid.arrange(),我遇到的主要问题是让它根据绘图区域(在轴内)对齐子图,而不是基于边缘的图像。 (我的轴标题和标签大小不一样,所以默认行为相当难看。)

编辑添加了 MWE,其中包含一些上下文数据。在这里,由于对于 beta 和 R 平方子图来说越大越好,因此反转 p 子图的轴会更自然。 (在这种情况下,将 log 转换添加到该比例可能会更好,但我真正的问题不需要那么花哨。)

df <- data.frame(z=c(rep("R-squared",15),rep("p",15),rep("beta",15)),
                 x=c(runif(15),exp(-runif(15,1,10)),rnorm(15,1,0.5)),
                 y=rep(letters[1:15],3))
plot <- ggplot(df) + geom_point(aes(x=x,y=y)) + facet_grid(.~z, scales="free_x", switch="x")

【问题讨论】:

标签: r ggplot2 gridextra


【解决方案1】:

这是使用patchwork的解决方案

library(ggplot2)
library(dplyr)
df <- data.frame(z=c(rep("R-squared",15),rep("p",15),rep("beta",15)),
                 x=c(runif(15),exp(-runif(15,1,10)),rnorm(15,1,0.5)),
                 y=rep(letters[1:15],3))

p1 <- ggplot(filter(df, z == "beta"), aes(x, y)) +
  geom_point() 

p2 <- ggplot(filter(df, z == "p"), aes(x, y)) +
  geom_point() +
  scale_x_reverse() +
  theme(axis.title.y = element_blank(),
        axis.text.y  = element_blank(),
        axis.ticks.y = element_blank())

p3 <- ggplot(filter(df, z == "R-squared"), aes(x, y)) +
  geom_point() +
  theme(axis.title.y = element_blank(),
        axis.text.y  = element_blank(),
        axis.ticks.y = element_blank())

#devtools::install_github("thomasp85/patchwork")
library(patchwork)
p1 + p2 + p3

【讨论】:

  • 安装包需要反复试验(我没有意识到我需要从新的 R 会话安装),但是一旦我开始工作,它就完全符合我的要求。这太棒了。
  • 太棒了!很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 2016-02-21
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
相关资源
最近更新 更多