Подтвердить что ты не робот

Бок о бок горизонтальные легенды in in ggplot2

Я хотел бы, чтобы мои легенды ggplot появлялись бок о бок, под сюжетом с именами переменных над символами, так как они находятся в this сообщение в блоге (второй сюжет). Теперь функция opts перестает функционировать, а theme не воспроизводит ее поведение...

library("ggplot2")
ggplot(diamonds, aes(x = carat, y=price, shape = cut, group=interaction(cut, color), color=color)) +
geom_point() +
#opts(legend.direction = "horizontal", legend.position = "bottom")
#potential options, not all seem have an effect...
theme(legend.direction = "horizontal") +
theme(legend.position = "bottom") +
theme(legend.box = "vertical") +
theme(legend.title.align = 0)

enter image description here

... используя мои навыки рисования MS, чтобы проиллюстрировать желаемый график.

4b9b3361

Ответ 1

Адаптировавшись к предыдущим предложениям с помощью legend.box = "horizontal", я обнаружил, что вы можете получить заголовки легенд сверху, используя title.position = "top" в руководствах для функций scale_. Они должны быть определены для каждой переменной, которая составляет легенду, иначе заголовок будет слева.

ggplot(data = diamonds, 
       mapping = aes(x = carat, y = price, shape = cut,
                     group=interaction(cut, color), color=color)) +
  geom_point() +
  theme(legend.box = "horizontal",
        legend.position="bottom") +
  scale_shape(guide = guide_legend(title.position = "top")) +
  scale_colour_discrete(guide = guide_legend(title.position = "top", nrow = 1))

введите описание изображения здесь

Вы можете перенести названия в центр, как я предложил в вопросе, используя title.hjust = 0.5. Однако при проверке это может смутить читателя относительно того, какие цвета/точки относятся к какой переменной.

Ответ 2

Вам нужно указать theme(legend.box = "horizontal")

Попробуйте следующее:

library("ggplot2")
ggplot(diamonds, aes(x = carat, y=price, shape = cut, group=interaction(cut, color), color=color)) +
  geom_point() +
  theme(legend.direction = "horizontal", 
        legend.position = "bottom",
        legend.box = "horizontal"
        )

enter image description here

Ответ 3

@gjbel - я думаю, чтобы сделать надпись легенды над символами, вам нужно либо изменить направление легенды от горизонтального до вертикального, либо удалить направление легенды целиком, так как по умолчанию вертикально:

library("ggplot2")
ggplot(diamonds, aes(x = carat, y=price, shape = cut, group=interaction(cut, color), color=color)) +
  geom_point() +
  theme(legend.direction = "vertical", 
        legend.position = "bottom",
        legend.box = "horizontal"
        )

ИЛИ

library("ggplot2")
    ggplot(diamonds, aes(x = carat, y=price, shape = cut, group=interaction(cut, color), color=color)) +
      geom_point() +
      theme(legend.position = "bottom",
            legend.box = "horizontal"
            )