Выровняйте общие легенды по центру сетки сюжета (с коровьим сюжетом)

Воспроизводимый пример можно найти в этом руководстве для пакета cowplot.

https://cran.r-project.org/web/packages/cowplot/vignettes/shared_legends.html

Копируем пример кода:

library(ggplot2)
library(cowplot)
#down-sampled diamonds data set
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]

# Make three plots.
# We set left and right margins to 0 to remove unnecessary spacing in the
# final plot arrangement.
p1 <- qplot(carat, price, data=dsamp, colour=clarity) +
  theme(plot.margin = unit(c(6,0,6,0), "pt"))
p2 <- qplot(depth, price, data=dsamp, colour=clarity) +
  theme(plot.margin = unit(c(6,0,6,0), "pt")) + ylab("")
p3 <- qplot(color, price, data=dsamp, colour=clarity) +
  theme(plot.margin = unit(c(6,0,6,0), "pt")) + ylab("")

# arrange the three plots in a single row
prow <- plot_grid( p1 + theme(legend.position="none"),
           p2 + theme(legend.position="none"),
           p3 + theme(legend.position="none"),
           align = 'vh',
           labels = c("A", "B", "C"),
           hjust = -1,
           nrow = 1
           )
legend_b <- get_legend(p1 + theme(legend.position="bottom"))

# add the legend underneath the row we made earlier. Give it 10% of the height
# of one plot (via rel_heights).
p <- plot_grid( prow, legend_b, ncol = 1, rel_heights = c(1, .2))
p

В этом примере показан график, на котором легенда выровнена по нижнему левому краю сетки. Однако раньше все было по-другому, поскольку легенда рисовалась выровненной по нижнему центру графика. Вот пример, созданный моим личным кодом несколько месяцев назад. https://s1.postimg.org/8pf2en1zen/Untitled.png (сейчас инструмент загрузки у меня не работает)

При повторном запуске моего старого кода после неизвестного количества изменений в любом из пакетов появляется легенда, выровненная по левому нижнему краю (как также показано в учебнике, третий график сверху): https://s1.postimg.org/3agjw7n9gf/Untitled2.png

Вопрос в том, как настроить код, чтобы легенду выровняли по центру снизу.


person nouse    schedule 09.10.2017    source источник


Ответы (1)


вы можете установить legend_b следующим образом:

legend_b <- get_legend(p1 + theme(legend.position=c(0.3,0.8),legend.direction = "horizontal"))

лучший способ:

legend_b <- get_legend(p1 + theme(legend.direction = "horizontal",legend.justification="center" ,legend.box.just = "bottom"))
person Zeinab Ghaffarnasab    schedule 09.10.2017
comment
Спасибо. Думаю, это требует проб и ошибок для других размеров легенды. - person nouse; 09.10.2017
comment
legend_b <- get_legend(p1 + theme(legend.position="none",legend.direction = "horizontal")) у меня тоже работает. - person Zeinab Ghaffarnasab; 09.10.2017
comment
Ошибка в get_legend (p1 + theme (legend.position = none, legend.direction = horizontal)): график должен содержать легенду - person nouse; 09.10.2017
comment
legend_b <- get_legend(p1 + theme(legend.direction = "horizontal",legend.justification="center" ,legend.box.just = "bottom")) попробуйте этот - person Zeinab Ghaffarnasab; 09.10.2017
comment
Выглядит красиво. Вы можете обновить свой ответ. - person nouse; 09.10.2017