Как определить отдельные элементы легенды в ggplot2? - PullRequest
0 голосов
/ 07 февраля 2019

Мне нужно создать разумные легенды для этого графика.

Я использую версию 3.5.2 и ggplot2 версии 3.1.0.9000.

Что у меня есть:

as.data.frame(list(
  name = c('alice', 'bob', 'charlie'),
  y = c(2, 3, 3.5),
  y_min = c(1, 1.5, 1.25),
  y_max = c(4, 3.5, 7),
  asterisk = c(6, 3.75, 9)
  )
) %>%
  ggplot(aes(y = y, x = name)) +
  geom_point(aes(color = 'main', shape = 'main'), size = 4) +
  geom_point(aes(y = asterisk, color = 'asterisk', shape = 'asterisk'), size = 6) +
  scale_color_manual(values = list('main' = 'black', 'asterisk' = 'red')) +
  scale_shape_manual(values = list('main' = 16, 'asterisk' = 42)) +
  geom_segment(aes(y = y_min, yend = y_max, xend = name)) +
  coord_flip()

enter image description here

Я надеюсь, что легенда покажет только большую черную точку и маленькую красную звездочку, предпочтительно под одним заголовком.Там нет большой красной точки или маленькой черной звездочки, и это сбивает с толку, что эти символы появляются в легенде.

1 Ответ

0 голосов
/ 07 февраля 2019

Вам необходимо дать обеим легендам одно и то же имя, чтобы они стали одним

ggplot(dat, aes(y=y, x=name)) +
  geom_point(aes(color='main', 
                 shape='main'), size=4) +
  geom_point(aes(y=asterisk, 
                 color='asterisk', 
                 shape='asterisk'), size=6) +
  scale_color_manual(name = "legend_title", # changed name here
                     values=c('main'='black', 'asterisk'='red')) +
  scale_shape_manual(name = "legend_title", # and here
                     values=c('main'=16, 'asterisk'=42)) +
  geom_segment(aes(y=y_min, yend=y_max, xend=name)) +
  coord_flip()

enter image description here

data

dat <- data.frame(
  name = c('alice', 'bob', 'charlie'),
  y = c(2, 3, 3.5),
  y_min = c(1, 1.5, 1.25),
  y_max = c(4, 3.5, 7),
  asterisk = c(6, 3.75, 9), stringsAsFactors = FALSE) 
...