使用dfmelt与breaks时,如何单独修改MODEL和OBSERVED的线型?
解决方法
你可以通过两种方式实现仅修改MODEL和OBSERVED线型的需求:
方法一:手动映射线型
在ggplot的aes中关联linetype与variable,再用scale_linetype_manual指定每个变量的线型,精准控制每条线的样式:
JAN<-subset(nDF, format.Date(DATE, "%m")=="01") dfmelt<-melt(JAN,id.vars="DATE") breaks <- unique(as.Date(cut(dfmelt$DATE, "month"))) ba2 <- transform(dfmelt, year = as.integer(format(DATE, "%Y"))) # 核心修改:添加linetype映射并手动指定样式 p <- ggplot(ba2, aes(x=DATE,y=value, col=variable, linetype=variable)) + labs(title='JANUARY')+ geom_line(lwd=1.0,alpha=0.5) + facet_grid(cols = vars(year), scales = "free_x", space = "free_x")+ theme(panel.spacing = unit(0, "lines")) + # 自定义各变量线型:BC用实线,MODEL用虚线,OBSERVED用点划线 scale_linetype_manual(values = c("BC" = "solid", "MODEL" = "dashed", "OBSERVED" = "dotdash")) p + scale_x_date(breaks = breaks, date_labels = "%b")
常用线型参数包括:solid(实线)、dashed(虚线)、dotted(点线)、dotdash(点划线),可按需调整。
方法二:分图层绘制指定变量
通过多次调用geom_line,每次仅绘制目标变量的线,单独设置线型,灵活性更强:
JAN<-subset(nDF, format.Date(DATE, "%m")=="01") dfmelt<-melt(JAN,id.vars="DATE") breaks <- unique(as.Date(cut(dfmelt$DATE, "month"))) ba2 <- transform(dfmelt, year = as.integer(format(DATE, "%Y"))) p <- ggplot(ba2, aes(x=DATE,y=value, col=variable)) + labs(title='JANUARY')+ # 绘制BC,保持实线 geom_line(data = subset(ba2, variable == "BC"), lwd=1.0, alpha=0.5, linetype = "solid") + # 绘制MODEL,用虚线 geom_line(data = subset(ba2, variable == "MODEL"), lwd=1.0, alpha=0.5, linetype = "dashed") + # 绘制OBSERVED,用点划线 geom_line(data = subset(ba2, variable == "OBSERVED"), lwd=1.0, alpha=0.5, linetype = "dotdash") + facet_grid(cols = vars(year), scales = "free_x", space = "free_x")+ theme(panel.spacing = unit(0, "lines")) p + scale_x_date(breaks = breaks, date_labels = "%b")
这种方式还能单独调整每个图层的粗细、透明度等参数,互不干扰。
内容的提问来源于stack exchange,提问作者hat6ytrs
相关产品推荐
相关产品推荐

