首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggridges曲线下的阴影面积是多少?

ggridges曲线下的阴影面积是多少?
EN

Stack Overflow用户
提问于 2018-04-22 01:02:32
回答 3查看 924关注 0票数 1

我想用红色突出显示由ggridges创建的多个地块中所有超过20度的温度。

代码语言:javascript
复制
library(tidyverse)
library(ggridges)

ggplot(t2, aes(x = t, y = year)) +
  stat_density_ridges(geom = "density_ridges_gradient", quantile_lines = TRUE, quantiles = 2) +
  theme_ridges()

输出dput(t2)

代码语言:javascript
复制
structure(list(Date = c("1853-01", "1853-02", "1853-03", "1853-04", 
"1853-05", "1853-06", "1853-07", "1853-08", "1853-09", "1853-10", 
"1853-11", "1853-12", "1854-01", "1854-02", "1854-03", "1854-04", 
"1854-05", "1854-06", "1854-07", "1854-08", "1854-09", "1854-10", 
"1854-11", "1854-12"), t = c(-5.6, -5.3, -1.5, 4.9, 9.8, 17.9, 
18.5, 19.9, 14.8, 6.2, 3.1, -4.3, -5.9, -7, -1.3, 4.1, 10, 16.8, 
22, 20, 16.1, 10.1, 1.8, -5.6), year = c("1853", "1853", "1853", 
"1853", "1853", "1853", "1853", "1853", "1853", "1853", "1853", 
"1853", "1854", "1854", "1854", "1854", "1854", "1854", "1854", 
"1854", "1854", "1854", "1854", "1854")), row.names = c(NA, -24L
), class = c("tbl_df", "tbl", "data.frame"), .Names = c("Date", 
"t", "year"))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-22 03:39:42

我们可以做以下工作:

代码语言:javascript
复制
gg <- ggplot(t2, aes(x = t, y = year)) +
    stat_density_ridges(
        geom = "density_ridges_gradient",
        quantile_lines = TRUE,
        quantiles = 2) +
    theme_ridges()

# Build ggplot and extract data
d <- ggplot_build(gg)$data[[1]]

# Add geom_ribbon for shaded area
gg +
    geom_ribbon(
        data = transform(subset(d, x >= 20), year = group),
        aes(x, ymin = ymin, ymax = ymax, group = group),
        fill = "red",
        alpha = 0.2);

这样做的目的是从ggplot构建中提取地块数据;然后我们为x >= 20添加一个geom_ribbon来对所有密度脊中的区域>=20进行阴影处理。

如果没有transform(..., year = group)),就会出现一个错误object 'year' not found;我不知道这是为什么,但是添加transform(..., year = group)是有效的。

票数 3
EN

Stack Overflow用户

发布于 2018-04-24 21:05:56

使用巧妙的fill美学是可以做到这一点的:

代码语言:javascript
复制
ggplot(t2, aes(x = t, y = year, fill = ifelse(..x..>20, "above 20", "below 20"))) +
  stat_density_ridges(geom = "density_ridges_gradient", quantile_lines = TRUE, quantiles = 2) +
  theme_ridges() +
  scale_fill_manual(values = c("red", "gray70"), name = NULL)

而且,如果希望填充的区域部分透明,可以使用RGBA颜色(因为geom_density_ridges_gradient()不支持alpha):

代码语言:javascript
复制
ggplot(t2, aes(x = t, y = year, fill = ifelse(..x..>20, "above 20", "below 20"))) +
  stat_density_ridges(geom = "density_ridges_gradient", quantile_lines = TRUE, quantiles = 2) +
  theme_ridges() +
  scale_fill_manual(values = c("#FF0000B3", "#B3B3B3B3"), name = NULL)

票数 2
EN

Stack Overflow用户

发布于 2018-04-22 23:31:09

根据你的数据,我不知道你到底在找什么,但也许这会给你提供线索:

代码语言:javascript
复制
> ggplot(t2, aes(x = t, y = year, fill=factor(..quantile..))) +
     stat_density_ridges(geom = "density_ridges_gradient", calc_ecdf=TRUE, quantile_lines=TRUE, quantiles=2) + 
     scale_fill_manual(name = "T > 20", values = c("#ececcc", "#8b1a1a"), labels = c("Below 20", "Above 20")) +
     theme_ridges()

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49961582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档