我有一个ggplot地方画了一个normal probability curve并想突出显示多个区域,如下所示
library(dplyr)
library(ggplot2)
library(gghighlight)
df <- data.frame(x = seq(-5, 5, length.out = 100)) %>% mutate(y = dnorm(x))
ggplot(df, aes(x, y)) + geom_area(fill = "sky blue") + gghighlight(abs(x) < 1) + geom_area(fill = "red") + gghighlight(abs(x) < -1.6)
Run Code Online (Sandbox Code Playgroud)
这个情节行不通。但是,当我尝试填充单个区域时,即
`ggplot(df, aes(x, y)) +
geom_area(fill = "sky blue") + gghighlight(abs(x)` < 1)`
Run Code Online (Sandbox Code Playgroud)
这非常有效。
有没有一致的方法可以用不同的颜色突出显示多个区域?
我还想在我的图中添加常规图例来阐明不同颜色的定义,即sky blue = Area 01 and red = Area 02。
任何指针都会非常有帮助。
小智 5
你可以尝试ggplot2中的stat_function,我没有用gghighlight做到这一点,抱歉。它允许您选择一个函数和一个 geom,因此对于您的情况,在 geom_area 的帮助下,它似乎可以解决问题:
ggplot() +
xlim(-5, 5) +
stat_function(fun = dnorm, geom = "area", fill = "grey") +
stat_function(mapping = aes(fill = "Area 01"), fun = dnorm, xlim = c(-1, 1), geom = "area") +
stat_function(mapping = aes(fill = "Area 02"), geom = "area", fun = function(x) ifelse(abs(x) > 1.6, dnorm(x), NA)) +
scale_fill_manual(name = "Custom legend", values = c("skyblue", "red"))
Run Code Online (Sandbox Code Playgroud)
对于第一个函数,它只是标准正态分布,第二个函数是突出显示的,绝对值小于 1,因此只需使用 xlim,第三个函数可以使用 2 stat_function(..., xlim = ) 完成,但您也可以通过向量化函数。您可以指定填充映射以便创建图例,然后在scale_fill_manual中自定义颜色。
这是结果,我希望这是你想要的:
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |