ggplot2: изменяющаяся ширина фасета с независимыми осями `Y` - PullRequest
1 голос
/ 16 апреля 2019

Фиктивные данные

d = data.frame(
    x = factor(LETTERS[c(1,2,3,4,1,2,3,4,1,2,1,2,1,2,1,2)]),
    y = c(100,80,70,60,130,90,65,60,2,3,3,3,2,2,1,2),
    grid = rep(letters[1:2], each=8)
)

Выпуск

ggplot(d, aes(x=x, y=y)) + facet_grid(~grid, scales="free",space="free_x") + geom_point()

enter image description here

Мне нравится этот график. Моя единственная проблема заключается в том, что обе сетки используют одну и ту же ось Y. Итак, я попытался использовать facet_wrap вместо facet_grid и получил

ggplot(d, aes(x=x, y=y)) + facet_wrap(~grid, scales="free") + geom_point()

enter image description here

Но, к сожалению, facet_wrap не имеет параметра "пробел", и в результате правый и левый графы имеют одинаковую ширину.

Вопрос

Как я могу сделать так, чтобы расстояние между уровнями переменной d$x было одинаковым для обеих граней (ведущих к фасетам различной ширины) И иметь отдельную ось Y для каждого фасета. Конечно, я бы хотел, чтобы грани были выровнены по горизонтали.

1 Ответ

2 голосов
/ 17 апреля 2019

Используйте ggplot grob и измените ширину в таблице

# Capture the plot
q = ggplot(d, aes(x=x, y=y)) + facet_grid(~grid, scales="free",space="free_x") + geom_point()
gt = ggplotGrob(q)

# Modify the widths
gt$widths[5] = unit(8, "cm")
gt$widths[9] = unit(4, "cm")

# Plot the graph
grid.newpage()
grid.draw(gt)

enter image description here

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