使用自由位置缩放,但在 ggplot2 中固定缩放

Scales with free locations but fixed scaling in ggplot2

是否可以在 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')

另一方面,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')

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

我不知道有任何选项可以直接在分面系统中执行此操作(除非您深入研究自定义分面),但使用旧的“隐形框”技巧可以轻松实现。基本上你只需确保每个面板都有一个不可见的框,在组 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')

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