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

堆叠面积图自定义颜色设置及非ggplot2实现方案问询

关于geom_area自定义填充色及非ggplot2绘制堆叠面积图的解决方案

首先澄清你的第一个疑问:geom_area完全支持自定义填充色,传闻并不准确。你可以通过scale_fill_manual()工具为每个Sector类别指定想要的颜色,下面是修改后的可运行代码示例:

# 生成示例数据
Sector <- rep(c("S01","S02","S03","S04","S05","S06","S07"),times=7)
Year <- as.numeric(rep(c("1950","1960","1970","1980","1990","2000","2010"),each=7))
Value <- runif(49, 10, 100)
data <- data.frame(Sector,Year,Value)

# 自定义颜色向量,顺序对应Sector的类别顺序
custom_colors <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

# 绘制带自定义填充色的堆叠面积图
library(ggplot2)
ggplot(data, aes(x=Year, y=Value, fill=Sector)) + 
  geom_area(stat="identity") +
  scale_fill_manual(values = custom_colors)

你可以把custom_colors替换成任意你需要的颜色代码(十六进制、颜色名称都支持),只要保证颜色数量和Sector类别数量一致即可。


如果确实不想使用ggplot2包,用base R也能实现堆叠面积图,核心思路是先把数据整理为宽格式,再通过polygon()函数逐层绘制区域,具体代码如下:

# 将长格式数据转换为宽格式(年份为行,各Sector为列)
library(tidyr)
data_wide <- pivot_wider(data, names_from = Sector, values_from = Value)

# 计算每个年份的累计值,用于堆叠
data_stack <- t(apply(data_wide[, -1], 1, cumsum))

# 自定义颜色向量
custom_colors <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

# 初始化绘图区域
plot(data_wide$Year, rep(0, nrow(data_wide)), type = "n", 
     ylim = c(0, max(data_stack)), xlab = "Year", ylab = "Value")

# 从最上层到最下层依次绘制堆叠区域
for (i in ncol(data_stack):1) {
  # 确定当前层的底部边界
  y_bottom <- ifelse(i == 1, 0, data_stack[, i-1])
  # 绘制多边形实现面积填充
  polygon(c(data_wide$Year, rev(data_wide$Year)), 
          c(data_stack[, i], rev(y_bottom)), 
          col = custom_colors[i], border = "white")
}

# 添加图例
legend("topright", legend = colnames(data_wide[, -1]), fill = custom_colors, bty = "n")

这段代码通过累计值计算堆叠层级,再逐个绘制多边形区域,同样能实现自定义颜色的堆叠面积图效果。

内容的提问来源于stack exchange,提问作者discoveries

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:49:16