包裹的ggplot,在行之间填充

Wrapped ggplot, fill between lines

我们有一个视觉效果显示代表 CPE 质量 KPI 的聚合数据。这里简化了,只用了1天:

在左侧,我们看到两类参数。 SNR 和 RX,拆分成 AVG,MIN_AVG,MAX_AVG。
现在我想填充 snr_min_avg_dasnr_max_avg_ds 之间以及 rx_min_avgrx_max_avg 之间的区域,但它不起作用。我试过了:

df_snr_ds_ribbon = df_topo_cpe[, c("dt", "snr_min_avg_ds", "snr_max_avg_ds")]
df_snr_ds_ribbon[, Type:="Downstream"]

ggplot(df2plot, aes(x=dt, y=Value, color=Parameter, group=Parameter)) +
  geom_line() + 
  geom_ribbon(data=df_snr_ds_ribbon, aes(ymin=snr_min_avg_ds, ymax=snr_max_avg_ds)) +  
  facet_wrap(~Type) +
  theme_bw() +
  scale_color_manual(values=group.colors)

--> Error in FUN(X[[i]], ...) : object 'Parameter' not found

有人可以帮忙吗?


MWE

library(ggplot2)
library(data.table)

df2plot = structure(list(dt = structure(c(1652659200, 1652662800, 
                                                                                 1652666400, 1652670000, 1652673600, 1652677200, 1652680800, 1652709600, 
                                                                                 1652713200, 1652716800, 1652720400, 1652724000, 1652727600, 1652731200, 
                                                                                 1652734800, 1652738400, 1652742000, 1652745600, 1652749200, 1652752800, 
                                                                                 1652756400, 1652760000, 1652763600, 1652767200, 1652770800, 1652774400, 
                                                                                 1652778000, 1652781600, 1652785200, 1652788800, 1652659200, 1652662800, 
                                                                                 1652666400, 1652670000, 1652673600, 1652677200, 1652680800, 1652709600, 
                                                                                 1652713200, 1652716800, 1652720400, 1652724000, 1652727600, 1652731200, 
                                                                                 1652734800, 1652738400, 1652742000, 1652745600, 1652749200, 1652752800, 
                                                                                 1652756400, 1652760000, 1652763600, 1652767200, 1652770800, 1652774400, 
                                                                                 1652778000, 1652781600, 1652785200, 1652788800, 1652659200, 1652662800, 
                                                                                 1652666400, 1652670000, 1652673600, 1652677200, 1652680800, 1652709600, 
                                                                                 1652713200, 1652716800, 1652720400, 1652724000, 1652727600, 1652731200, 
                                                                                 1652734800, 1652738400, 1652742000, 1652745600, 1652749200, 1652752800, 
                                                                                 1652756400, 1652760000, 1652763600, 1652767200, 1652770800, 1652774400, 
                                                                                 1652778000, 1652781600, 1652785200, 1652788800, 1652659200, 1652662800, 
                                                                                 1652666400, 1652670000, 1652673600, 1652677200, 1652680800, 1652709600, 
                                                                                 1652713200, 1652716800, 1652720400, 1652724000, 1652727600, 1652731200, 
                                                                                 1652734800, 1652738400, 1652742000, 1652745600, 1652749200, 1652752800, 
                                                                                 1652756400, 1652760000, 1652763600, 1652767200, 1652770800, 1652774400, 
                                                                                 1652778000, 1652781600, 1652785200, 1652788800, 1652659200, 1652662800, 
                                                                                 1652666400, 1652670000, 1652673600, 1652677200, 1652680800, 1652709600, 
                                                                                 1652713200, 1652716800, 1652720400, 1652724000, 1652727600, 1652731200, 
                                                                                 1652734800, 1652738400, 1652742000, 1652745600, 1652749200, 1652752800, 
                                                                                 1652756400, 1652760000, 1652763600, 1652767200, 1652770800, 1652774400, 
                                                                                 1652778000, 1652781600, 1652785200, 1652788800, 1652659200, 1652662800, 
                                                                                 1652666400, 1652670000, 1652673600, 1652677200, 1652680800, 1652709600, 
                                                                                 1652713200, 1652716800, 1652720400, 1652724000, 1652727600, 1652731200, 
                                                                                 1652734800, 1652738400, 1652742000, 1652745600, 1652749200, 1652752800, 
                                                                                 1652756400, 1652760000, 1652763600, 1652767200, 1652770800, 1652774400, 
                                                                                 1652778000, 1652781600, 1652785200, 1652788800, 1652659200, 1652662800, 
                                                                                 1652666400, 1652670000, 1652673600, 1652677200, 1652680800, 1652709600, 
                                                                                 1652713200, 1652716800, 1652720400, 1652724000, 1652727600, 1652731200, 
                                                                                 1652734800, 1652738400, 1652742000, 1652745600, 1652749200, 1652752800, 
                                                                                 1652756400, 1652760000, 1652763600, 1652767200, 1652770800, 1652774400, 
                                                                                 1652778000, 1652781600, 1652785200, 1652788800), class = c("POSIXct", 
                                                                                                                                            "POSIXt"), tzone = "UTC"), Parameter = structure(c(1L, 1L, 1L, 
                                                                                                                                                                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                                               1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                                               2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                                               2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
                                                                                                                                                                                               4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
                                                                                                                                                                                               4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
                                                                                                                                                                                               6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
                                                                                                                                                                                               6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
                                                                                                                                                                                               7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
                                                                                                                                                                                               7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
                                                                                                                                                                                               8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
                                                                                                                                                                                               8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 
                                                                                                                                                                                               9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L), .Label = c("snr_avg_ds", 
                                                                                                                                                                                                                                                                       "rx_avg", "ccer_ds", "snr_avg_us", "ccer_us", "snr_min_avg_ds", 
                                                                                                                                                                                                                                                                       "snr_max_avg_ds", "rx_min_avg", "rx_max_avg"), class = "factor"), 
                         Value = c(36.1282857259115, 36.1323334466843, 36.1735545967428, 
                                   36.1354285648891, 36.2431428909302, 36.2615167066384, 36.2081553912857, 
                                   36.0234598006117, 36.0861322205022, 36.0647170138809, 36.0507547990331, 
                                   36.1089622029718, 36.1176191057478, 36.172904750279, 36.2025480453785, 
                                   36.2238389146271, 36.2320953005836, 36.2217061282334, 36.247971786643, 
                                   36.314571525937, 36.2843811398461, 36.2536191395351, 36.1984977184887, 
                                   36.1924882450014, 36.1857747001827, 36.1333961936663, 36.0565877164145, 
                                   36.0683491364965, 36.0156132320188, 36.0109860057562, -2.43223808254337, 
                                   -2.38038093995835, -2.40497629111412, -2.33342857075234, 
                                   -2.30533333222071, -2.27763032802862, -2.42839806827093, 
                                   -3.08758295037876, -2.86150944247877, -2.98240565932092, 
                                   -2.86051885235422, -2.72627358584893, -2.70666666775942, 
                                   -2.56400000178033, -2.38836538821208, -2.42047392380075, 
                                   -2.4352380920645, -2.39099525966598, -2.34820755044842, -2.30785715322764, 
                                   -2.17823812269739, -2.23514286584797, -2.304460096361, -2.49281690726188, 
                                   -2.60521126847207, -2.7361792446079, -2.92545022561228, -3.00509433938577, 
                                   -3.14235849855116, -3.20323943874926, 40.9788829892181, 41.0245574241461, 
                                   40.9719527488531, 41.046650358688, 40.9960457912711, 41.0518596560456, 
                                   41.0139245363039, 40.9507399311772, 41.0114345020718, 40.9680547361021, 
                                   41.0208789154335, 40.9371752032527, 40.93212890625, 40.9442585485953, 
                                   40.8269438037166, 40.774166142499, 40.9881010938574, 40.963471589265, 
                                   41.0165270876002, 40.9033326926055, 41.0521289684154, 41.0287492540148, 
                                   40.9563419377362, 40.9035179261808, 40.947499398832, 40.9070827166239, 
                                   40.9819438015973, 41.0581010712518, 40.9659252873174, 41.0179621201974, 
                                   26.2000007629395, 27, 27.6000003814697, 25.6000003814697, 
                                   26.8999996185303, 27.2999992370606, 27.5, 27.3999996185303, 
                                   27.7000007629395, 26.8999996185303, 25.6000003814697, 27.2000007629395, 
                                   27.1000003814697, 28.6000003814697, 28, 28, 27.3999996185303, 
                                   27.2000007629395, 27.2000007629395, 29.7600002288818, 26.6000003814697, 
                                   27.5, 25.1000003814697, 26.6000003814697, 27, 26.5, 27.2000007629395, 
                                   27, 27, 27.5, 41.2200012207031, 41.2099990844727, 41.2400016784668, 
                                   41.2400016784668, 41.4000015258789, 41.4099998474121, 41.4199981689453, 
                                   41.2000007629395, 41.1100006103516, 41.1399993896484, 41.189998626709, 
                                   41.1399993896484, 41.2999992370605, 40.7900009155274, 41.060001373291, 
                                   41.3800010681152, 41.3899993896484, 40.8400001525879, 40.8400001525879, 
                                   41.4199981689453, 40.5900001525879, 41.1500015258789, 41.0099983215332, 
                                   40.2799987792969, 41.25, 40.560001373291, 41.060001373291, 
                                   41.4199981689453, 41.439998626709, 41.1599998474121, -15.9200000762939, 
                                   -15.9200000762939, -15.9399995803833, -15.9399995803833, 
                                   -15.8900003433228, -15.8599996566772, -15.9200000762939, 
                                   -16.5300006866455, -16.3500003814697, -16.4699993133545, 
                                   -16.3799991607666, -16.2600002288818, -16.1800003051758, 
                                   -16.1399993896484, -16.0799999237061, -15.960000038147, -17.1499996185303, 
                                   -17.1599998474121, -17.1100006103516, -17.0200004577637, 
                                   -16.9500007629395, -16.9400005340576, -16.9599990844727, 
                                   -17.1499996185303, -17.1900005340576, -17.3500003814697, 
                                   -17.5599994659424, -17.6399993896484, -17.75, -17.8600006103516, 
                                   21.1700000762939, 21.1599998474121, 21.1399993896484, 21.2000007629395, 
                                   21.2800006866455, 21.2800006866455, 20.9599990844727, 20.4899997711182, 
                                   20.6700000762939, 20.6599998474121, 20.6900005340576, 20.7800006866455, 
                                   20.8099994659424, 20.8799991607666, 21.0400009155273, 21.1800003051758, 
                                   21.2199993133545, 21.2199993133545, 21.2999992370606, 21.3799991607666, 
                                   21.4200000762939, 21.4899997711182, 21.4099998474121, 21.0100002288818, 
                                   20.8299999237061, 20.7800006866455, 20.6200008392334, 20.5599994659424, 
                                   20.4099998474121, 20.4300003051758), Type = c("Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Upstream", 
                                                                                 "Upstream", "Upstream", "Upstream", "Upstream", "Upstream", 
                                                                                 "Upstream", "Upstream", "Upstream", "Upstream", "Upstream", 
                                                                                 "Upstream", "Upstream", "Upstream", "Upstream", "Upstream", 
                                                                                 "Upstream", "Upstream", "Upstream", "Upstream", "Upstream", 
                                                                                 "Upstream", "Upstream", "Upstream", "Upstream", "Upstream", 
                                                                                 "Upstream", "Upstream", "Upstream", "Upstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream", "Downstream", 
                                                                                 "Downstream", "Downstream", "Downstream", "Downstream"), 
                         SNR_Threshold = c(35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
                                           30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
                                           30, 30, 30, 30, 30, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 
                                           35, 35, 35, 35, 35)), row.names = c(NA, -210L), class = c("data.table", 
                                                                                                     "data.frame"))


group.colors <- c(snr_avg_ds="red3", snr_min_avg_ds="red1", snr_max_avg_ds="red1",
                  rx_avg="royalblue4", rx_min_avg="royalblue1", rx_max_avg="royalblue1",
                  snr_avg_us="royalblue1")

ggplot(df2plot, aes(x=dt, y=Value, color=Parameter, group=Parameter)) +
  geom_line() + 
  facet_wrap(~Type) +
  theme_bw() +
  scale_color_manual(values=group.colors)

也许这就是您要找的?不幸的是,您的 MWE 无法重现,因为它缺少数据集 df_topo_cpe。但我试了一下,因为我猜这是你的数据 df2plot 的宽格式,因此问题是你用于色带的数据集缺少列 ParameterValue您指定为全局 aes。

要解决此问题,您可以简单地将这些美学设置为 geom_line 层。

group.colors <- c(
  snr_avg_ds = "red3", snr_min_avg_ds = "red1", snr_max_avg_ds = "red1",
  rx_avg = "royalblue4", rx_min_avg = "royalblue1", rx_max_avg = "royalblue1",
  snr_avg_us = "royalblue1"
)

df_snr_ds_ribbon = df2plot[Parameter %in% c("dt", "snr_min_avg_ds", "snr_max_avg_ds"), ] |> 
  tidyr::pivot_wider(names_from = "Parameter", values_from = "Value")

ggplot(df2plot, aes(x = dt)) +
  geom_line(aes(y = Value, color = Parameter, group = Parameter)) +
  geom_ribbon(data=df_snr_ds_ribbon, aes(ymin=snr_min_avg_ds, ymax=snr_max_avg_ds), fill = "red1") +  
  facet_wrap(~Type) +
  theme_bw() +
  scale_color_manual(values = group.colors)