You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动