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

用ggplot绘制类似Great Acceleration渐变面积图出错,求技术排查

Great Acceleration风格渐变面积图的代码问题分析

问题背景

尝试用ggplot绘制类似Great Acceleration图的渐变面积图,使用的数据集和代码如下:

数据集

structure(list(Num = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 
5, 5), name = c("env_data_1", "env_data_2", "env_data_3", "env_data_1", 
"env_data_2", "env_data_3", "env_data_1", "env_data_2", "env_data_3", 
"env_data_1", "env_data_2", "env_data_3", "env_data_1", "env_data_2", 
"env_data_3"), value = c(2.71828182845905, 5.43656365691809, 
18.1548454853771, 7.38905609893065, 14.7781121978613, 25.1671682967919, 
20.0855369231877, 40.1710738463753, 62.256610769563, 54.5981500331442, 
109.196300066288, 164.794450099433, 148.413159102577, 296.826318205153, 
455.23947730773)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-15L))

绘图代码

env_data |> 
  ggplot(aes(x = Num, y = value, fill = value)) +
  geom_area() +
  scale_fill_gradient(low = "white", high = "red") +
  facet_wrap(~name, scales = "free_y")

图表对比

  • 当前生成的图表:每个分面的面积图为纯色填充,仅不同分面间因value大小存在颜色差异,单个面积图内部无从下到上的渐变效果。
  • 目标Great Acceleration风格图表:每个面积图内部从底部(低数值)到顶部(高数值)呈现连续颜色渐变,比如从浅色到红色的过渡。

代码存在的问题

  • geom_area的渐变逻辑错误:geom_area默认对整个多边形区域填充单一颜色,将fill映射到value,只会让每个分组(name+Num的组合)对应一种颜色,无法实现单个面积图内部沿y轴的渐变。
  • 缺少渐变填充的图层支持:原生geom_area不支持区域内部渐变,需要借助额外工具(如渐变滤镜)或重构数据来实现垂直方向的渐变效果。
  • 数据结构不匹配需求:当前数据仅包含每个x点的终点y值,没有覆盖从y=0到目标y值的连续区间,无法支撑渐变效果的展开。

修正思路示例

方法1:使用ggfx包添加渐变滤镜

library(ggplot2)
library(ggfx)

env_data |> 
  ggplot(aes(x = Num, y = value)) +
  with_gradient(
    geom_area(fill = "red"),
    direction = "vertical",
    start = "white",
    end = "red"
  ) +
  facet_wrap(~name, scales = "free_y")

方法2:重构数据配合geom_ribbon实现渐变

library(ggplot2)
library(tidyr)
library(dplyr)

# 构建每个x从0到对应value的连续区间数据
env_data_grad <- env_data |>
  group_by(name, Num) |>
  expand(y = seq(0, value, length.out = 100)) |>
  ungroup()

env_data_grad |>
  ggplot(aes(x = Num, ymin = 0, ymax = y, fill = y)) +
  geom_ribbon() +
  scale_fill_gradient(low = "white", high = "red") +
  facet_wrap(~name, scales = "free_y")

内容的提问来源于stack exchange,提问作者Robin Lindström

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:25:30