效果如下:

    33. 实现漂亮点图的注释(圈起来) - 图1

    记录几个功能,首先是放大区域:

    1. ggplot(data_matrix, aes(gene, exon)) +
    2. geom_point() + geom_smooth(method = "lm") +
    3. geom_point(data=subset( data_matrix,gene < 2.5 & exon > (0.936*gene + 0.4094)),
    4. color = "red") +
    5. facet_zoom(x = group == "marked")

    33. 实现漂亮点图的注释(圈起来) - 图2

    x, y 控制放大是在横坐标还是纵坐标。

    此外,还可以绘制选择图片的区域轮廓:

    参见,https://www.cnblogs.com/Mao1518202/p/11961495.html

    比如:

    1. ggplot(data_matrix, aes(gene, exon)) +
    2. geom_point() + geom_smooth(method = "lm") +
    3. geom_point(data=subset( data_matrix,gene < 2.5 & exon > (0.936*gene + 0.4094)),
    4. color = "red") +
    5. geom_mark_ellipse(data=subset( data_matrix,gene < 2.5 & exon > (0.936*gene + 0.4094)),
    6. aes(label = group), color = "red")

    33. 实现漂亮点图的注释(圈起来) - 图3

    但如果不是这样的连续性数据呢?

    比如分类的一个个散点(气泡图):

    33. 实现漂亮点图的注释(圈起来) - 图4

    发现并不能很好的识别出相邻的数据(每个点都是单独的一个圈圈),只能实现上面的效果啦~

    1. my_test <- data.frame(Features = rep(paste0("CD", 1:20), 3),
    2. Identity = as.character(sample(10, 60 ,replace = T)),
    3. Averange_Expression = runif(60, -1, 5),
    4. Percent_Expression = runif(60, 0, 90))
    5. tmp <- data.frame(Features = paste0("CD", 1:20),
    6. Big_Features = as.character(sample(LETTERS[1:6], 20 ,replace = T)))
    7. my_test <- merge(my_test, tmp, by = "Features")
    8. my_test$Labels <- case_when(
    9. my_test$Features %in% c("CD13", "CD16") & my_test$Identity == "5" ~ "Big Cell",
    10. my_test$Features %in% c("CD15", "CD5") & my_test$Identity == "6" ~ "Ultra Big Cell",
    11. my_test$Features %in% c("CD1", "CD10", "CD18") & my_test$Identity == "1" ~ "Little Cell",
    12. TRUE ~ "no-marked"
    13. )
    14. my_test[!my_test$Labels %in% "no-marked" & duplicated(my_test$Labels), ]$Labels <- NA
    15. ggplot(my_test) + geom_point(aes(Features, Identity,
    16. color = Averange_Expression,
    17. size = Percent_Expression)) +
    18. theme_bw() + facet_grid(.~Big_Features, scales = "free") +
    19. theme(axis.title.x = element_blank(),
    20. axis.text.x = element_text(angle = 90),
    21. text = element_text(size = 14),
    22. strip.background = element_rect(fill = "transparent")) +
    23. geom_mark_rect(data = my_test[(!my_test$Labels %in% "no-marked") & (!is.na(my_test$Labels)), ],
    24. aes(Features, Identity, label = Labels),
    25. color = "red") +
    26. geom_mark_rect(data = my_test[(!my_test$Labels %in% "no-marked") & (is.na(my_test$Labels)), ],
    27. aes(Features, Identity),
    28. color = "red")

    有大神的话,可以帮帮忙~