访问 scales::transformation 内的其他变量以进行 ggplot 分面

Access other variables within scales::transformation for ggplot faceting

我有一个数据框:

library(tidyverse); library(sf); library(ggplot2)
sfc <- tribble(~analyte, ~value, ~guideline, ~lat, ~long,
              "pH",     4,      5,          21,   52,
              "pH",     7,      5,          22,   53,
              "EC",     50,     100,        21,   52,
              "EC",     200,    100,        22,   53) %>%
  st_as_sf(coords = c("lat", "long"), crs = 4326)

我在 'analyte' 中有一些分析测试的名称,在 'value' 中有测试结果,在 'guideline' 中有一个指导值,结果应该在下面采样点的纬度和经度。每个分析物只有一个准则。

我想制作一组分面图,其中每个分面都是不同的分析物,值显示为不同大小的点。

ggplot(sfc) +
  geom_sf(aes(size = value)) +
  facet_wrap(~analyte)

但是,我想要的是每个方面的尺寸比例都不同,这样它就变成了这样:

value         size
0         ->  0 px
guideline ->  5 px
max(value)->  (max(value)/guideline)*5) px

每个 facet/analyte 的大小缩放比例不同,但值 0 始终设置为 0px 大小,等于该分析物准则值的值始终设置为 5px。

所以,我想我需要使用 trans_new() 来创建一个新的转换,但我正在努力弄清楚如何让函数知道该方面的分析物名称是什么,以便它可以查找适当的指导值。

任何想法,将不胜感激。

澄清编辑:看图,我希望能够看到两者值的实际大小(例如. pH 值在 10 左右)以及该值大于或小于指导值的量(例如 pH 值 10 是指导值 5 的两倍左右)。所以理想情况下,我希望每个方面都有一个图例,其中每个点的大小显示测量值与指导值相比的相对大小,但实际测量值(而不是指导值的百分比)显示为每个图例上的标签.

也许是这样的?

sfc %>%
  group_by(analyte) %>%
  mutate(value_scaled = value / max(value)) %>%
  ungroup() %>%
ggplot() +
  geom_sf(aes(size = value_scaled)) +
  scale_size_continuous(range = c(0, 5)) +
  facet_wrap(~analyte)