У меня есть фрейм данных по строкам:
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)
Где у меня есть название некоторого аналитического теста в «аналите», результат теста в «значении», ориентировочное значение, которое должно быть ниже в «ориентире», и расположение точки отбора пробы в широте и долготе. Для каждого аналита существует только одно руководство.
Я хочу создать фасетный набор карт, где каждый фасет представляет собой отдельный аналит, а значения показаны в виде точек разного размера.
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
С масштабированием размера, разным для каждого аспекта / аналита, но со значением 0 всегда устанавливается размер 0 пикселей, а значение, равное нормативному значению этого аналита, всегда устанавливается как 5 пикселей.
Итак, я думаю, что мне нужно использовать trans_new () для создания нового преобразования, но я изо всех сил пытаюсь понять, как я могу сообщить функции, что такое имя аналита этого аспекта, чтобы она могла найти соответствующее ориентировочное значение.
Любые идеи поощряются.
Уточнение редактирования: Глядя на график, я хотел бы увидеть как фактическую величину значения (например, pH около 10), а также величину, которую значение больше или меньше нормативного значения (например, значение pH 10 примерно вдвое превышает нормативное значение 5). Поэтому в идеале я хотел бы иметь легенду для каждого аспекта, где размер каждой точки показывает относительный размер измеренного значения по сравнению с нормативным значением, но фактические измеренные значения (а не процент нормативного значения) отображаются в виде метки на каждой легенде. .
1 ответ
Возможно, что-то подобное?
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)
patchwork
для объединения.
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.