---
title: "Using mycolorsTB: A Guide and Gallery"
author: "Paula Ruiz-Rodriguez"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Using mycolorsTB: A Guide and Gallery}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(mycolorsTB)
```

## Introduction

This vignette serves as a comprehensive guide to the `mycolorsTB` package. It explains the available color palettes and provides a gallery of examples to demonstrate how they can be used to create distinctive and attractive visualizations for *Mycobacterium tuberculosis* data.

## 1. Viewing Available Palettes

The package includes three main palettes. You can preview any of them using the `view_palette()` function.

* `mycolors`: A palette with 14 colors, named according to TB lineages (L1, A2, etc.).
* `classicTB`: The same 14 colors, but without names, for general use.
* `pathogenomics`: A smaller palette with 8 colors from the PathoGenOmics Lab theme.

```{r, fig.width=7, fig.height=5, out.width="100%"}
# View the main palette with lineage names
view_palette(palette_name = "mycolors")

# View the pathogenomics palette
view_palette(palette_name = "pathogenomics")
```

## 2. Usage with ggplot2

The primary purpose of `mycolorsTB` is to integrate seamlessly with `ggplot2`. The package provides helper functions like `scale_color_*` and `scale_fill_*` to simplify this process.

```{r, fig.width=7, fig.height=4, out.width="100%"}
library(ggplot2)

# To ensure the vignette builds correctly, we define the lineage names locally.
# The functions from the package will use the actual package data.
local_mycolors <- c("A1"="#d1ae00", "A2"="#8ef5c8", "A3"="#73c2ff", "A4"="#ff9cdb",
                    "L1"="#ff3091", "L2"="#001aff", "L3"="#8a0bd2", "L4"="#ff0000",
                    "L5"="#995200", "L6"="#1eb040", "L7"="#fbff00", "L8"="#ff9d00",
                    "L9"="#37ff30", "L10"="#8fbda1")

# Example data using the local color vector
data <- data.frame(
  x = factor(names(local_mycolors), levels = names(local_mycolors)),
  y = abs(rnorm(14, mean = 10, sd = 3)),
  group = names(local_mycolors)
)

# Create a bar plot using the fill scale
ggplot(data, aes(x = x, y = y, fill = group)) +
  geom_bar(stat = "identity") +
  scale_fill_mycolors() +
  theme_minimal() +
  labs(title = "Bar Plot with scale_fill_mycolors()", x = "Lineage", y = "Value") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
```

## 3. Plotting Trees and Cladograms

The package includes helper functions to directly plot phylogenetic trees and cladograms from a Newick format string.

### Phylogenetic Tree

The `plot_tb_tree()` function visualizes the tree with branch lengths representing evolutionary distance.

```{r, fig.width=7, fig.height=4, message=FALSE, warning=FALSE, out.width="100%"}
tree_text <- "(L8,((L1,(L7,(L4,(L2,L3)))),(L5,((A2,(A3,A4)),(A1,(L10,(L6,L9)))))));"
plot_tb_tree(tree_text)
```

### Cladogram

The `plot_tb_cladogram()` function visualizes the tree topology, ignoring branch lengths. This is useful for focusing on the relationships between lineages.

```{r, fig.width=7, fig.height=4, message=FALSE, warning=FALSE, out.width="100%"}
plot_tb_cladogram(tree_text)
```

## 4. Generating Custom Palettes

What if you need more colors than are available in a palette? The `tb_palette()` function uses color interpolation to generate any number of colors you need.

```{r, fig.width=7, fig.height=5, out.width="100%"}
# Generate 25 colors from the 'classicTB' palette
my_custom_colors <- tb_palette(25, "classicTB")

# Create a plot to display the interpolated colors
plot(1:25, 
     rep(1, 25),
     col = my_custom_colors, 
     pch = 19, 
     cex = 5,
     xlab = "",
     ylab = "",
     axes = FALSE,
     main = "25 Interpolated Colors from 'classicTB' Palette")
```
