ggplot2, patchwork - часть заголовка оси заблокирована краем соседнего участка
У меня есть две линейные диаграммы, сложенные одна под другой с использованием "пэчворка". Мне нужен общий заголовок оси Y для стека, поэтому я добавил метку оси Y в верхнюю часть двух линейных диаграмм. После наложения я обнаружил, что нижняя часть метки оси Y блокируется полем нижней строки диаграмма (что видно на зеленом и желтом фоне графика на рисунках ниже). Вот код и результат
# data
x<- 1:256
x
y<- runif(256, 0, 10)
y
data <- data.frame(x,y)
head(data)
# lc1
# Geom properties
lc1<- ggplot(data, aes(x=x, y=y)) +
geom_line()
# Scale
lc1<- lc1 +
expand_limits(x = 0, y = 0) +
scale_x_continuous(
expand = c(0, 0),
breaks = c(0, 32, 64, 96, 128, 160, 192, 224, 256),
label = NULL
) +
scale_y_continuous(expand = c(0, 0),
breaks = c(0, 5, 10))
# Aspect ratio
lc1 <- lc1 + theme(aspect.ratio = 0.15)
# Panel properties
lc1 <- lc1 +
theme(panel.background = element_blank()) +
theme(
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
legend.position = "none"
)
# Axes lines, ticks, axis text
lc1 <- lc1 +
theme(
axis.line.x = element_line (colour = "grey", size = 0.5),
axis.line.y = element_line(colour = "black", size = 0.5),
axis.ticks.x = element_blank(),
axis.ticks.y = element_line(colour = "black", size = 0.5),
axis.ticks.length = unit(.15, "cm")
) +
theme(
axis.text.y = element_text(
color = "black",
face = "plain",
size = 6,
margin = margin(
t = 0,
r = 2,
b = 0,
l = 0
),
angle = 0,
vjust = 0,
hjust = 0
)
)
# Title, caption, axes labels
lc1<- lc1 +
ylab(label = "Y-axis label (unit)") +
theme(axis.title.x = element_text(
color = "black",
size = 10,
face = "bold",
hjust = 0
))
# Plot margins
lc1 <- lc1 +
theme(plot.margin = unit(c(-0.55,0,-0.53,0), "cm"))
# plot background
lc1<- lc1 + theme(plot.background = element_rect(fill = "green"))
lc1
# lc2
# Geom properties
lc2<- ggplot(data, aes(x=x, y=y)) +
geom_line()
# Scale
lc2<- lc2 +
expand_limits(x = 0, y = 0) +
scale_x_continuous(
expand = c(0, 0),
breaks = c(0, 32, 64, 96, 128, 160, 192, 224, 256),
label = NULL
) +
scale_y_continuous(expand = c(0, 0),
breaks = c(0, 5, 10))
# Aspect ratio
lc2 <- lc2 + theme(aspect.ratio = 0.15)
# Panel properties
lc2 <- lc2 +
theme(panel.background = element_blank()) +
theme(
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
legend.position = "none"
)
# Axes lines, ticks, axis text
lc2 <- lc2 +
theme(
axis.line.x = element_line (colour = "grey", size = 0.5),
axis.line.y = element_line(colour = "black", size = 0.5),
axis.ticks.x = element_blank(),
axis.ticks.y = element_line(colour = "black", size = 0.5),
axis.ticks.length = unit(.15, "cm")
) +
theme(
axis.text.y = element_text(
color = "black",
face = "plain",
size = 6,
margin = margin(
t = 0,
r = 2,
b = 0,
l = 0
),
angle = 0,
vjust = 0,
hjust = 0
)
)
# Title, caption, axes labels
lc2<- lc2 +
ylab(label = "") +
theme(axis.title.x = element_text(
color = "black",
size = 10,
face = "bold",
hjust = 0.5
))
# Plot margins
lc2 <- lc2 +
theme(plot.margin = unit(c(-0.55,0,-0.53,0), "cm"))
# plot background
lc2<- lc2 + theme(plot.background = element_rect(fill = "yellow"))
lc2
# stacking
library(patchwork)
p<- (lc1/lc2)
p
Поэтому я попытался решить проблему, уменьшив левое поле нижней диаграммы с 0 до -1, но это не изменило поля, а заголовок оси остался заблокированным. Если левое поле обеих диаграмм уменьшается до -1, заголовок оси Y, галочки больше не видны, как показано на рисунках ниже. Зеленые и желтые прямоугольники с заливкой являются фоном графика.
Кто-нибудь может помочь найти решение? Есть идеи, что еще можно попробовать? Спасибо!
1 ответ
Вы можете просто установить заголовок для комбинированных графиков (а не для lc1
или lc2
). Вам нужно будет установить пустые y-метки дляlc1
а также lc2
как вы уже сделали для lc2
(например ylab(label = "")
.
p <- (lc1/lc2) + ylab(label = "Y-axis label (unit)")
https:https://stackru.com/images/383b042b10389a7c40330a8139d87d0e978b9f00.png