Масштабирование со свободными местоположениями, но фиксированное масштабирование в ggplot2 - PullRequest
0 голосов
/ 02 августа 2020

Возможно ли в пределах facet_wrap или facet_grid освободить положение шкалы, но исправить масштабирование (то есть расстояние между делениями)?

The 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

On the other hand, the free optional allows both the location and scaling to vary across panes:

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. Обратите внимание, что это не может быть решено с помощью параметров space или aspect.ratio.

1 Ответ

2 голосов
/ 02 августа 2020

Я не знаю ни одной опции, чтобы сделать это непосредственно в системе фасетирования (если вы не углубитесь глубоко в пользовательское фасетирование), но это легко достигается с помощью старого трюка с «невидимым ящиком». По сути, вы просто должны убедиться, что на каждой панели есть невидимый прямоугольник, нарисованный с фиксированным значением выше и ниже среднего значения по оси 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 в средней точке графика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...