在R中绘制地层堆叠柱状图的两个技术问题求助
地层堆叠柱状图问题解决方案
1. 调整堆叠顺序为从上到下Layer A、B、C
ggplot的堆叠顺序由因子水平决定,默认按字符顺序排列。由于你反转了y轴(顶部为深度0,向下深度递增),需将Layer列转换为指定水平顺序的因子,确保堆叠后从上到下呈现A→B→C的顺序:
# 将Layer转换为因子,指定水平顺序 ST1$Layer <- factor(ST1$Layer, levels = c("A", "B", "C"))
设置后,ggplot会按因子水平从下往上堆叠,配合scale_y_reverse(),最终显示效果就是从上到下依次为Layer A、B、C。
2. 正确使用munsell包匹配颜色
直接将Munsell颜色字符串传给scale_fill_manual无效,需要用munsell包的mnsl()函数把Munsell颜色转换为ggplot可识别的RGB颜色值:
# 转换Munsell颜色为RGB值 MunsellPalette <- c(mnsl("5 YR 4/3"), mnsl("10 YR 5/3"), mnsl("10 YR 5/4"))
如果要直接从数据框的Colour列提取并转换颜色,也可以简化为:
MunsellPalette <- mnsl(unique(ST1$Colour))
修正后的完整代码
##Visualize Stratigraphy Test ### #Load Libraries library(readxl) library(ggplot2) library(munsell) ST1 <- data.frame( Name=rep(c("ST1", "ST2"), each=3), Layer=rep(LETTERS[1:3], 2), DepthCM=c(8,23,42,10,20,60), Colour= rep(c("5 YR 4/3", "10 YR 5/3", "10 YR 5/4"), 2) ) # 修正1:设置Layer的因子顺序 ST1$Layer <- factor(ST1$Layer, levels = c("A", "B", "C")) # 修正2:用mnsl()转换Munsell颜色 MunsellPalette <- c(mnsl("5 YR 4/3"), mnsl("10 YR 5/3"), mnsl("10 YR 5/4")) #Plot Line Graph (Unannotated) p1 <- ggplot() + geom_bar(data=ST1, aes(x= Name, y= DepthCM, fill= Layer), position = 'stack', stat = 'identity') + ggtitle("Stratigraphy") + #Change Title theme_gray() + theme(axis.line = element_line(size = 1, colour = "black"), aspect.ratio = 1, plot.title = element_text(hjust = 0.5)) + theme(text = element_text(size = 15))+ scale_y_reverse (expand = c(0, 0)) + scale_fill_manual(values = MunsellPalette) ggsave(file="ST1Strat.png", dpi = 600) p1
效果说明
- 堆叠顺序:调整因子水平后,柱状图从上到下会依次显示Layer A、B、C,贴合地层从上到下的实际逻辑。
- 颜色匹配:通过
mnsl()转换后,填充色会准确对应你野外观测记录的Munsell颜色。
内容的提问来源于stack exchange,提问作者Liam Wadsworth
相关产品推荐
相关产品推荐

