Я новичок в R, не говоря уже о ggplot, поэтому заранее извиняюсь за любые проблемы с моим примером ниже.
Используя примеры из существующих вопросов, я попытался собрать код для объединения двух отдельных ggplots. Мне интересно, как я могу переместить легенду финального сюжета, чтобы она располагалась над графиком. Я попытался изменить legend.postion на «top» для отдельных ggplots, но, похоже, это не сработало.
(Обратите внимание, что я не упомянул создание второй оси Y, чтобы свести код в примере к минимуму того, что, по моему мнению, необходимо для иллюстрации моей проблемы)
library(ggplot2)
library(gtable)
library(reshape2)
library(grid)
library(scales)
df.test <- data.frame(
x_cat = factor(c(1, 2, 3, 4)),
count = seq(1:4),
line1 = seq(from = 1, to = 4, length.out = 4),
line2 = seq(from = 0, to = 3, length.out = 4)
)
p1 <- ggplot( data = df.test , aes(x=x_cat, y=count) ) +
geom_bar( stat="identity" ) +
xlab( "X Label" ) +
ylab( "Y Label 1" ) +
theme(panel.background = element_rect(colour = "white"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position = "bottom")
g1 <- ggplotGrob( p1 )
df.test2 <- melt( df.test[-2] )
p2 <- ggplot( data = df.test2 , aes(x=x_cat, y=value, colour=variable ) ) +
geom_line( aes(group=variable) ) +
ylab( "Y Label 2" ) +
theme(panel.background = element_rect(fill = NA, colour = "white"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position = "bottom")
g2 <- ggplotGrob(p2)
pp <- c(subset(g1$layout, name == "panel", se = t:r))
g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], pp$t, pp$l, pp$b, pp$l)
pp <- c(subset(g2$layout, name == "guide-box", se = t:r))
g <- gtable_add_grob(g, g2$grobs[[which(g2$layout$name == "guide-box")]], t=pp$t, l=pp$l, b=pp$b, r=pp$r)
grid.draw(g)