ggplot2 + facet_:某些方面的反转轴?
ggplot2 + facet_: Reverse axes for some facets?
我想将三个子图放在一个图中,分面将是一种自然的方式。但是,这些子图之一 easier/more 可以很自然地阅读 x-axis (而我想不理会其他人)。有没有办法使用 facet_grid() 或 facet_wrap() 来完成此操作?
我考虑过的另一个选择是 grid.arrange(),我 运行 遇到的主要问题是让它根据绘图区域(在轴内)对齐子图), 而不是基于图像的边缘。 (我的轴标题和标签大小不一样,所以默认行为相当难看。)
编辑以添加 MWE,其中包含一些上下文数据。在这里,由于 beta 和 R-squared 子图的 "better" 较大,因此反转 p 子图的轴会更自然。 (在这种情况下,将对数转换添加到该比例可能会更好,但我的真正问题不需要那么花哨。)
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")
这是一个使用 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
我想将三个子图放在一个图中,分面将是一种自然的方式。但是,这些子图之一 easier/more 可以很自然地阅读 x-axis (而我想不理会其他人)。有没有办法使用 facet_grid() 或 facet_wrap() 来完成此操作?
我考虑过的另一个选择是 grid.arrange(),我 运行 遇到的主要问题是让它根据绘图区域(在轴内)对齐子图), 而不是基于图像的边缘。 (我的轴标题和标签大小不一样,所以默认行为相当难看。)
编辑以添加 MWE,其中包含一些上下文数据。在这里,由于 beta 和 R-squared 子图的 "better" 较大,因此反转 p 子图的轴会更自然。 (在这种情况下,将对数转换添加到该比例可能会更好,但我的真正问题不需要那么花哨。)
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")
这是一个使用 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