我想使用facet_wrap
创建一个图,其中每个面板的轴可能会有所不同,但在一个面板中,x
和y
轴应该是相同的比例。
e.g。请参阅以下图表
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和为什么轴都是1-8,而面板b的x和y轴都是5到12。
这可能吗?
答案 0 :(得分:2)
使用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)
答案 1 :(得分:0)
另一种解决方案是通过向x和y颠倒的图上添加不可见点,从而使各个facet_wrap()
图的轴变戏法,从而使绘制的数据为“正方形”,例如
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()
。您不需要虚拟数据。
答案 2 :(得分:0)
问问题时这不是一个选择,但是如今,我强烈建议使用patchwork来组合地块。