ggplot2为两个数据系列添加手动图例 [英] ggplot2 add manual legend for two data series

查看:109
本文介绍了ggplot2为两个数据系列添加手动图例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个数据框:

     Control    Stress days  sd_control  sd_stress
X1 0.9702100 0.9343627   X1 0.001900535 0.07035645
X2 0.9666619 0.8595523   X2 0.014946893 0.04066567
X3 0.9165654 0.7160598   X3 0.072655343 0.07025344
X4 0.9208237 0.6668044   X4 0.050870831 0.08736982
X5 0.8766547 0.7660685   X5 0.073588197 0.04868614
X6 0.9599553 0.7937444   X6 0.041559836 0.05326769
X7 0.9736297 0.8188934   X7 0.003817743 0.06272428

,根据这些数据,我完成了以下绘图:

and based on this data I've done this plot:

使用以下代码:

significance <- data.frame(days=c("X2","X3","X4","X6"),value=c(1.02,1.02,1.02,1.02))
ggplot(my_data, aes(x=days,y=Control,group=1)) +
  geom_errorbar(aes(ymax = Control-sd_control, ymin = Control+sd_control),
                width=0.2, size=0.5) +
  geom_errorbar(aes(ymax = Stress-sd_stress, ymin = Stress+sd_stress),
                width=0.2, size=0.5) +
  geom_point(shape=23,color='gray45',fill='gray45',size=4) + 
  geom_line(color='gray45',size=1) +
  geom_point(data=my_data,aes(x=days,y=Stress),size=4,shape=22,fill='gray',color='gray',
             show.legend = TRUE) +
  geom_line(data = my_data, aes(x=days,y=Stress),color='gray',size=1) +
  geom_point(data=significance, aes(x=days,y=value),shape='*',size=6) +
  labs(x='\nDAT',y='RWC\n') +
  scale_y_continuous(labels = percent_format(accuracy = 1),limits = c(0.5,1.04), 
                     expand = c(0,0), breaks = seq(from=0.5,to=1,by=0.05)) +
  scale_x_discrete(expand = c(0.07, 0),labels = c(0,7,14,21,27,35,42)) +
  ggtitle('Relative Water Content\n') +
  theme(panel.border = element_rect(colour = "black", fill=NA, size=0.5),
        panel.background = element_rect(fill = 'white'),
        plot.title = element_text(hjust = 0.5,family = 'Calibri',face='bold'),
        axis.title = element_text(family = 'Calibri',face = 'bold'),
        axis.text = element_text(family = 'Calibri')
        )

我想在图的右下角添加一个图例,以相同的点形描述控制和应力处理.我尝试了几种在这里找到的设置颜色矢量和scale_colour_manual属性的方法,但是它们都不起作用.有什么建议吗?

I want to add a legend in the bottom-right on the plot that describres the Control and Stress Treatmentes with the same shape of the points. I've tried several approaches that I've found here as set a color vector and scale_colour_manual attributes but none of them worked. Any suggestion?

推荐答案

问题是您使用了 color fill shape 争论.

The issue is that you use the color, fill and shape arguments.

  • 要获得传奇,您必须映射美学,即在 aes()内部.
  • 这样做之后,ggplot将自动添加lgends,您可以应用 scale_xxx_manual 以获得所需的颜色,填充和形状.
  • 但是,由于这会导致3个图例(无法弄清楚为什么合并图例失败),我只使用 guides 保留其中一个,并保留 guide_legend 为图例设置样式.试试这个:
  • To get a legend you have to map on aesthetics, i.e. inside aes().
  • After doing so ggplot will add lgends(s) automatically and you can apply scale_xxx_manual to get the desired colors, fill and shapes.
  • However, as this results in 3 legends (was not able to figure out why the merging of the legends failed) I use guides to keep only one of them and guide_legend to style the legend. Try this:
library(ggplot2)
library(scales)

ggplot(my_data, aes(x=days, group=1)) +
  geom_errorbar(aes(ymax = Control-sd_control, ymin = Control+sd_control),
                width=0.2, size=0.5) +
  geom_errorbar(aes(ymax = Stress-sd_stress, ymin = Stress+sd_stress),
                width=0.2, size=0.5) +
  geom_point(aes(y=Control, color = "Control", fill = "Control", shape = "Control"), size=4) + 
  geom_line(aes(y=Control, color = "Control"),size=1) +
  geom_point(aes(y=Stress, color = "Stress", fill = "Stress", shape = "Stress"), size=4) +
  geom_line(aes(y=Stress, color = "Stress"), size=1) +
  geom_point(data=significance, aes(y=value),shape='*',size=6) +
  scale_color_manual(values = c("Control" = 'gray45', "Stress" = 'gray') ) +
  scale_fill_manual(values = c("Control" = 'gray45', "Stress" = 'gray') ) +
  scale_shape_manual(values = c("Control" = 23, "Stress" = 22)) +
  guides(shape = FALSE, fill = FALSE, 
         color = guide_legend(override.aes = list(shape =  c("Control" = 23, "Stress" = 22),
                                                  fill = c("Control" = 'gray45', "Stress" = 'gray')))) +
  labs(x='\nDAT',y='RWC\n') +
  scale_y_continuous(labels = percent_format(accuracy = 1),limits = c(0.5,1.04), 
                     expand = c(0,0), breaks = seq(from=0.5,to=1,by=0.05)) +
  scale_x_discrete(expand = c(0.07, 0), labels = c(0,7,14,21,27,35,42)) +
  ggtitle('Relative Water Content\n') +
  theme(panel.border = element_rect(colour = "black", fill=NA, size=0.5),
        panel.background = element_rect(fill = 'white'),
        plot.title = element_text(hjust = 0.5,family = 'Calibri',face='bold'),
        axis.title = element_text(family = 'Calibri',face = 'bold'),
        axis.text = element_text(family = 'Calibri')
  )

这篇关于ggplot2为两个数据系列添加手动图例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆