【问题标题】:Gradient Shading Under Density Plot in R (ggplot2)R中的密度图下的渐变阴影(ggplot2)
【发布时间】:2018-04-06 19:24:52
【问题描述】:

我正在尝试使用 ggplot2 在 R 中的密度图下渐变阴影。我不断得到密度图,但没有阴影。

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

getSymbols('XLE')
energy <- coredata(Delt(XLE$XLE.Adjusted, k = 1)["2018-03-08::"])
ggplot(energy, aes(energy)) +
    geom_density(aes(x = energy, fill = energy))+
    scale_fill_gradient2( energy ,
        low = "darkred", high = "navy", mid = "orange", midpoint = 0)

这会产生一条完全没有填充的曲线。

这是一个具有可重复数据的类似示例:

test.data <- data.frame(exp(runif(1000,0,1)))

ggplot(test.data, aes(test.data))+
    geom_density(aes(fill = test.data)) +
    scale_fill_gradient(test.data, low = "navy", high = "red")

产生

【问题讨论】:

  • idownvotedbecau.se/nomcve你能用你可以与我们分享的数据子集重现这个吗?
  • 好的,我已经更新了原始问题以包含一个具有可重现数据的示例。
  • 我不知道你的示例是如何生成图表的,因为代码有几个错误,包括没有向geom_density 提供x 美学,以及向aes 提供数据对象而不是列名称。我也不明白想要的结果是什么 - 你希望如何填写? fill 美学对于 geom_density 来说是离散的。在您的原始代码中,如果您将 xfill 设置为相同的连续变量 fill 将什么也不做,并且不清楚您期望它做什么。请看例子:ggplot2.tidyverse.org/reference/geom_density.html
  • 最简单的解决方案是:在密度下绘制直方图并根据x轴值对其进行着色
  • 我正在尝试将曲线下的填充颜色与 x 轴的值联系起来。我希望颜色从“海军蓝”变为“深红色”,而不是一种填充颜色。

标签: r ggplot2


【解决方案1】:

好的,我花了整个周末研究这个问题,终于找到了在 R 中相对于 x 轴的密度图下着色的答案。

让我们设置一些可重现的数据:

input = runif(1000, 0, 1)
output = exp(input) + cos(input)

然后我们需要在数据框中添加一个人造因素“名称”:

name = rep("name", length(output))
data.df = data.frame(input, output, name)
data.df$name = as.factor(data.frame$name)

从这里,我们可以使用 ggplot2 和 ggridges 库:

library(ggplot2)
library(ggridges)

ggplot( data.df, aes(x=output, y=name, fill=..x..))+
geom_density_ridges_gradient()+
scale_fill_gradient(low="red4", high="navy")+
ylab(" ")

产生: this plot

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 2020-08-29
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多