(Кстати, хорошей практикой является включение воспроизводимого примера, чтобы люди, которые хотят помочь вам, не выполняли дополнительную работу, которую вы уже сделали, или догадались о ваших данных, которые могут помешать вам получить соответствующий ответ.)
Здесь я сделал несколько поддельных данных и изобразил, как выглядит ваш пример:
library(dplyr); library(ggplot2)
set.seed(42)
df <- data.frame(FRAME = rep(1:12, each = 4),
TRANSECT = rep(1:4, 12),
BRRU = runif(48, 0, 3000),
SCAR = runif(48, 0, 3000)) %>%
tidyr::gather(PLANT, DENSITY, BRRU:SCAR)
ggplot(df, aes(FRAME, TRANSECT, size = DENSITY, color = PLANT)) +
geom_point()
Группируя по каждой координате и сортируя по убыванию, самые большие точки печатаются первыми, а меньшие точки печатаются позже, сверху:
ggplot(df %>%
group_by(FRAME, TRANSECT) %>%
arrange(-DENSITY) %>%
ungroup(),
aes(FRAME, TRANSECT, size = DENSITY, color = PLANT)) +
geom_point()