facet_wrap 每个面板的轴相等
facet_wrap equal axis per panel
我想使用 facet_wrap
绘制一个图,其中每个面板的轴可以不同,但在面板内 x
和 y
轴应该是相同的比例。
例如看下面的图
df <- read.table(text = "
x y g
1 5 a
2 6 a
3 7 a
4 8 a
5 9 b
6 10 b
7 11 b
8 12 b", header = TRUE)
library(ggplot2)
ggplot(df, aes(x=x,y=y,g=g)) +
geom_point() +
facet_wrap(~ g) # all axes 1-12
ggplot(df, aes(x=x,y=y,g=g)) +
geom_point() +
facet_wrap(~ g, scales = "free")
# fee axes, y & y axes don't match per panel
我想要的是面板 a 的 x 轴以及为什么面板 b 的 x 轴和 y 轴都在 5 - 12 范围内。
这可能吗?
使用 this 答案您可以尝试以下操作:
dummy <- data.frame(x = c(1, 8, 5, 12), y = c(1, 8, 5, 12), g = c("a", "a", "b", "b"))
ggplot(df, aes(x=x,y=y)) +
geom_point() +
facet_wrap(~ g, scales = "free") +
geom_blank(data = dummy)
另一种解决方案是通过在 x 和 y 反转的情况下向绘图添加不可见点,从而使绘制的数据为 "square",例如,
library(ggplot2)
p <- ggplot(data = df) +
geom_point(mapping = aes(x = x, y = y)) +
geom_point(mapping = aes(x = y, y = x), alpha = 0) +
facet_wrap( ~ g, scales = "free")
print(p)
您也可以使用 geom_blank()
。您不需要虚拟数据。
当问题被问到时,这不是一个选项,但这些天我强烈建议 patchwork 用于组合图。
我想使用 facet_wrap
绘制一个图,其中每个面板的轴可以不同,但在面板内 x
和 y
轴应该是相同的比例。
例如看下面的图
df <- read.table(text = "
x y g
1 5 a
2 6 a
3 7 a
4 8 a
5 9 b
6 10 b
7 11 b
8 12 b", header = TRUE)
library(ggplot2)
ggplot(df, aes(x=x,y=y,g=g)) +
geom_point() +
facet_wrap(~ g) # all axes 1-12
ggplot(df, aes(x=x,y=y,g=g)) +
geom_point() +
facet_wrap(~ g, scales = "free")
# fee axes, y & y axes don't match per panel
我想要的是面板 a 的 x 轴以及为什么面板 b 的 x 轴和 y 轴都在 5 - 12 范围内。
这可能吗?
使用 this 答案您可以尝试以下操作:
dummy <- data.frame(x = c(1, 8, 5, 12), y = c(1, 8, 5, 12), g = c("a", "a", "b", "b"))
ggplot(df, aes(x=x,y=y)) +
geom_point() +
facet_wrap(~ g, scales = "free") +
geom_blank(data = dummy)
另一种解决方案是通过在 x 和 y 反转的情况下向绘图添加不可见点,从而使绘制的数据为 "square",例如,
library(ggplot2)
p <- ggplot(data = df) +
geom_point(mapping = aes(x = x, y = y)) +
geom_point(mapping = aes(x = y, y = x), alpha = 0) +
facet_wrap( ~ g, scales = "free")
print(p)
您也可以使用 geom_blank()
。您不需要虚拟数据。
当问题被问到时,这不是一个选项,但这些天我强烈建议 patchwork 用于组合图。