0

我已经使用 ggplot、geom_line 和 geom_ribbon 等绘制了 3 个图。

我想在布局中合并 p_min、p_max 和 p_mean 的 y 轴图。

p_min、p_max 和 p_mean 必须位于 y 轴上。

x 轴是数字(1,2)。

让我知道如何使用布局中的复变量绘制多个 y 轴的图。

4

1 回答 1

0

我认为这里的关键是你应该组合你的数据,这样每个几何图形只需要引用一个表,源表的特征(例如 min vs. max vs. mean)在该组合表中明确作为变量.

这是制作一些假数据并将其保存到三个表中的快速函数:

make_fake <- function(a, b, label) {
  df <- data.frame(name = "apple", number = 1:5, value = a - b*sqrt(1:5), level = 2)
  df$lower = df$value - 0.5;  df$upper = df$value + 0.5;  df$label = label
  df
}

fake_min <- make_fake(3,.1, "min")
fake_max <- make_fake(7,1.5, "max")
fake_mean <- make_fake(5,0.8, "mean")

要将它们绘制在一起,如果将它们组合在一起使得每个几何只需要引用一个表就会更简单。我通过label在上面的假数据中添加一个变量来做到这一点。

如果我们使用base::rbind,我们可以将表格相互附加并绘制它们,通过将color美学连接到label变量来区分系列:

ggplot(data = rbind(fake_min, fake_max, fake_mean),
  aes(x=number, y=value, group=label))+
geom_line(aes(color=label))+
geom_ribbon(aes(ymin=lower, ymax=upper, fill=label, group=label), alpha=0.3)

在此处输入图像描述

也许您想要一个显示最高上和最低下的组合色带。然后你可以预先计算这些,这里使用 dplyr:

library(dplyr)
rbind(fake_min, fake_max, fake_mean) %>%
  group_by(number) %>%
  summarize(upper = max(upper),
         lower = min(lower)) -> fake_ribbon

rbind(fake_min, fake_max, fake_mean) %>%
  ggplot(aes(x=number)) +
  geom_line(aes(color=label, y=value))+
  geom_ribbon(data = fake_ribbon, aes(ymin=lower, ymax=upper), alpha=0.2)

在此处输入图像描述

于 2021-05-07T06:27:41.743 回答