ggplot中重叠的气球图

时间:2018-10-30 17:01:58

标签: r ggplot2 plot

我想将这两幅图重叠成一个图:

SCAR density

BRRU density

但是无论植物类型如何,我都希望背景中的点最大,而前景中的点最小。

我基本上想做这样的事情:

plant density combined

但是唯一的问题是植物的大小有很大不同,因此我想保持它们的密度点大小独立(保持其各自的范围)。

如果我不能保持自己的尺码范围,但要使它最大,那将是不理想的,但对我想做的事情是可行的。

编辑:这是一些示例数据:

TRANSECT FRAME PLANT DENSITY
1        1      SCAR    3600
1        2      SCAR    3840
1        3      SCAR    0
1        4      SCAR    1880
2        1      SCAR    3480
2        2      SCAR    1600
2        3      SCAR    3640
2        4      SCAR    1280
1        1      BRRU    40
1        2      BRRU    40
1        3      BRRU    1320
1        4      BRRU    280
2        1      BRRU    120
2        2      BRRU    0
2        3      BRRU    120
2        4      BRRU    360

密度有两种不同的尺度,一种是很小的骨感植物,另一种是更高的植物,占用更多空间。

谢谢!

1 个答案:

答案 0 :(得分:2)

(顺便说一句,最好的做法是包括一个可复制的示例,这样,想要帮助您的人不必做您已经做过的额外工作,也不用猜测可能会阻碍您获得数据的数据。适当的答案。)

我在这里制作了一些虚假数据,并绘制了示例的外观图:

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()

enter image description here