如何在没有第二个图例的情况下在ggplot中编辑图例描述?

时间:2019-09-19 02:25:37

标签: r ggplot2

我一直试图在我的绘图中包含一个图例,该图例在线条旁边显示月份的名称以及其各自的颜色和形状,但我无法弄清楚。

我尝试使用scale_color_hue(),但得到了两个不同的图例

isop_temp <-  ggplot(bio_all_data, aes(t_2m, isop)) +
              geom_jitter(aes(shape = month, colour = month, fill = month)) +
              geom_smooth(aes(group = month, colour = month), method='lm', 
                          fullrange = T, se = F) +
              theme_bw() +
              ylim(0, 4.5) + 
              xlab('temperature °C')+
              ylab('Isoprene[ppb]') + 
              theme(legend.position = "top") +
              scale_color_hue(labels = c('February','March','April','May','June'))

这就是我所得到的。我想念什么?

enter image description here

1 个答案:

答案 0 :(得分:2)

简短的回答:您需要添加带有相同标签的scale_shape()

这里的问题是,您将一个变量(月份)映射到3种美学效果-颜色,形状和填充。那会给你一个传说,但是添加scale_color_hue()可以将颜色和形状的映射分开。

为了举例说明,我们将省略填充,因为只有颜色与geom_point有关。可以按预期工作:

library(ggplot2)
iris %>% 
  ggplot(aes(Sepal.Length, Petal.Width)) + 
  geom_point(aes(color = Species, shape = Species))  

enter image description here

现在,我们添加scale_color_hue。我们得到一个单独的图例,因为标签与映射到形状时使用的默认标签不同:

iris %>% 
  ggplot(aes(Sepal.Length, Petal.Width)) + 
  geom_point(aes(color = Species, shape = Species)) + 
  scale_color_hue(labels = LETTERS[1:3])

enter image description here

最简单的解决方法是在scale_shape中使用相同的标签。或者,您可以dplyr::mutate()在数据框中添加带有月份名称的列,然后映射到该列。

iris %>% 
  ggplot(aes(Sepal.Length, Petal.Width)) + 
  geom_point(aes(color = Species, shape = Species)) + 
  scale_color_hue(labels = LETTERS[1:3]) + 
  scale_shape(labels = LETTERS[1:3])

enter image description here