首页 > 解决方案 > 从默认更改 geom_ribbon() 的路径顺序

问题描述

我对 geom_ribbon() 有疑问。我展示了几年来两个不同变量的变化。我不明白如何使 geom_ribbon 多年来一直遵循路径,而不是根据 x oder y 轴上值的增加来连接数据点。

这是一个最小的可重现示例。任何帮助表示赞赏:

library(tidyverse)
library(ggplot2)
plotdata <- data.frame(Region = factor(c("A", "A", "A", "B", "B", "B")), income = c(60, 80, 90, 40, 50, 55),
                       population = c(90,120,100, 80, 90, 100), year = factor(c(2020, 2050, 2080, 2020, 2050, 2080)),
                       income_sd = c(5, 8, 10, 2, 3, 3))

ggplot(data = plotdata, aes(x = income, y = population, shape = year,
                                   color = Region, fill = Region, group = Region)) +
  theme_minimal(base_size = 12) +
  geom_ribbon(aes(xmin = income - income_sd, xmax = income + income_sd), alpha = 0.2, color = NA) +
  geom_line() + geom_point() +
  geom_text(aes(label = year), color = "black")

在生成的图中,请注意区域 A 的一切看起来如何,因为 y 变量随年份单调增加。然而,在区域 B 的情况下,红丝带以错误的顺序连接,因为它以单调递增的顺序跟随 y 变量。这不是我想要的,我希望它遵循“年”变量。我如何实现这一目标?

将 ay = * 参数添加到 geom_ribbon() 会删除色带,从而违背了目的。我还玩过 geom_ribbon 的 order = * 参数,以及一年中数据框中的级别。没有成功。

谢谢!

阴谋:

标签: rggplot2geom-ribbon

解决方案


这绝对不是一个好的解决方案,但如果你只需要这个情节,看起来你可以破解它来设置你的数据:

plotdata_1 <- plotdata[plotdata$Region!='A' | plotdata$year!='2080',]
plotdata_2 <- plotdata[plotdata$Region=='A' & plotdata$year!='2020',]

然后将两个 ggplot 对象与 geom_ribbon 的几乎相同用途(如您在上面提供的那样)组合在一起,除了提供这两个不同的 dfs 作为您的数据。


推荐阅读