Я пытаюсь создать многопользовательский сюжет с одной легендой, используя ggplot. Я был в состоянии создать MultiPanel сюжет сначала создать мои шесть отдельных участков, используя такой код:Добавить одну легенду для многоканального ggplot
p1 <- ggplot(data, aes(y = value, x = Time))+
geom_point(position="dodge")+geom_line(aes(group=group,linetype=group))
Я использовал подобный код для пяти дополнительных участков. Я использовал функцию pushViewport в библиотеке «сетки», чтобы создать mutlipanel сюжет:
pushViewport(viewport(layout = grid.layout(2, 3)))
print(p1,vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(p2,vp = viewport(layout.pos.row = 1, layout.pos.col = 2))
print(p3,vp = viewport(layout.pos.row = 1, layout.pos.col = 3))
print(p4,vp = viewport(layout.pos.row = 2, layout.pos.col = 1))
print(p5,vp = viewport(layout.pos.row = 2, layout.pos.col = 2))
print(p6,vp = viewport(layout.pos.row = 2, layout.pos.col = 3))
То, что я хотел бы сделать сейчас, но не могу показаться, чтобы выяснить это добавить одну легенду для всех шести сюжетов. Я читал некоторые о добавлении легенды за пределы границы графика, но, похоже, не может заставить это работать вместе с методом pushViewport.
Вот объяснение Хедли с помощью 'grid.arrange': https: //github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs – Rentrop
Почему вы не фасете? http://www.cookbook-r.com/Graphs/Facets_(ggplot2)/ – CMichael
вы можете добавить к p1 <- p1 + теме (legend.justification = 'left', legend.position = c (0,0.75)) , в то время как вы добавляете к другим + тема (legend.position = "none"). Это даст вам одну легенду в левом верхнем углу первого сюжета. Однако, возможно, вам придется немного поиграть со значениями позиции. –