facet_wrap每个面板等轴

时间:2015-02-27 10:53:32

标签: r plot ggplot2

我想使用facet_wrap创建一个图,其中每个面板的轴可能会有所不同,但在一个面板中,xy轴应该是相同的比例。

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。

这可能吗?

3 个答案:

答案 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)

enter image description here

答案 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来组合地块。