R语言单图叠加多图时alpha透明度设置失效问题求助
解决R语言直方图叠加时的透明度问题
嘿,我一眼就看出问题出在哪了!你在第二个直方图里写的col = c("#FF9900", alpha=0.4)是错误的用法——col参数只接受颜色值,不能把alpha作为参数嵌套进去。这种写法相当于给col传了一个包含两个元素的向量,R会循环使用这两个“值”来给柱子上色,而第二个元素不是有效的颜色,所以才出现了条纹柱状图,完全没达到透明效果。
下面给你两种正确的解决方案,任选其一就行:
方案1:手动添加十六进制透明度
十六进制颜色的格式是#RRGGBB,我们可以在后面再加两位表示透明度(范围从00完全透明到FF完全不透明)。0.4的透明度对应的十六进制值是66,所以橙色的透明色就是#FF990066。
修正后的完整代码:
# 绘制第一个直方图和密度线 hist(Lake_DF1[[6]], col = "#006CFF", border = "black", prob = TRUE, breaks = 60, xlim = c(14,17), xlab = "Height [m]", main = "DTLB 6") lines(density(na.omit(Lake_DF1[[6]])), lwd = 2) # 叠加第二个带透明度的直方图和密度线 hist(Buffer_DF1[[6]], col = "#FF990066", # 这里改成带透明度的十六进制颜色 border = "black", prob = TRUE, breaks = 60, xlim = c(14,17), add = TRUE) lines(density(na.omit(Buffer_DF1[[6]])), lwd = 2, col = "#FF9900") # 可选:给密度线也用橙色
方案2:使用scales包的alpha()函数
如果你不想手动算十六进制透明度,可以用scales包的alpha()函数,它能直接给颜色添加指定比例的透明度。记得先加载包哦。
修正后的完整代码:
# 先加载scales包(如果没安装先运行install.packages("scales")) library(scales) # 绘制第一个直方图和密度线 hist(Lake_DF1[[6]], col = "#006CFF", border = "black", prob = TRUE, breaks = 60, xlim = c(14,17), xlab = "Height [m]", main = "DTLB 6") lines(density(na.omit(Lake_DF1[[6]])), lwd = 2) # 叠加第二个带透明度的直方图和密度线 hist(Buffer_DF1[[6]], col = alpha("#FF9900", 0.4), # 正确使用alpha函数生成透明色 border = "black", prob = TRUE, breaks = 60, xlim = c(14,17), add = TRUE) lines(density(na.omit(Buffer_DF1[[6]])), lwd = 2, col = "#FF9900") # 可选:给密度线也用橙色
额外提示
一定要确保两个直方图的breaks参数设置一致(你已经设为60了,这点很好),这样两个直方图的柱子能对齐,叠加起来才美观。另外,给第二条密度线也配上橙色,能让图的对应关系更清晰。
内容的提问来源于stack exchange,提问作者Lisa




