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

在R语言ggplot2中为密度图下方添加渐变填充

解决ggplot2密度图渐变填充不显示的问题

我来帮你搞定这个渐变填充的问题!你的代码里有几个小细节没处理对,导致填充效果没显示出来,下面是修正后的完整代码,再一步步讲清楚问题点:

修正后的完整代码

library(quantmod)
library(ggplot2)
library(ggfortify)

# 获取数据并整理成数据框(原数据是矩阵,转成数据框更适合ggplot处理)
getSymbols('XLE')
energy <- coredata(Delt(XLE$XLE.Adjusted, k = 1)["2018-03-08::"])
energy_df <- data.frame(daily_returns = as.vector(energy))

# 绘制带渐变填充的密度图
ggplot(energy_df, aes(x = daily_returns)) +
  geom_density(aes(fill = daily_returns), alpha = 0.7) +
  scale_fill_gradient2(
    low = "darkred",
    high = "navy",
    mid = "orange",
    midpoint = 0,
    name = "Daily Returns"
  ) +
  labs(x = "Daily Returns", y = "Density") +
  theme_minimal()

问题点解析

  1. 数据格式问题:原代码中energy是矩阵类型,ggplot对数据框的支持更友好,转成数据框并给列命名(比如daily_returns),能避免很多隐性问题。
  2. scale_fill_gradient2语法错误:你之前把energy作为第一个参数传入,这是不对的——这个参数应该是映射的变量名(或者可以省略,因为fill已经在aes里绑定了daily_returns),直接设置颜色参数即可。
  3. 填充效果的显示设置:geom_density默认会绘制曲线,但填充效果需要确保fill的映射正确,加上alpha = 0.7可以让渐变颜色更通透,避免过于厚重遮挡曲线。

另外,如果你想用另一种方式实现填充,也可以用stat_density结合geom = "area",效果是一样的:

ggplot(energy_df, aes(x = daily_returns)) +
  stat_density(geom = "area", aes(fill = daily_returns), alpha = 0.7) +
  scale_fill_gradient2(
    low = "darkred",
    high = "navy",
    mid = "orange",
    midpoint = 0,
    name = "Daily Returns"
  ) +
  labs(x = "Daily Returns", y = "Density") +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:35:39