R ggplot:如何在不重叠每个独立填充的情况下,将geom_面积()或类似物应用于三条不同geom_线()下的填充面积?

R ggplot:如何在不重叠每个独立填充的情况下,将geom_面积()或类似物应用于三条不同geom_线()下的填充面积?,r,ggplot2,plot,fill,geom-area,R,Ggplot2,Plot,Fill,Geom Area,根据我的数据,我绘制了一张图,图中显示了1年后的死亡概率:nd$y_et,3年:nd$y_tre和5年:nd$y_fem,分别作为切除淋巴结数的函数 问题:如何填充nd$y_et,y_tre,y_fem的三条geom_线()下方的每个区域,而不使填充重叠后续的geom_线+填充 我尝试了geom_区域和geom_多边形,但都没有找到合适的解决方案 当前绘图 与 应给出预期输出: 更新 我应用了下面提供的解决方案,得到 ndd %>% rename(X3=y_et, X2=y_tr

根据我的数据,我绘制了一张图,图中显示了1年后的死亡概率:
nd$y_et
,3年:
nd$y_tre
和5年:
nd$y_fem
,分别作为切除淋巴结数的函数

问题:如何填充
nd$y_et,y_tre,y_fem
的三条
geom_线()
下方的每个区域,而不使填充重叠后续的
geom_线
+
填充

我尝试了
geom_区域
geom_多边形
,但都没有找到合适的解决方案

当前绘图

应给出预期输出:

更新

我应用了下面提供的解决方案,得到

ndd %>% 
  rename(X3=y_et, X2=y_tre, X1=y_fem) %>% 
  pivot_longer(values_to="N", names_to="Variable", cols=c(X1:X3)) %>%
  ggplot(aes(x=n_fjernet, y=N, fill=Variable, colour=Variable)) +
  geom_area(position=position_identity(), alpha=.15) +
  geom_line(size=3, color="white") +
  geom_line(size=.75) +
  scale_fill_manual(values=c("#2C77BF", "#E38072", "#6DBCC3")) +
  scale_colour_manual(values=c("#2C77BF", "#E38072", "#6DBCC3")) +
  scale_x_continuous(breaks = seq(0,10,5), limits=c(0,10))

当我们接近预期的绘图时,不幸的是仍然有重叠的
填充。在
红色填充后面可以看到
蓝色填充
;而且,
蓝色填充
红色填充
都位于
绿色填充
后面

问题:如何在不重叠的情况下包含
填充内容

我的数据
nd

    nd <- structure(list(y_et = c(0.473, 0.473, 0.472, 0.471, 0.471, 0.47, 
0.47, 0.469, 0.468, 0.468, 0.467, 0.467, 0.466, 0.465, 0.465, 
0.464, 0.464, 0.463, 0.462, 0.462, 0.461, 0.461, 0.46, 0.459, 
0.459, 0.458, 0.458, 0.457, 0.456, 0.456, 0.455, 0.455, 0.454, 
0.453, 0.453, 0.452, 0.452, 0.451, 0.45, 0.45, 0.449, 0.449, 
0.448, 0.447, 0.447, 0.446, 0.446, 0.445, 0.445, 0.444, 0.443, 
0.443, 0.442, 0.442, 0.441, 0.44, 0.44, 0.439, 0.439, 0.438, 
0.438, 0.437, 0.436, 0.436, 0.435, 0.435, 0.434, 0.433, 0.433, 
0.432, 0.432, 0.431, 0.431, 0.43, 0.429, 0.429, 0.428, 0.428, 
0.427, 0.427, 0.426, 0.425, 0.425, 0.424, 0.424, 0.423, 0.423, 
0.422, 0.421, 0.421, 0.42, 0.42, 0.419, 0.419, 0.418, 0.417, 
0.417, 0.416, 0.416, 0.415), y_tre = c(0.895, 0.894, 0.894, 0.893, 
0.893, 0.893, 0.892, 0.892, 0.891, 0.891, 0.89, 0.89, 0.889, 
0.889, 0.889, 0.888, 0.888, 0.887, 0.887, 0.886, 0.886, 0.886, 
0.885, 0.885, 0.884, 0.884, 0.883, 0.883, 0.882, 0.882, 0.881, 
0.881, 0.881, 0.88, 0.88, 0.879, 0.879, 0.878, 0.878, 0.877, 
0.877, 0.876, 0.876, 0.875, 0.875, 0.875, 0.874, 0.874, 0.873, 
0.873, 0.872, 0.872, 0.871, 0.871, 0.87, 0.87, 0.869, 0.869, 
0.868, 0.868, 0.867, 0.867, 0.866, 0.866, 0.865, 0.865, 0.865, 
0.864, 0.864, 0.863, 0.863, 0.862, 0.862, 0.861, 0.861, 0.86, 
0.86, 0.859, 0.859, 0.858, 0.858, 0.857, 0.857, 0.856, 0.856, 
0.855, 0.855, 0.854, 0.854, 0.853, 0.853, 0.852, 0.852, 0.851, 
0.851, 0.85, 0.85, 0.849, 0.848, 0.848), y_fem = c(0.974, 0.974, 
0.973, 0.973, 0.973, 0.973, 0.973, 0.973, 0.972, 0.972, 0.972, 
0.972, 0.972, 0.971, 0.971, 0.971, 0.971, 0.971, 0.971, 0.97, 
0.97, 0.97, 0.97, 0.97, 0.969, 0.969, 0.969, 0.969, 0.969, 0.968, 
0.968, 0.968, 0.968, 0.968, 0.967, 0.967, 0.967, 0.967, 0.967, 
0.966, 0.966, 0.966, 0.966, 0.966, 0.965, 0.965, 0.965, 0.965, 
0.965, 0.964, 0.964, 0.964, 0.964, 0.963, 0.963, 0.963, 0.963, 
0.963, 0.962, 0.962, 0.962, 0.962, 0.961, 0.961, 0.961, 0.961, 
0.961, 0.96, 0.96, 0.96, 0.96, 0.959, 0.959, 0.959, 0.959, 0.958, 
0.958, 0.958, 0.958, 0.957, 0.957, 0.957, 0.957, 0.957, 0.956, 
0.956, 0.956, 0.956, 0.955, 0.955, 0.955, 0.955, 0.954, 0.954, 
0.954, 0.954, 0.953, 0.953, 0.953, 0.952), n_fjernet = c(0, 0.1, 
0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 
1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 
2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 
4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.1, 5.2, 5.3, 
5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 
6.7, 6.8, 6.9, 7, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 
8, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9, 9, 9.1, 9.2, 
9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9)), row.names = c(NA, -100L), class = c("data.table", 
"data.frame"))
nd
给予

这只是一个根据目标生成数据的问题。在这里,您的数据不整洁,因为您的列名包含信息

作为对OP以下评论的回应

啊!!这让事情变得有点棘手。在
geom_区域
中,默认的
位置
堆栈
,这意味着每个彩色区域的高度是相应变量的高度(堆栈的总高度是各个值的总和-例如,在
n_fjernet
=0
,您有
y_fem=0.981
y_tre=0.9199
y_et=0.514
,堆栈的总高度约为
2.5`。查看原始图形,您希望以其原始值绘制每一行,并且那它和下一个下一个伴星之间的距离是多少

原则上,这很简单。您可以在
geom\u区域()
中设置
position=position\u identity()
。但是如果要按您希望的方式工作,您需要手动跟踪变量值的顺序。例如,使用您的数据,我们可以得到:

nd %>% 
  pivot_longer(values_to="N", names_to="Variable", cols=c(y_fem:y_et)) %>% 
  ggplot(aes(x=n_fjernet, y=N, fill=Variable)) + 
  geom_area(position=position_identity())

根本不是你想要的

在这个特殊的例子中,一个真正令人讨厌的获得正确结果的方法是

还可以通过自定义用于创建填充的比例来控制区域的打印顺序,如所述

另一种选择是使用
geom_ribbon
而不是
geom_area
。但是无论使用哪种方法,我不知道如果不手动控制填充的创建顺序,如何才能做到这一点。这似乎是希望在绝对位置绘制值并填充区域的必然结果ath.我能想到的唯一可能性是为每个填充设置小于1的alpha值。但是,我个人认为这看起来很难看:

nd %>% 
  pivot_longer(values_to="N", names_to="Variable", cols=c(y_fem:y_et)) %>% 
  ggplot(aes(x=n_fjernet, y=N, fill=Variable)) + 
  geom_area(position=position_identity(), alpha=0.4)

如果变量的顺序随着x轴的移动而改变,你会怎么做?就我个人而言,我会放弃填充,只使用不同颜色的线。但这是你的决定

如果有人有更好的选择,我很想看看

*编辑2* 回答OP关于手动控制颜色的问题:

nd %>% 
  rename(X3=y_et, X2=y_tre, X1=y_fem) %>% 
  pivot_longer(values_to="N", names_to="Variable", cols=c(X1:X3)) %>% 
  ggplot(aes(x=n_fjernet, y=N, fill=Variable, colour=Variable)) + 
  geom_area(position=position_identity()) +
  geom_line() +
  scale_fill_manual(values=c("pink", "darkseagreen2", "steelblue2")) +
  scale_colour_manual(values=c("red", "green4", "blue"))
给我

就我所见,我的代码与你的代码非常相似,所以我不知道为什么它对我有效,而对你无效。[你记得把
color=Variable
放在
aes()
里面吗?]

我的颜色是从哪里来的

您在评论中提到了
geom_point
。这是打字错误吗


顺便说一句,我们不需要全部200个数据点来解决这个问题。半打就足够了。最多一打。也许下一次…;)

Hi@Limey。谢谢!这就解决了。谢谢你的
tidy
链接。再次你好。我刚刚注意到
y轴
(0,1)
(0100)不相关
。如何解决这个问题,使y轴显示
0-100%
?谢谢!绝对做到了:)所以我在代码中添加了
+geom_point()
。请演示如何手动更改添加的
geom_线
(它们当前均为黑色)的颜色以及每个
geom_区域的
填充
?例如,我尝试添加
+比例填充手册(值=c(“红色”、“绿色”、“黄色”))
,但是,颜色图打印的颜色与指定的颜色不同。类似的,我尝试了
scale\u color\u manual
,但没有结果。非常感谢-是的,
geom\u point
是一个打字错误-我的意思是
geom\u line()
。然而,我感到困惑的是,为什么
+scale\u fill\u manual
以前对我不起作用。不管怎样,它现在工作得很好。非常感谢你的帮助:)祝你度过愉快的一天!你好,李米。我再次更新了这个问题。正如您所看到的,
fill
是重叠的。可以避免这种情况,以便
填充
/
几何图形区域
限制在每条
几何图形线之间。我希望我的问题有意义。
nd %>% 
  rename(X3=y_et, X2=y_tre, X1=y_fem) %>% 
  pivot_longer(values_to="N", names_to="Variable", cols=c(X1:X3)) %>% 
  ggplot(aes(x=n_fjernet, y=N, fill=Variable)) +   
  geom_area(position=position_identity())
nd %>% 
  pivot_longer(values_to="N", names_to="Variable", cols=c(y_fem:y_et)) %>% 
  ggplot(aes(x=n_fjernet, y=N, fill=Variable)) + 
  geom_area(position=position_identity(), alpha=0.4)
nd %>% 
  rename(X3=y_et, X2=y_tre, X1=y_fem) %>% 
  pivot_longer(values_to="N", names_to="Variable", cols=c(X1:X3)) %>% 
  ggplot(aes(x=n_fjernet, y=N, fill=Variable, colour=Variable)) + 
  geom_area(position=position_identity()) +
  geom_line() +
  scale_fill_manual(values=c("pink", "darkseagreen2", "steelblue2")) +
  scale_colour_manual(values=c("red", "green4", "blue"))