You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:18:00