ggplot2中合并图例标题使用上标后图例不合并的解决求助
解决ggplot中用expression做标题时颜色与形状图例无法合并的问题
这个问题我之前也踩过坑!其实根源在于ggplot判断是否合并图例的逻辑:它会检查两个图例的标题是否是同一个对象,而不是只看内容是否相同。你两次调用expression((ng~g^{-1})),虽然内容看起来一模一样,但每次调用都会生成一个全新的expression对象,它们在内存里的引用是不同的,所以ggplot会把它们当成两个独立的标题,自然就没法合并图例了。
下面给你两种简单靠谱的解决办法:
方法1:把expression存成变量复用
最省心的方式就是先把需要的表达式赋值给一个变量,然后在labs()里同时用这个变量。这样两个图例的标题指向的是同一个对象,ggplot就会识别出来并合并它们:
a<-c(2,5,2,6,1,2,3,6) b<-c(5,2,6,7,8,3,1,9) c<-c(rep("n",4),rep("m",4)) data<-data.frame(a,b,c) # 先把表达式存为一个变量 legend_title <- expression((ng~g^{-1})) ggplot(data,aes(a,b,shape=c,color=c))+ geom_point()+ labs(color=legend_title, shape=legend_title)
方法2:用scale函数统一设置标题
你也可以通过scale_color_discrete()和scale_shape_discrete()来统一指定图例标题,这种方式同样能保证标题的一致性,实现图例合并:
ggplot(data,aes(a,b,shape=c,color=c))+ geom_point()+ scale_color_discrete(name = expression((ng~g^{-1})))+ scale_shape_discrete(name = expression((ng~g^{-1})))
如果已经写了labs()的代码,也可以用guides()函数手动强制合并,不过这个方法相对繁琐一点:
ggplot(data,aes(a,b,shape=c,color=c))+ geom_point()+ labs(color=expression((ng~g^{-1})), shape=expression((ng~g^{-1})))+ guides(color = guide_legend(title = expression((ng~g^{-1}))), shape = guide_legend(title = expression((ng~g^{-1}))))
个人最推荐第一种方法,代码简洁还不容易出错~
内容的提问来源于stack exchange,提问作者Antón
相关产品推荐
相关产品推荐

