Однозначный фактор ggplot удаляет косые черты из легенды - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы показать простые geom_point, geom_smooth и geom_abline с полезными легендами.К сожалению, простая комбинация geom_point и geom_smooth помещает горизонтальную линию поперек легенды точки, добавляя geom_abline, размещает косую черту во всех легендах.

Как я могу создать простой визуал с полями легендывключать только «точку», «линию» и «пунктирную линию»?

Спасибо

Примеры:

Geom_point и geom_smooth

mtcars %>%
  ggplot() +
  geom_point(aes(x = carb, y = mpg, color = "Points")) +
  geom_smooth(aes(x = carb, y = mpg, color = "Trendline")) +
  theme(legend.position="bottom") +
  labs(x = "carb",
    y = "mpg",
    color = "LEGEND")

Geom_point, geom_smooth и geom_abline

mtcars %>%
  ggplot() +
  geom_point(aes(x = carb, y = mpg, color = "Points")) +
  geom_smooth(aes(x = carb, y = mpg, color = "Trendline")) +
  geom_abline(aes(slope = 1, intercept = 10, color = "ZCustom"), linetype = "dashed") +
  theme(legend.position="bottom") +
  labs(x = "carb",
    y = "mpg",
    color = "LEGEND")

Исправлена ​​легенда geom_point, но косые черты остаются в других легендах

mtcars %>%
  ggplot() +
  geom_point(aes(x = carb, y = mpg, color = "Points")) +
  geom_smooth(aes(x = carb, y = mpg, color = "Trendline")) +
  geom_abline(aes(slope = 1, intercept = 10, color = "ZCustom"), linetype = "dashed") +
  scale_color_manual(values = c("red", "blue", "black"),
                 label = c("Points", "Trendline", "Custom"),
                 guide = guide_legend(override.aes = list(
                   linetype = c("blank", "solid", "dashed"),
                   shape = c(16, NA, NA)))) +
  theme(legend.position="bottom") +
  labs(x = "carb",
    y = "mpg",
    color = "LEGEND")

mtcars plot with point, smooth, abline and broken legend

Я смотрел на этивопросы, но не понял, как применить к моей ситуации:

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Полагаю, вы используете color для geom_point и geom_smooth, поэтому легенда пытается объединить оба камня.Когда вы используете другой aes, легенда воспринимает их как отдельный атрибут / слои.

mtcars %>%
  ggplot( aes(x = carb, y = mpg) ) + 
  geom_point( aes(fill = "Points") ) +    # use 'fill' rather than 'color'
  geom_smooth( aes(color = "Trendline")  ) +
  theme(legend.position = "bottom") +
  labs(x = "carb", y = "mpg", color = "", fill = "") 

Надеюсь, это поможет!

0 голосов
/ 18 декабря 2018

Для меня самый простой способ обойти это просто не перечислять все как color.Вы можете использовать size, shape, alpha и т. Д., Чтобы разбить легенду.

mtcars %>%
  ggplot() +
  geom_point(aes(x = carb, y = mpg, shape = "")) +
  geom_smooth(aes(x = carb, y = mpg, alpha = "")) +
  geom_abline(aes(slope = 1, intercept = 10, color = ""), linetype = "dashed") +
  theme(legend.position="bottom") +
  labs(x = "carb",
    y = "mpg",
    shape = "Points",
    alpha = "Trendline",
    color = "ZCustom")

...