具有自由位置的缩放,但在ggplot2中固定缩放

时间:2020-08-01 22:14:31

标签: r ggplot2 plot facet

是否可以在facet_wrapfacet_grid内释放刻度的位置,但固定刻度(即刻度线之间的距离)?

fixed选项可以固定给定比例尺的位置和比例尺。例如,在下面,每个窗格都有相同的限制和缩放比例:

library(ggplot2)
ggplot(within(mtcars, 
              split <- rowSums(sapply(c(.3,.5,.6),function(x) disp> quantile(disp,x))%*%(1:3))),
       aes(mpg, hp)) + geom_point() + stat_smooth(method='lm', se=F) + 
  facet_wrap(~split, scales = 'fixed')

fixed

另一方面,free可选选项允许位置和缩放比例随窗格的不同而变化:

ggplot(within(mtcars, 
              split <- rowSums(sapply(c(.3,.5,.6),function(x) disp> quantile(disp,x))%*%(1:3))),
       aes(mpg, hp)) + geom_point() + stat_smooth(method='lm', se=F) + 
  facet_wrap(~split, scales = 'free_y')

free

是否可以允许刻度中心变化,但可以固定刻度线之间的距离?在上面的示例中,这相当于将每个比例尺都以窗格的平均y值为中心,但将刻度线之间的距离固定为50。请注意,无法使用spaceaspect.ratio解决此问题选项。

1 个答案:

答案 0 :(得分:2)

我不知道直接在构面系统中执行此操作的任何选项(除非您深入研究自定义构面),但是使用旧的“看不见的盒子”技巧很容易实现。基本上,您只需确保每个面板都有一个不可见的框,即可在y均值组的上方和下方绘制一个固定值,并在x均值的两侧绘制一个固定的距离:

ggplot(within(mtcars, {
              split <- rowSums(sapply(c(.3,.5,.6), 
                                      function(x) disp > quantile(disp, x)) %*% (1:3));
              mins <- ave(hp, split) - 100;
              maxs <- ave(hp, split) + 100;
              minx <- ave(mpg, split) -8;
              maxx <- ave(mpg, split) +8;
              }), 
       aes(mpg, hp)) +
  geom_point() + 
  geom_rect(aes(xmin = minx, xmax = maxx, ymin = mins, ymax = maxs), 
            alpha = 0, colour = "#00000000") +
  stat_smooth(method='lm', se=F) + 
  facet_wrap(~split, scales = 'free')

enter image description here

您可以看到在所有4个图上比例尺的大小都相同,但是每个点簇都以其x均值和y均值在图的中点居中。