gpt4 book ai didi

r - 使用密度图对特定区域进行着色 - ggplot2

转载 作者:行者123 更新时间:2023-12-04 11:34:23 24 4
gpt4 key购买 nike

我有一个关于 ggplot2 的数据可视化问题。

我想弄清楚如何在我的密度图中遮蔽特定区域。我用谷歌搜索了很多,我尝试了所有的解决方案。

我的代码是:

original_12 <- data.frame(sum=rnorm(100,30,5), sex=c("M","F"))
cutoff_12 <- 35
ggplot(data=original_12, aes(original_12$sum)) + geom_density() +
facet_wrap(~sex) +
geom_vline(data=original_12, aes(xintercept=cutoff_12),
linetype="dashed", color="red", size=1)

所以,从这个:

enter image description here

我要这个:

enter image description here

ggplot2 shade area under density curve by group 上的问题与我的不同,因为它们使用不同的组和图。

最佳答案

与这个 SO question 类似,除了 facet 增加了额外的复杂性。
您需要将 PANEL 数据重命名为“sex”并正确分解以匹配您现有的美学选项。您最初的“性别”因素是按字母顺序排列的(默认 data.frame 选项),起初有点令人困惑。

确保将绘图命名为“p”以创建 ggplot 对象:

p <- ggplot(data=original_12, aes(original_12$sum)) + 
geom_density() +
facet_wrap(~sex) +
geom_vline(data=original_12, aes(xintercept=cutoff_12),
linetype="dashed", color="red", size=1)

可以提取ggplot对象数据...这里是数据的结构:
str(ggplot_build(p)$data[[1]])

'data.frame': 1024 obs. of 16 variables:
$ y : num 0.00114 0.00121 0.00129 0.00137 0.00145 ...
$ x : num 17 17 17.1 17.1 17.2 ...
$ density : num 0.00114 0.00121 0.00129 0.00137 0.00145 ...
$ scaled : num 0.0121 0.0128 0.0137 0.0145 0.0154 ...
$ count : num 0.0568 0.0604 0.0644 0.0684 0.0727 ...
$ n : int 50 50 50 50 50 50 50 50 50 50 ...
$ PANEL : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
$ group : int -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
$ ymin : num 0 0 0 0 0 0 0 0 0 0 ...
$ ymax : num 0.00114 0.00121 0.00129 0.00137 0.00145 ...
$ fill : logi NA NA NA NA NA NA ...
$ weight : num 1 1 1 1 1 1 1 1 1 1 ...
$ colour : chr "black" "black" "black" "black" ...
$ alpha : logi NA NA NA NA NA NA ...
$ size : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
$ linetype: num 1 1 1 1 1 1 1 1 1 1 ...

它不能直接使用,因为您需要重命名 PANEL 数据并将其分解以匹配您的原始数据集。您可以在此处从 ggplot 对象中提取数据:
to_fill <- data_frame(
x = ggplot_build(p)$data[[1]]$x,
y = ggplot_build(p)$data[[1]]$y,
sex = factor(ggplot_build(p)$data[[1]]$PANEL, levels = c(1,2), labels = c("F","M")))

p + geom_area(data = to_fill[to_fill$x >= 35, ],
aes(x=x, y=y), fill = "red")

enter image description here

关于r - 使用密度图对特定区域进行着色 - ggplot2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46456217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com