Skip to content

error while using aes(subset) in geom_tiplab or geom_tippoint - Problem while computing aesthetics - object not found #705

Description

@jayoung

Hi there,

I think I found a problem with aes(subset) in geom_tiplab or geom_tippoint (although it's possible I'm misunderstanding how subset works). I think older versions of ggtree didn't have this issue but I'm not sure. I am using the current release versions of all packages.

There are ways to work around this but it'd be nice not to have to do use them!

A reprex is below.

Thank you!

Janet Young
Fred Hutch Cancer Center

library(ape)
library(ggtree)
#> ggtree v4.0.5 Learn more at https://yulab-smu.top/contribution-tree-data/
#> 
#> Please cite:
#> 
#> S Xu, Z Dai, P Guo, X Fu, S Liu, L Zhou, W Tang, T Feng, M Chen, L
#> Zhan, T Wu, E Hu, Y Jiang, X Bo, G Yu. ggtreeExtra: Compact
#> visualization of richly annotated phylogenetic data. Molecular Biology
#> and Evolution. 2021, 38(9):4039-4042. doi: 10.1093/molbev/msab166
#> 
#> Attaching package: 'ggtree'
#> The following object is masked from 'package:ape':
#> 
#>     rotate
library(tidytree)
#> tidytree v0.4.7 Learn more at https://yulab-smu.top/contribution-tree-data/
#> 
#> Please cite:
#> 
#> S Xu, Z Dai, P Guo, X Fu, S Liu, L Zhou, W Tang, T Feng, M Chen, L
#> Zhan, T Wu, E Hu, Y Jiang, X Bo, G Yu. ggtreeExtra: Compact
#> visualization of richly annotated phylogenetic data. Molecular Biology
#> and Evolution. 2021, 38(9):4039-4042. doi: 10.1093/molbev/msab166
#> 
#> Attaching package: 'tidytree'
#> The following objects are masked from 'package:ape':
#> 
#>     drop.tip, keep.tip
#> The following object is masked from 'package:stats':
#> 
#>     filter

# Get example tree data, with tipdata
tr <- rtree(10)

## Make table of information about tips
tree_info <- data.frame(label = paste0("t",1:10),
                        group_character = c(rep("group1", 3),
                                            rep("group2", 4),
                                            rep("group3", 3)))
## add factor column:
tree_info[,"group_factor"] <- factor(tree_info[,"group_character"])
## add integer column:
tree_info[,"group_integer"] <- as.integer(gsub("group","",tree_info[,"group_character"]))
## add TRUE/FALSE column:
tree_info[,"in_group2"] <- tree_info[,"group_character"] == "group2"
tree_info
#>    label group_character group_factor group_integer in_group2
#> 1     t1          group1       group1             1     FALSE
#> 2     t2          group1       group1             1     FALSE
#> 3     t3          group1       group1             1     FALSE
#> 4     t4          group2       group2             2      TRUE
#> 5     t5          group2       group2             2      TRUE
#> 6     t6          group2       group2             2      TRUE
#> 7     t7          group2       group2             2      TRUE
#> 8     t8          group3       group3             3     FALSE
#> 9     t9          group3       group3             3     FALSE
#> 10   t10          group3       group3             3     FALSE

## Join info and tree together:
tr_plus_info <- left_join(tr, tree_info, by="label")


#### Now plot the tree

# Plot, using `in_group2` column (TRUE/FALSE) to subset geom_tippoint - this works:
ggtree(tr_plus_info) +
    geom_tiplab(aes(color=group_character), offset=0.05) +
    geom_tippoint(aes(subset=in_group2, 
                      color=group_character),
                  size=3, 
                  show.legend = FALSE)

# Plot, using a logical test on the `group_integer` column (group_integer==2) to subset geom_tippoint - this works:
ggtree(tr_plus_info) +
    geom_tiplab(aes(color=group_character), offset=0.05) +
    geom_tippoint(aes(subset= (group_integer==2), 
                      color=group_character),
                  size=3, 
                  show.legend = FALSE)

# Plot, using a logical test on the `group_factor` column (group_factor=="group2") to subset geom_tippoint - this fails:
ggtree(tr_plus_info) +
    geom_tiplab(aes(color=group_character), offset=0.05) +
    geom_tippoint(aes(subset= (group_factor=="group2"), 
                      color=group_character),
                  size=3, 
                  show.legend = FALSE)
#> Error:
#> ! Problem while computing aesthetics.
#> ℹ Error occurred in the 4th layer.
#> Caused by error:
#> ! object 'group2' not found


# Same problem if we try to subset geom_tiplab instead of geom_tippoint
ggtree(tr_plus_info) +
    geom_tiplab(aes(subset= (group_factor=="group2"), 
                    color=group_character), offset=0.05) +
    geom_tippoint(aes(color=group_character),
                  size=3, 
                  show.legend = FALSE)
#> Error:
#> ! Problem while computing aesthetics.
#> ℹ Error occurred in the 3rd layer.
#> Caused by error:
#> ! object 'group2' not found


# Same problem using the group_character column
ggtree(tr_plus_info) +
    geom_tiplab(aes(color=group_character), offset=0.05) +
    geom_tippoint(aes(subset= (group_character=="group2"), 
                      color=group_character),
                  size=3, 
                  show.legend = FALSE)
#> Error:
#> ! Problem while computing aesthetics.
#> ℹ Error occurred in the 4th layer.
#> Caused by error:
#> ! object 'group2' not found


# But if I store the desired value in a variable it succeeds
group_of_interest <- "group2"
ggtree(tr_plus_info) +
    geom_tiplab(aes(color=group_character), offset=0.05) +
    geom_tippoint(aes(subset= (group_character==group_of_interest), 
                      color=group_character),
                  size=3, 
                  show.legend = FALSE)

### sessionInfo
sessionInfo()
#> R version 4.5.3 (2026-03-11)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Tahoe 26.4
#> 
#> Matrix products: default
#> BLAS:   /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib 
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
#> 
#> locale:
#> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
#> 
#> time zone: America/Los_Angeles
#> tzcode source: internal
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] tidytree_0.4.7 ggtree_4.0.5   ape_5.8-1     
#> 
#> loaded via a namespace (and not attached):
#>  [1] yulab.utils_0.2.4       rappdirs_0.3.4          generics_0.1.4         
#>  [4] tidyr_1.3.2             fontLiberation_0.1.0    ggplotify_0.1.3        
#>  [7] lattice_0.22-9          digest_0.6.39           magrittr_2.0.4         
#> [10] evaluate_1.0.5          grid_4.5.3              RColorBrewer_1.1-3     
#> [13] fastmap_1.2.0           jsonlite_2.0.0          purrr_1.2.1            
#> [16] aplot_0.2.9             scales_1.4.0            fontBitstreamVera_0.1.1
#> [19] lazyeval_0.2.2          cli_3.6.5               rlang_1.1.7            
#> [22] fontquiver_0.2.1        reprex_2.1.1            withr_3.0.2            
#> [25] yaml_2.3.12             otel_0.2.0              gdtools_0.5.0          
#> [28] tools_4.5.3             parallel_4.5.3          dplyr_1.2.0            
#> [31] ggplot2_4.0.2           vctrs_0.7.2             R6_2.6.1               
#> [34] gridGraphics_0.5-1      lifecycle_1.0.5         htmlwidgets_1.6.4      
#> [37] fs_2.0.1                ggfun_0.2.0             MASS_7.3-65            
#> [40] treeio_1.34.0           pkgconfig_2.0.3         pillar_1.11.1          
#> [43] gtable_0.3.6            glue_1.8.0              Rcpp_1.1.1             
#> [46] systemfonts_1.3.2       xfun_0.57               tibble_3.3.1           
#> [49] tidyselect_1.2.1        rstudioapi_0.18.0       ggiraph_0.9.6          
#> [52] knitr_1.51              farver_2.1.2            htmltools_0.5.9        
#> [55] nlme_3.1-169            patchwork_1.3.2         labeling_0.4.3         
#> [58] rmarkdown_2.31          compiler_4.5.3          S7_0.2.1

Created on 2026-04-02 with reprex v2.1.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions