ggplot2绘制双轴多折线图生成两个图例的原因及合并方法咨询
问题产生原因
你的代码同时将colour和linetype两个美学属性绑定到了Cate变量,但仅为颜色比例尺设置了自定义的斜体表达式标签,线型比例尺默认使用因子的原始文本作为标签,二者标签属性不匹配,ggplot2会判定为两个独立的图例,因此分开渲染。
解决方案
补充设置scale_linetype_discrete,保证其标签配置和颜色比例尺完全一致即可,修改后的完整可运行代码如下:
library(ggplot2) loc=rep(1:3, times=6) #x-axis value Cate=rep(c("Ali", "Ben", "Can", "Don", "Ele", "Fin"), each=3) #category res=rnorm(18,5,1) #y-axis value df1=data.frame(loc, res, Cate) df1$Cate=factor(df1$Cate, levels=c("Ali","Ben","Can","Don","Ele","Fin")) f=ggplot(data=df1, aes(x=loc, y=res, group=Cate, colour=Cate)) + geom_line(aes(linetype=Cate), size=1) + labs(title="My Title", x="X-Axis", y="Y-Axis") + scale_y_continuous(n.breaks=8, sec.axis=sec_axis(~exp(.), name="Exp Y-Axis")) + scale_colour_discrete(labels=c(expression(paste(italic("Ali"))), expression(paste(italic("Ben"))), expression(paste(italic("Can"))), expression(paste(italic("Don"))), expression(paste(italic("Ele"))), expression(paste(italic("Fin"))))) + # 新增以下行,设置线型比例尺的标签和颜色比例尺完全一致 scale_linetype_discrete(labels=c(expression(paste(italic("Ali"))), expression(paste(italic("Ben"))), expression(paste(italic("Can"))), expression(paste(italic("Don"))), expression(paste(italic("Ele"))), expression(paste(italic("Fin"))))) + theme(panel.grid.major=element_blank(), panel.grid.minor=element_blank(), panel.background=element_blank(), axis.line=element_line(color = "black"), legend.background=element_blank(), legend.key=element_rect(fill=NA)) f
修改后运行代码,两个图例就会自动合并为一个,每个图例项会同时展示对应的颜色和线型效果。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

