You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:14:53