R/geom_point.R
6c9cd355
 
1d4d6914
 ##' add tip point
 ##'
102483c0
 ##'
1d4d6914
 ##' @title geom_tippoint
6c9cd355
 ##' @inheritParams geom_point2
1d4d6914
 ##' @return tip point layer
 ##' @export
 ##' @author Guangchuang Yu
102483c0
 geom_tippoint <- function(mapping = NULL, data = NULL,
6c9cd355
                        position = "identity", na.rm = FALSE,
                           show.legend = NA, inherit.aes = TRUE, ...) {
1d4d6914
     isTip <- NULL
6c9cd355
     self_mapping <- aes(subset = isTip)
     if (is.null(mapping)) {
         mapping <- self_mapping
     } else {
4666eab4
         mapping <- modifyList(self_mapping, mapping)
6c9cd355
     }
102483c0
     geom_point2(mapping, data, position, na.rm, show.legend, inherit.aes, ...)
1d4d6914
 }
 
869644d4
 ## angle is not supported,
 ## https://github.com/GuangchuangYu/ggtree/issues/77
 ##
 ##
 ## geom_tippoint2 <- function(mapping=NULL, hjust=0, ...) {
 ##     angle <- NULL
 ##     isTip <- NULL
 ##     m1 <- aes(subset=(isTip & (angle < 90 | angle > 270)), angle=angle)
 ##     m2 <- aes(subset=(isTip & (angle >= 90 & angle <=270)), angle=angle+180)
4666eab4
 
869644d4
 ##     if (!is.null(mapping)) {
 ##         m1 <- modifyList(mapping, m1)
 ##         m2 <- modifyList(mapping, m2)
 ##     }
4666eab4
 
869644d4
 ##     list(geom_tippoint(m1, hjust=hjust, ...),
 ##          geom_tippoint(m2, hjust=1-hjust, ...)
 ##          )
 ## }
4666eab4
 
 
1d4d6914
 ##' add node point
 ##'
102483c0
 ##'
1d4d6914
 ##' @title geom_nodepoint
6c9cd355
 ##' @inheritParams geom_point2
1d4d6914
 ##' @return node point layer
 ##' @export
 ##' @author Guangchuang Yu
102483c0
 geom_nodepoint <- function(mapping = NULL, data = NULL,
6c9cd355
                        position = "identity", na.rm = FALSE,
                        show.legend = NA, inherit.aes = TRUE, ...) {
1d4d6914
     isTip <- NULL
6c9cd355
     self_mapping <- aes(subset = !isTip)
     if (is.null(mapping)) {
         mapping <- self_mapping
     } else {
         mapping %<>% modifyList(self_mapping)
     }
102483c0
     geom_point2(mapping, data, position, na.rm, show.legend, inherit.aes, ...)
1d4d6914
 }
 
 
 ##' add root point
 ##'
102483c0
 ##'
1d4d6914
 ##' @title geom_rootpoint
6c9cd355
 ##' @inheritParams geom_point2
1d4d6914
 ##' @return root point layer
 ##' @export
 ##' @author Guangchuang Yu
102483c0
 geom_rootpoint <- function(mapping = NULL, data = NULL,
6c9cd355
                            position = "identity", na.rm = FALSE,
                            show.legend = NA, inherit.aes = TRUE, ...) {
1d4d6914
     isTip <- node <- parent <- NULL
6c9cd355
     self_mapping <- aes(subset = (node == parent))
     if (is.null(mapping)) {
         mapping <- self_mapping
     } else {
         mapping %<>% modifyList(self_mapping)
     }
7d9641c6
     geom_point2(mapping, data, position, na.rm, show.legend, inherit.aes, ...)
1d4d6914
 }
 
 
6c9cd355
 ##' geom_point2 support aes(subset) via setup_data
 ##'
102483c0
 ##'
6c9cd355
 ##' @title geom_point2
 ##' @param mapping aes mapping
 ##' @param data data
 ##' @param position position
 ##' @param na.rm logical
 ##' @param show.legend logical
 ##' @param inherit.aes logical
 ##' @param ... addktional parameter
 ##' @importFrom ggplot2 layer
 ##' @export
 ##' @seealso
 ##' \link[ggplot2]{geom_point}
 ##' @return point layer
 ##' @author Guangchuang Yu
7d9641c6
 geom_point2 <- function(mapping = NULL, data = NULL,
6c9cd355
                        position = "identity", na.rm = FALSE,
                        show.legend = NA, inherit.aes = TRUE, ...) {
e4ea056a
 
102483c0
 
e4ea056a
     default_aes <- aes_(node=~node)
     if (is.null(mapping)) {
         mapping <- default_aes
     } else {
         mapping <- modifyList(mapping, default_aes)
     }
102483c0
 
e4ea056a
     layer(
         data = data,
         mapping = mapping,
7d9641c6
         stat = StatTreeData,
e4ea056a
         geom = GeomPointGGtree,
         position = position,
         show.legend = show.legend,
         inherit.aes = inherit.aes,
         params = list(
             na.rm = na.rm,
             ...
bedefde1
         ),
da0f0f7f
         if (packageVersion('ggplot2') > '2.1.0') check.aes = FALSE
6c9cd355
     )
 }
 
 ##' @importFrom ggplot2 ggproto
 ##' @importFrom ggplot2 GeomPoint
 ##' @importFrom ggplot2 draw_key_point
 GeomPointGGtree <- ggproto("GeomPointGGtree", GeomPoint,
                            setup_data = function(data, params) {
e4ea056a
                                if (is.null(data$subset))
                                    return(data)
6c9cd355
                                data[data$subset,]
102483c0
                            }
 
                            ## ,
 
e4ea056a
                            ## draw_panel = function(data, panel_scales, coord, na.rm = FALSE){
                            ##     GeomPoint$draw_panel(data, panel_scales, coord, na.rm)
                            ## },
102483c0
 
e4ea056a
                            ## draw_key = draw_key_point,
102483c0
 
e4ea056a
                            ## required_aes = c("x", "y"),
                            ## default_aes = aes(shape = 19, colour = "black", size = 1.5, fill = NA,
                            ##                   alpha = NA, stroke = 0.5)
6c9cd355
                             )
e4ea056a