Выровняйте графики разной ширины по значениям шкалы оси X
Как выровнять два участка разной ширины так, чтобы:
- их оси x синхронизированы
- верхний ряд также содержит общую легенду
Я в основном хочу, чтобы каждый интервал по оси x соответствовал одинаковому количеству сантиметров на двух графиках. Я пробовал это:
library(cowplot)
library(tidyverse)
wide_plot = iris %>%
ggplot(aes(x = Sepal.Length, Sepal.Width, color = Species)) +
geom_point() +
theme(legend.position = "none") +
scale_x_continuous(limits = c(0,8))
narrow_plot = iris %>%
ggplot(aes(x = Sepal.Width, Sepal.Length, color = Species)) +
geom_point() +
theme(legend.position = "none") +
scale_x_continuous(limits = c(0,5) )
legend = cowplot::get_legend(ggplot(iris,aes(x = Sepal.Length, Sepal.Width, color = Species)) + geom_point() )
plot_grid(plot_grid(narrow_plot, legend), wide_plot, nrow = 2 )
Что производит этот сюжет:
Но проблема с вышеизложенным состоит в том, что значения оси x на верхнем нижнем графике не "синхронизированы".
Я попытался повозиться с параметром rel_widths в cowplot::plot_grid, но надеюсь на более точное решение.
2 ответа
Я знаю, что это не прямой ответ на ваш вопрос, но рассматривали ли вы возможность использования одного и того же диапазона x для обоих графиков и размещения легенды там, где она подходит?
library(cowplot)
library(tidyverse)
wide_plot = iris %>%
ggplot(aes(x = Sepal.Length, Sepal.Width, color = Species)) +
geom_point() +
theme(legend.position = "none") +
scale_x_continuous(limits = c(0,8), labels = scales::number_format(accuracy = 0.1))+
scale_y_continuous( labels = scales::number_format(accuracy = 0.1))
narrow_plot = iris %>%
ggplot(aes(x = Sepal.Width, Sepal.Length, color = Species)) +
geom_point() +
theme(legend.position = c(0.9,0.7), legend.background = element_rect(size = 30)) +
scale_x_continuous(limits = c(0,8), labels = scales::number_format(accuracy = 0.1))+
scale_y_continuous( labels = scales::number_format(accuracy = 0.1))
legend = cowplot::get_legend(ggplot(iris,aes(x = Sepal.Length, Sepal.Width, color = Species)) + geom_point())
plot_grid(narrow_plot, wide_plot, nrow = 2)
Вы можете настроить поля и масштаб оси, чтобы графики совпадали:
wide_plot = iris %>%
ggplot(aes(x = Sepal.Length, Sepal.Width, color = Species)) +
geom_point() +
theme(legend.position = "none",
plot.margin = unit(c(5.5, 140, 5.5, 0), "pt")) +
scale_y_continuous(limits = c(1, 5)) +
scale_x_continuous(limits = c(0, 8))
https:https://stackru.com/images/45f24ebe404ee34e71297cd92b85895caf4320ef.png