考虑以下多边形图:
ggplot(df, aes(x=year,y=afw)) +
geom_polygon() +
scale_x_continuous("", expand=c(0,0), breaks=seq(1910,2010,10)) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)

但是,我想用两种不同的颜色填充它.例如,红色表示上方黑色区域0,蓝色表示下方黑色区域0.不幸的是,使用fill=col不填充正确的区域.
我尝试了以下代码(我添加了geom_line以便说明填充边框应该在哪里):
ggplot(df, aes(x=year,y=afw)) +
geom_line() +
geom_polygon(aes(fill=col), alpha=0.5) +
scale_x_continuous("", expand=c(0,0), breaks=seq(1910,2010,10)) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
这使:

正如你所看到的,它的填充量超出了应有的水平.我怎么解决这个问题?
数据:
df <- structure(list(year = c(1901, 1901, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, …Run Code Online (Sandbox Code Playgroud) 所以我有一个像这样的数据框:
a_data <-
data.frame(
f = f,
alpha = alpha,
asymptote = alpha_1_est)
Run Code Online (Sandbox Code Playgroud)
和这样的功能:
a_formula <- function(x) {
0.7208959 - 0.8049132 * exp(-21.0274 * x)}
Run Code Online (Sandbox Code Playgroud)
我将它们与ggplot2结合使用:
ggplot(a_data, aes(x = f, y = alpha)) +
geom_point() +
#function curve
stat_function(fun = a_formula,
color = "red") +
#asymptote of alpha
geom_hline(
yintercept = asymptote,
linetype = "longdash",
color = "blue")
Run Code Online (Sandbox Code Playgroud)
我想要并且找不到的方法是对y轴,函数曲线(红色)和渐近线(虚线)之间的区域进行着色,如下所示:

我尝试在其中挤压功能区或多边形,但无法正常工作-可能是因为我想在曲线上方而不是下方着色(下面的效果很好)。
数据框如下所示:
> head(a_data)
f alpha asymptote
1 0.01 0.007246302 0.7208959
2 0.03 0.374720198 0.7208959
3 …Run Code Online (Sandbox Code Playgroud) 这里和这里已经提出了类似的问题,但我似乎无法让它们适用于我的示例。如果我有一个看起来像这样的情节:
library(ggplot2)
set.seed(100)
x <- seq(0, 20, length.out=1000)
x1 <- seq(0, 18, length.out=1000)
x2 <- seq(0, 22, length.out=1000)
dat <- data.frame(x=x,
px = dexp(x, rate=0.5),
pxHi = dexp(x1, rate=0.5),
pxLo = dexp(x2, rate=0.5)
)
ggplot(dat, aes(x=x, y=px)) +
geom_line() +
geom_line(aes(x= x, y = pxHi), col = 'red') +
geom_line(aes(x= x, y = pxLo), col = 'blue') + theme_bw()
Run Code Online (Sandbox Code Playgroud)
我试图在红线和蓝线之间进行着色。我尝试使用geom_ribbon,但似乎无法让它正常工作。
关于我如何做到这一点有什么建议吗?