ggplot中scale_linetype_manual失效,如何将指定折线改为点状?
解决ggplot2中scale_linetype_manual不生效的问题
嗨,我一眼就揪出问题根源啦——你在调用geom_line()的时候,只在aes()里映射了color = series,完全没把linetype和series变量绑定起来!ggplot的scale_*_manual()系列函数只能作用于已经在美学映射(aes)里声明过的属性,没提前告诉它要根据series区分线型,那scale_linetype_manual()自然就没处发挥作用啦。
修改后的完整代码
只需要在geom_line()的aes()里加上linetype = series这一项就行:
ggplot(d, aes(a,value)) + geom_line(aes(color = series, linetype = series), size=2)+ # 新增linetype的映射 scale_y_continuous(breaks=seq(-2.5, 2.5, 2.5)) + coord_cartesian(ylim=c(-2.5, 2.5))+ scale_x_continuous(breaks=seq(-200, 2000, 1000)) + scale_color_manual(values=c("#E69F00","#56B4E9", "#56B4E9")) + scale_linetype_manual(values=c("twodash", "dotted", "dotted")) + theme(legend.direction = 'vertical', legend.position = 'right', legend.key = element_rect(size = 7), legend.key.size = unit(3, 'lines'))+ theme(panel.grid.major = element_blank(), text = element_text(size=30), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black"))+ geom_vline(xintercept=c(0), linetype="dotted", size=1.5)+ geom_rect(data=rect, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), color="gray55", alpha=0.4, inherit.aes = FALSE)+ labs(x = "time [ms]", y = "Amplitude [µV]", color = "")
额外说明
因为你给后两个series设置了相同的颜色和线型,ggplot会自动把它们合并成同一个图例项,这是正常行为。如果需要分开显示或者调整图例样式,可以再针对性修改guides()函数,但当前你的核心需求(把指定折线改成点状)已经能通过上述修改实现啦。
内容的提问来源于stack exchange,提问作者MariKo
相关产品推荐
相关产品推荐

