Publication-Ready Output

Color-Blind Friendly Palettes

Rclade defaults to the viridis palette, which is: - Color-blind friendly - Grayscale friendly - Perceptually uniform

library(Rclade)
data(example_tree)

# Default viridis palette
p <- plot_timetree(example_tree, rank = "phylum",
                   taxonomy_format = "GTDB",
                   add_timescale = FALSE)
#> 
#> ============================================================
#>            Rclade: Phylogenetic Tree Visualization
#> ============================================================
#> 2026-10-01T19:53:53.566+00:00 | INFO     | Starting plot_timetree pipeline
#> 2026-10-01T19:53:53.567+00:00 | INFO     | Tree input               : phylo object
#> 2026-10-01T19:53:53.567+00:00 | INFO     | Rank                     : phylum
#> 2026-10-01T19:53:53.568+00:00 | INFO     | Layout                   : rectangular
#> 2026-10-01T19:53:53.568+00:00 | INFO     | Unit                     : auto
#> 2026-10-01T19:53:53.569+00:00 | INFO     | Step 1/7: Input validation and reading
#> 
#>   --------------------------------------------------
#>   >> Input Validation
#>   --------------------------------------------------
#> 2026-10-01T19:53:53.570+00:00 | INFO     | Tips                     : 50
#> 2026-10-01T19:53:53.570+00:00 | INFO     | Internal nodes           : 49
#> 2026-10-01T19:53:53.571+00:00 | INFO     | Edge lengths range       : 40.1579 to 2758.4006
#> 2026-10-01T19:53:53.571+00:00 | INFO     | Input validation passed
#> 2026-10-01T19:53:53.572+00:00 | INFO     | Timer 'input_reading': 3 ms
#> 2026-10-01T19:53:53.572+00:00 | INFO     | Step 2/7: Taxonomy parsing
#> 2026-10-01T19:53:53.573+00:00 | INFO     | Using rank-based taxonomy: phylum
#> 2026-10-01T19:53:53.579+00:00 | INFO     | Detected format          : GTDB
#> 2026-10-01T19:53:53.580+00:00 | INFO     | Groups found             : 5
#> 2026-10-01T19:53:53.580+00:00 | INFO     | Timer 'taxonomy_parsing': 8 ms
#> 2026-10-01T19:53:53.581+00:00 | INFO     | Step 3/7: MRCA computation and monophyly check
#> 2026-10-01T19:53:53.581+00:00 | INFO     | Checking monophyly and computing MRCA for each group...
#> 2026-10-01T19:53:53.584+00:00 | INFO     | Valid groups for collapse: 5 out of 5 total groups
#> 2026-10-01T19:53:53.585+00:00 | INFO     | Valid MRCA nodes         : 5
#> 2026-10-01T19:53:53.585+00:00 | INFO     | Timer 'mrca_computation': 4 ms
#> 2026-10-01T19:53:54.278+00:00 | INFO     | Step 4/7: Color generation
#> 2026-10-01T19:53:54.284+00:00 | INFO     | Color palette            : viridis
#> 2026-10-01T19:53:54.285+00:00 | INFO     | Step 5/7: Tree rendering
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> 2026-10-01T19:53:54.442+00:00 | INFO     | Collapsing 5 clades...
#> 2026-10-01T19:53:54.466+00:00 | INFO     | Clade collapse complete
#> 2026-10-01T19:53:54.467+00:00 | INFO     | Timer 'tree_rendering': 182 ms
#> 2026-10-01T19:53:54.468+00:00 | INFO     | Step 6/7: Timescale integration
#> 
#> ============================================================
#>                       Pipeline Complete
#> ============================================================
#> 2026-10-01T19:53:54.541+00:00 | INFO     |   Tips                        : 50
#> 2026-10-01T19:53:54.542+00:00 | INFO     |   Groups parsed               : 5
#> 2026-10-01T19:53:54.542+00:00 | INFO     |   Groups collapsed            : 5
#> 2026-10-01T19:53:54.542+00:00 | INFO     |   Singleton groups            : 0
#> 2026-10-01T19:53:54.542+00:00 | INFO     |   Skipped (non-monophyletic)  : 0
#> 2026-10-01T19:53:54.543+00:00 | INFO     |   Skipped (root/zero-tip)     : 0
#> 2026-10-01T19:53:54.543+00:00 | INFO     |   Taxonomy format             : GTDB
#> 2026-10-01T19:53:54.543+00:00 | INFO     |   Layout                      : rectangular
#> 2026-10-01T19:53:54.543+00:00 | INFO     |   Timescale                   : disabled
#> 2026-10-01T19:53:54.544+00:00 | INFO     | plot_timetree completed successfully
print(p)

Custom Color Mapping

# Custom color mapping for specific groups
p <- plot_timetree(example_tree, rank = "phylum",
                   taxonomy_format = "GTDB",
                   add_timescale = FALSE,
                   color_mapping = c("Proteobacteria" = "#E41A1C",
                                     "Firmicutes" = "#377EB8"))
#> 
#> ============================================================
#>            Rclade: Phylogenetic Tree Visualization
#> ============================================================
#> 2026-10-01T19:53:55.439+00:00 | INFO     | Starting plot_timetree pipeline
#> 2026-10-01T19:53:55.439+00:00 | INFO     | Tree input               : phylo object
#> 2026-10-01T19:53:55.439+00:00 | INFO     | Rank                     : phylum
#> 2026-10-01T19:53:55.440+00:00 | INFO     | Layout                   : rectangular
#> 2026-10-01T19:53:55.440+00:00 | INFO     | Unit                     : auto
#> 2026-10-01T19:53:55.440+00:00 | INFO     | Step 1/7: Input validation and reading
#> 
#>   --------------------------------------------------
#>   >> Input Validation
#>   --------------------------------------------------
#> 2026-10-01T19:53:55.441+00:00 | INFO     | Tips                     : 50
#> 2026-10-01T19:53:55.441+00:00 | INFO     | Internal nodes           : 49
#> 2026-10-01T19:53:55.441+00:00 | INFO     | Edge lengths range       : 40.1579 to 2758.4006
#> 2026-10-01T19:53:55.442+00:00 | INFO     | Input validation passed
#> 2026-10-01T19:53:55.443+00:00 | INFO     | Timer 'input_reading': 2 ms
#> 2026-10-01T19:53:55.443+00:00 | INFO     | Step 2/7: Taxonomy parsing
#> 2026-10-01T19:53:55.443+00:00 | INFO     | Using rank-based taxonomy: phylum
#> 2026-10-01T19:53:55.448+00:00 | INFO     | Detected format          : GTDB
#> 2026-10-01T19:53:55.449+00:00 | INFO     | Groups found             : 5
#> 2026-10-01T19:53:55.449+00:00 | INFO     | Timer 'taxonomy_parsing': 6 ms
#> 2026-10-01T19:53:55.449+00:00 | INFO     | Step 3/7: MRCA computation and monophyly check
#> 2026-10-01T19:53:55.450+00:00 | INFO     | Checking monophyly and computing MRCA for each group...
#> 2026-10-01T19:53:55.452+00:00 | INFO     | Valid groups for collapse: 5 out of 5 total groups
#> 2026-10-01T19:53:55.452+00:00 | INFO     | Valid MRCA nodes         : 5
#> 2026-10-01T19:53:55.452+00:00 | INFO     | Timer 'mrca_computation': 3 ms
#> 2026-10-01T19:53:55.453+00:00 | INFO     | Step 4/7: Color generation
#> 2026-10-01T19:53:55.454+00:00 | INFO     | Color palette            : viridis
#> 2026-10-01T19:53:55.455+00:00 | INFO     | Step 5/7: Tree rendering
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> 2026-10-01T19:53:55.541+00:00 | INFO     | Collapsing 5 clades...
#> 2026-10-01T19:53:55.569+00:00 | INFO     | Clade collapse complete
#> 2026-10-01T19:53:55.570+00:00 | INFO     | Timer 'tree_rendering': 115 ms
#> 2026-10-01T19:53:55.570+00:00 | INFO     | Step 6/7: Timescale integration
#> 
#> ============================================================
#>                       Pipeline Complete
#> ============================================================
#> 2026-10-01T19:53:55.632+00:00 | INFO     |   Tips                        : 50
#> 2026-10-01T19:53:55.632+00:00 | INFO     |   Groups parsed               : 5
#> 2026-10-01T19:53:55.632+00:00 | INFO     |   Groups collapsed            : 5
#> 2026-10-01T19:53:55.633+00:00 | INFO     |   Singleton groups            : 0
#> 2026-10-01T19:53:55.633+00:00 | INFO     |   Skipped (non-monophyletic)  : 0
#> 2026-10-01T19:53:55.633+00:00 | INFO     |   Skipped (root/zero-tip)     : 0
#> 2026-10-01T19:53:55.633+00:00 | INFO     |   Taxonomy format             : GTDB
#> 2026-10-01T19:53:55.634+00:00 | INFO     |   Layout                      : rectangular
#> 2026-10-01T19:53:55.634+00:00 | INFO     |   Timescale                   : disabled
#> 2026-10-01T19:53:55.634+00:00 | INFO     | plot_timetree completed successfully
print(p)

Legend Placement

# Inside the plot (default)
p <- plot_timetree(example_tree, rank = "phylum",
                   taxonomy_format = "GTDB",
                   add_timescale = FALSE,
                   legend_position = c(0.05, 0.85))
#> 
#> ============================================================
#>            Rclade: Phylogenetic Tree Visualization
#> ============================================================
#> 2026-10-01T19:53:56.107+00:00 | INFO     | Starting plot_timetree pipeline
#> 2026-10-01T19:53:56.108+00:00 | INFO     | Tree input               : phylo object
#> 2026-10-01T19:53:56.108+00:00 | INFO     | Rank                     : phylum
#> 2026-10-01T19:53:56.108+00:00 | INFO     | Layout                   : rectangular
#> 2026-10-01T19:53:56.109+00:00 | INFO     | Unit                     : auto
#> 2026-10-01T19:53:56.109+00:00 | INFO     | Step 1/7: Input validation and reading
#> 
#>   --------------------------------------------------
#>   >> Input Validation
#>   --------------------------------------------------
#> 2026-10-01T19:53:56.110+00:00 | INFO     | Tips                     : 50
#> 2026-10-01T19:53:56.110+00:00 | INFO     | Internal nodes           : 49
#> 2026-10-01T19:53:56.110+00:00 | INFO     | Edge lengths range       : 40.1579 to 2758.4006
#> 2026-10-01T19:53:56.111+00:00 | INFO     | Input validation passed
#> 2026-10-01T19:53:56.111+00:00 | INFO     | Timer 'input_reading': 2 ms
#> 2026-10-01T19:53:56.112+00:00 | INFO     | Step 2/7: Taxonomy parsing
#> 2026-10-01T19:53:56.112+00:00 | INFO     | Using rank-based taxonomy: phylum
#> 2026-10-01T19:53:56.118+00:00 | INFO     | Detected format          : GTDB
#> 2026-10-01T19:53:56.118+00:00 | INFO     | Groups found             : 5
#> 2026-10-01T19:53:56.119+00:00 | INFO     | Timer 'taxonomy_parsing': 7 ms
#> 2026-10-01T19:53:56.119+00:00 | INFO     | Step 3/7: MRCA computation and monophyly check
#> 2026-10-01T19:53:56.119+00:00 | INFO     | Checking monophyly and computing MRCA for each group...
#> 2026-10-01T19:53:56.121+00:00 | INFO     | Valid groups for collapse: 5 out of 5 total groups
#> 2026-10-01T19:53:56.122+00:00 | INFO     | Valid MRCA nodes         : 5
#> 2026-10-01T19:53:56.122+00:00 | INFO     | Timer 'mrca_computation': 3 ms
#> 2026-10-01T19:53:56.123+00:00 | INFO     | Step 4/7: Color generation
#> 2026-10-01T19:53:56.124+00:00 | INFO     | Color palette            : viridis
#> 2026-10-01T19:53:56.124+00:00 | INFO     | Step 5/7: Tree rendering
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> 2026-10-01T19:53:56.216+00:00 | INFO     | Collapsing 5 clades...
#> 2026-10-01T19:53:56.240+00:00 | INFO     | Clade collapse complete
#> 2026-10-01T19:53:56.241+00:00 | INFO     | Timer 'tree_rendering': 116 ms
#> 2026-10-01T19:53:56.241+00:00 | INFO     | Step 6/7: Timescale integration
#> 
#> ============================================================
#>                       Pipeline Complete
#> ============================================================
#> 2026-10-01T19:53:56.311+00:00 | INFO     |   Tips                        : 50
#> 2026-10-01T19:53:56.311+00:00 | INFO     |   Groups parsed               : 5
#> 2026-10-01T19:53:56.311+00:00 | INFO     |   Groups collapsed            : 5
#> 2026-10-01T19:53:56.312+00:00 | INFO     |   Singleton groups            : 0
#> 2026-10-01T19:53:56.312+00:00 | INFO     |   Skipped (non-monophyletic)  : 0
#> 2026-10-01T19:53:56.312+00:00 | INFO     |   Skipped (root/zero-tip)     : 0
#> 2026-10-01T19:53:56.313+00:00 | INFO     |   Taxonomy format             : GTDB
#> 2026-10-01T19:53:56.313+00:00 | INFO     |   Layout                      : rectangular
#> 2026-10-01T19:53:56.313+00:00 | INFO     |   Timescale                   : disabled
#> 2026-10-01T19:53:56.313+00:00 | INFO     | plot_timetree completed successfully

# Standard positions
p <- plot_timetree(example_tree, rank = "phylum",
                   taxonomy_format = "GTDB",
                   add_timescale = FALSE,
                   legend_position = "right")
#> 
#> ============================================================
#>            Rclade: Phylogenetic Tree Visualization
#> ============================================================
#> 2026-10-01T19:53:56.315+00:00 | INFO     | Starting plot_timetree pipeline
#> 2026-10-01T19:53:56.315+00:00 | INFO     | Tree input               : phylo object
#> 2026-10-01T19:53:56.315+00:00 | INFO     | Rank                     : phylum
#> 2026-10-01T19:53:56.316+00:00 | INFO     | Layout                   : rectangular
#> 2026-10-01T19:53:56.316+00:00 | INFO     | Unit                     : auto
#> 2026-10-01T19:53:56.316+00:00 | INFO     | Step 1/7: Input validation and reading
#> 
#>   --------------------------------------------------
#>   >> Input Validation
#>   --------------------------------------------------
#> 2026-10-01T19:53:56.317+00:00 | INFO     | Tips                     : 50
#> 2026-10-01T19:53:56.317+00:00 | INFO     | Internal nodes           : 49
#> 2026-10-01T19:53:56.317+00:00 | INFO     | Edge lengths range       : 40.1579 to 2758.4006
#> 2026-10-01T19:53:56.318+00:00 | INFO     | Input validation passed
#> 2026-10-01T19:53:56.318+00:00 | INFO     | Timer 'input_reading': 2 ms
#> 2026-10-01T19:53:56.319+00:00 | INFO     | Step 2/7: Taxonomy parsing
#> 2026-10-01T19:53:56.319+00:00 | INFO     | Using rank-based taxonomy: phylum
#> 2026-10-01T19:53:56.324+00:00 | INFO     | Detected format          : GTDB
#> 2026-10-01T19:53:56.325+00:00 | INFO     | Groups found             : 5
#> 2026-10-01T19:53:56.325+00:00 | INFO     | Timer 'taxonomy_parsing': 6 ms
#> 2026-10-01T19:53:56.325+00:00 | INFO     | Step 3/7: MRCA computation and monophyly check
#> 2026-10-01T19:53:56.325+00:00 | INFO     | Checking monophyly and computing MRCA for each group...
#> 2026-10-01T19:53:56.327+00:00 | INFO     | Valid groups for collapse: 5 out of 5 total groups
#> 2026-10-01T19:53:56.328+00:00 | INFO     | Valid MRCA nodes         : 5
#> 2026-10-01T19:53:56.328+00:00 | INFO     | Timer 'mrca_computation': 3 ms
#> 2026-10-01T19:53:56.329+00:00 | INFO     | Step 4/7: Color generation
#> 2026-10-01T19:53:56.330+00:00 | INFO     | Color palette            : viridis
#> 2026-10-01T19:53:56.331+00:00 | INFO     | Step 5/7: Tree rendering
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> 2026-10-01T19:53:56.417+00:00 | INFO     | Collapsing 5 clades...
#> 2026-10-01T19:53:56.447+00:00 | INFO     | Clade collapse complete
#> 2026-10-01T19:53:56.448+00:00 | INFO     | Timer 'tree_rendering': 117 ms
#> 2026-10-01T19:53:56.448+00:00 | INFO     | Step 6/7: Timescale integration
#> 
#> ============================================================
#>                       Pipeline Complete
#> ============================================================
#> 2026-10-01T19:53:56.512+00:00 | INFO     |   Tips                        : 50
#> 2026-10-01T19:53:56.512+00:00 | INFO     |   Groups parsed               : 5
#> 2026-10-01T19:53:56.512+00:00 | INFO     |   Groups collapsed            : 5
#> 2026-10-01T19:53:56.513+00:00 | INFO     |   Singleton groups            : 0
#> 2026-10-01T19:53:56.513+00:00 | INFO     |   Skipped (non-monophyletic)  : 0
#> 2026-10-01T19:53:56.513+00:00 | INFO     |   Skipped (root/zero-tip)     : 0
#> 2026-10-01T19:53:56.514+00:00 | INFO     |   Taxonomy format             : GTDB
#> 2026-10-01T19:53:56.514+00:00 | INFO     |   Layout                      : rectangular
#> 2026-10-01T19:53:56.514+00:00 | INFO     |   Timescale                   : disabled
#> 2026-10-01T19:53:56.514+00:00 | INFO     | plot_timetree completed successfully

Clade Labels

p <- plot_timetree(example_tree, rank = "phylum",
                   taxonomy_format = "GTDB",
                   add_timescale = FALSE,
                   show_clade_label = TRUE)
#> 
#> ============================================================
#>            Rclade: Phylogenetic Tree Visualization
#> ============================================================
#> 2026-10-01T19:53:56.545+00:00 | INFO     | Starting plot_timetree pipeline
#> 2026-10-01T19:53:56.550+00:00 | INFO     | Tree input               : phylo object
#> 2026-10-01T19:53:56.551+00:00 | INFO     | Rank                     : phylum
#> 2026-10-01T19:53:56.551+00:00 | INFO     | Layout                   : rectangular
#> 2026-10-01T19:53:56.552+00:00 | INFO     | Unit                     : auto
#> 2026-10-01T19:53:56.552+00:00 | INFO     | Step 1/7: Input validation and reading
#> 
#>   --------------------------------------------------
#>   >> Input Validation
#>   --------------------------------------------------
#> 2026-10-01T19:53:56.553+00:00 | INFO     | Tips                     : 50
#> 2026-10-01T19:53:56.553+00:00 | INFO     | Internal nodes           : 49
#> 2026-10-01T19:53:56.554+00:00 | INFO     | Edge lengths range       : 40.1579 to 2758.4006
#> 2026-10-01T19:53:56.555+00:00 | INFO     | Input validation passed
#> 2026-10-01T19:53:56.555+00:00 | INFO     | Timer 'input_reading': 2 ms
#> 2026-10-01T19:53:56.555+00:00 | INFO     | Step 2/7: Taxonomy parsing
#> 2026-10-01T19:53:56.556+00:00 | INFO     | Using rank-based taxonomy: phylum
#> 2026-10-01T19:53:56.561+00:00 | INFO     | Detected format          : GTDB
#> 2026-10-01T19:53:56.562+00:00 | INFO     | Groups found             : 5
#> 2026-10-01T19:53:56.562+00:00 | INFO     | Timer 'taxonomy_parsing': 6 ms
#> 2026-10-01T19:53:56.562+00:00 | INFO     | Step 3/7: MRCA computation and monophyly check
#> 2026-10-01T19:53:56.562+00:00 | INFO     | Checking monophyly and computing MRCA for each group...
#> 2026-10-01T19:53:56.564+00:00 | INFO     | Valid groups for collapse: 5 out of 5 total groups
#> 2026-10-01T19:53:56.565+00:00 | INFO     | Valid MRCA nodes         : 5
#> 2026-10-01T19:53:56.565+00:00 | INFO     | Timer 'mrca_computation': 3 ms
#> 2026-10-01T19:53:56.566+00:00 | INFO     | Step 4/7: Color generation
#> 2026-10-01T19:53:56.567+00:00 | INFO     | Color palette            : viridis
#> 2026-10-01T19:53:56.567+00:00 | INFO     | Step 5/7: Tree rendering
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> ! # Invaild edge matrix for <phylo>. A <tbl_df> is returned.
#> 2026-10-01T19:53:56.654+00:00 | INFO     | Collapsing 5 clades...
#> 2026-10-01T19:53:56.683+00:00 | INFO     | Clade collapse complete
#> 2026-10-01T19:53:56.684+00:00 | INFO     | Timer 'tree_rendering': 116 ms
#> 2026-10-01T19:53:56.684+00:00 | INFO     | Step 6/7: Timescale integration
#> 
#> ============================================================
#>                       Pipeline Complete
#> ============================================================
#> 2026-10-01T19:53:56.755+00:00 | INFO     |   Tips                        : 50
#> 2026-10-01T19:53:56.755+00:00 | INFO     |   Groups parsed               : 5
#> 2026-10-01T19:53:56.755+00:00 | INFO     |   Groups collapsed            : 5
#> 2026-10-01T19:53:56.756+00:00 | INFO     |   Singleton groups            : 0
#> 2026-10-01T19:53:56.756+00:00 | INFO     |   Skipped (non-monophyletic)  : 0
#> 2026-10-01T19:53:56.756+00:00 | INFO     |   Skipped (root/zero-tip)     : 0
#> 2026-10-01T19:53:56.756+00:00 | INFO     |   Taxonomy format             : GTDB
#> 2026-10-01T19:53:56.756+00:00 | INFO     |   Layout                      : rectangular
#> 2026-10-01T19:53:56.757+00:00 | INFO     |   Timescale                   : disabled
#> 2026-10-01T19:53:56.757+00:00 | INFO     | plot_timetree completed successfully
print(p)

Taxonomy Quality Report

Before finalizing your figure, verify label parsing quality:

summarize_taxonomy_quality(example_tree$tip.label, format = "GTDB")
#> === Taxonomy Label Parsing Quality Report ===
#> Total labels: 50
#> Detected format: GTDB
#> 
#> Per-rank parse rates:
#>   kingdom        0.0% (0/50) 
#>   domain       100.0% (50/50) ====================
#>   phylum       100.0% (50/50) ====================
#>   class        100.0% (50/50) ====================
#>   order          0.0% (0/50) 
#>   family         0.0% (0/50) 
#>   genus          0.0% (0/50) 
#>   species        0.0% (0/50) 
#>   subspecies     0.0% (0/50) 
#> 
#> All labels parsed successfully.

Batch Processing

Process multiple tree files at once:

batch_plot(input_dir = "trees/",
           output_dir = "figures/",
           pattern = "*.tre",
           rank = "phylum",
           taxonomy_format = "GTDB")

Reproducibility

save_session_info("session_info.txt")

References & Acknowledgments

Rclade builds on the ggtree and deeptime R packages. If you use Rclade in published research, please cite Rclade along with these key dependencies:

  • Yu G, Smith DK, Zhu H, Guan Y, Lam TT-Y (2017). “ggtree: an R package for visualization and annotation of phylogenetic trees with their covariates and other associated data.” Methods in Ecology and Evolution, 8(1), 28-36. doi:10.1111/2041-210X.12628
  • Gearty W (2025). “deeptime: an R package that facilitates highly customizable and reproducible visualizations of data over geological time intervals.” Big Earth Data. doi:10.1080/20964471.2025.2537516

The geological timescale data is based on the ICS International Chronostratigraphic Chart 2023/02 (https://stratigraphy.org/chart/).