I have performed statistical tests on lots of genera that are hierarchically structured with a tree, so I have a p-value for each of the genus in the tree.
I want to visualize both the tree and the p-value in a panel plot, as it's possible to do with ggtree.
Packages and tree data:
library(ape)
# source("https://bioconductor.org/biocLite.R"); biocLite("ggtree")
library(ggtree)
tree <- structure(list(
edge = structure(c(102L, 103L, 104L, 105L, 106L,
107L, 103L, 108L, 109L, 110L, 111L, 111L, 109L, 112L, 113L, 109L,
114L, 115L, 115L, 115L, 115L, 115L, 115L, 114L, 116L, 109L, 117L,
118L, 108L, 119L, 120L, 121L, 119L, 122L, 123L, 123L, 108L, 124L,
125L, 126L, 125L, 127L, 127L, 108L, 128L, 129L, 130L, 130L, 129L,
131L, 103L, 132L, 133L, 134L, 135L, 134L, 136L, 136L, 134L, 137L,
137L, 134L, 138L, 138L, 134L, 139L, 139L, 134L, 140L, 134L, 141L,
141L, 103L, 142L, 143L, 144L, 145L, 103L, 146L, 147L, 148L, 149L,
146L, 150L, 151L, 152L, 103L, 153L, 154L, 155L, 156L, 153L, 157L,
158L, 159L, 159L, 159L, 159L, 159L, 157L, 160L, 161L, 160L, 162L,
103L, 163L, 164L, 165L, 166L, 165L, 167L, 167L, 165L, 168L, 168L,
165L, 169L, 164L, 170L, 171L, 170L, 172L, 163L, 173L, 174L, 175L,
175L, 175L, 173L, 176L, 177L, 177L, 177L, 173L, 178L, 179L, 179L,
163L, 180L, 181L, 182L, 181L, 183L, 183L, 183L, 181L, 184L, 184L,
184L, 184L, 184L, 184L, 184L, 184L, 184L, 184L, 181L, 185L, 185L,
185L, 181L, 186L, 181L, 187L, 187L, 181L, 188L, 188L, 188L, 188L,
188L, 163L, 189L, 190L, 191L, 191L, 163L, 192L, 193L, 194L, 194L,
194L, 194L, 194L, 194L, 194L, 103L, 195L, 196L, 197L, 198L, 196L,
199L, 200L, 103L, 201L, 202L, 203L, 204L, 204L, 102L, 205L, 206L,
207L, 208L, 209L, 206L, 210L, 211L, 212L, 206L, 213L, 214L, 215L,
103L, 104L, 105L, 106L, 107L, 1L, 108L, 109L, 110L, 111L, 2L,
3L, 112L, 113L, 4L, 114L, 115L, 5L, 6L, 7L, 8L, 9L, 10L, 116L,
11L, 117L, 118L, 12L, 119L, 120L, 121L, 13L, 122L, 123L, 14L,
15L, 124L, 125L, 126L, 16L, 127L, 17L, 18L, 128L, 129L, 130L,
19L, 20L, 131L, 21L, 132L, 133L, 134L, 135L, 22L, 136L, 23L,
24L, 137L, 25L, 26L, 138L, 27L, 28L, 139L, 29L, 30L, 140L, 31L,
141L, 32L, 33L, 142L, 143L, 144L, 145L, 34L, 146L, 147L, 148L,
149L, 35L, 150L, 151L, 152L, 36L, 153L, 154L, 155L, 156L, 37L,
157L, 158L, 159L, 38L, 39L, 40L, 41L, 42L, 160L, 161L, 43L, 162L,
44L, 163L, 164L, 165L, 166L, 45L, 167L, 46L, 47L, 168L, 48L,
49L, 169L, 50L, 170L, 171L, 51L, 172L, 52L, 173L, 174L, 175L,
53L, 54L, 55L, 176L, 177L, 56L, 57L, 58L, 178L, 179L, 59L, 60L,
180L, 181L, 182L, 61L, 183L, 62L, 63L, 64L, 184L, 65L, 66L, 67L,
68L, 69L, 70L, 71L, 72L, 73L, 74L, 185L, 75L, 76L, 77L, 186L,
78L, 187L, 79L, 80L, 188L, 81L, 82L, 83L, 84L, 85L, 189L, 190L,
191L, 86L, 87L, 192L, 193L, 194L, 88L, 89L, 90L, 91L, 92L, 93L,
94L, 195L, 196L, 197L, 198L, 95L, 199L, 200L, 96L, 201L, 202L,
203L, 204L, 97L, 98L, 205L, 206L, 207L, 208L, 209L, 99L, 210L,
211L, 212L, 100L, 213L, 214L, 215L, 101L), .Dim = c(214L, 2L)),
edge.length = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
Nnode = 114L,
tip.label = c("Brachyspira",
"Haemophilus", "Aggregatibacter", "Acinetobacter", "Klebsiella",
"Salmonella", "Escherichia", "Enterobacter", "Shigella",
"Citrobacter", "Hafnia", "Succinatimonas", "Corallococcus",
"Bilophila", "Desulfovibrio", "Azospirillum", "Acidiphilium",
"Acetobacter", "Sutterella", "Parasutterella", "Oxalobacter",
"Porphyromonas", "Paraprevotella", "Prevotella", "Alistipes",
"Rikenella", "Tannerella", "Parabacteroides", "Odoribacter",
"Butyricimonas", "Bacteroides", "Coprobacter", "Barnesiella",
"Fusobacterium", "Coraliomargarita", "Akkermansia", "Bifidobacterium",
"Gordonibacter", "Eggerthella", "Cryptobacterium", "Adlercreutzia",
"Enterorhabdus", "Collinsella", "Olsenella", "Lactobacillus",
"Weissella", "Oenococcus", "Lactococcus", "Streptococcus",
"Enterococcus", "Staphylococcus", "Bacillus", "Dialister",
"Veillonella", "Megasphaera", "Megamonas", "Mitsuokella",
"Selenomonas", "Phascolarctobacterium", "Acidaminococcus",
"Oscillibacter", "Intestinibacter", "Peptoclostridium", "Peptostreptococcus",
"Dorea", "Roseburia", "Anaerostipes", "Tyzzerella", "Coprococcus",
"Blautia", "Butyrivibrio", "Marvinbryantia", "Lachnoclostridium",
"Oribacterium", "Flavonifractor", "Intestinimonas", "Pseudoflavonifractor",
"Eubacterium", "Clostridium", "Butyricicoccus", "Faecalibacterium",
"Ruminococcus", "Anaerotruncus", "Subdoligranulum", "Ruminiclostridium",
"Parvimonas", "Peptoniphilus", "Catenibacterium", "Solobacterium",
"Coprobacillus", "Holdemania", "Erysipelatoclostridium",
"Turicibacter", "Stoquefichus", "Mycoplasma", "Acholeplasma",
"Pyramidobacter", "Synergistes", "Methanobrevibacter", "Methanomethylophilus",
"Methanoculleus"), root.edge = 1),
.Names = c("edge", "edge.length",
"Nnode", "tip.label", "root.edge"), class = "phylo", order = "cladewise"
)
Code:
df <- data.frame(id = tree$tip.label, p = runif(length(tree$tip.label)))
p1 <- ggtree(tree) +
geom_tiplab()
facet_plot(p1, panel = "p-value", data = df, geom = geom_point, aes(x = p))
But here, the name of the genera is truncated so I modified the xlim
parameter to see them completly.
p2 <-
ggtree(tree) +
geom_tiplab() +
xlim(c(0,7))
facet_plot(p2, panel = "p-value", data = df, geom = geom_point, aes(x = p))
It works! However, xlim
spreads to the second panel... How can I fix that?
I tried to add xlim(0:1)
or xlim = 0:1
in facet_plot()
but that doesn't work...
Edit after F. Privé answer:
I need to keep my labels at the right of the branches because I have to add some labels/statistics on them. And I want them left-aligned.
ggtree
provides the xlim_expand
function specifically for that purpose.
You need to specify the limits and the panel to which you want to apply it. In you case, you want to apply it to the Tree
panel:
p1 <- ggtree(tree) +
geom_tiplab(size = 2) +
xlim_expand(c(0,15), panel = "Tree")
facet_plot(p1, panel = "p-value", data = df, geom = geom_point, aes(x = p))
I exagerated the limits for the example but you can adjust it to your preference.