如何在ggplot2中定义单个图例元素?

时间:2019-02-07 18:13:35

标签: r ggplot2 legend

我需要为此图表创建明智的图例。

我正在使用R版本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 :(得分:1)

您需要给两个图例使用相同的名称,以便它们成为一个

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

数据

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)