Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Phylogenetic_and_morphometric_analysis_of_Plantago_section_Coronopus_Plantaginaceae
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
AG-Albach
Phylogenetic_and_morphometric_analysis_of_Plantago_section_Coronopus_Plantaginaceae
Commits
a8753c6f
Commit
a8753c6f
authored
Feb 25, 2019
by
Jannes Höpke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
8abcb101
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
244 additions
and
0 deletions
+244
-0
Supplementary_appendices/Appendix_S9_Hoepke_et_al_ITS_plotting.r
...entary_appendices/Appendix_S9_Hoepke_et_al_ITS_plotting.r
+244
-0
No files found.
Supplementary_appendices/Appendix_S9_Hoepke_et_al_ITS_plotting.r
0 → 100644
View file @
a8753c6f
###### R Script for paper "Phylogenetic and morphometric analysis of Plantago section
###### Coronopus (Plantaginaceae)" by Jannes Hoepke, Ladislav Mucina and Dirk C. Albach
###### Date: 11 August 2015
###### Date of revision: 25 February 2019
###### Script is based on ...
# GLOR, Rich (2008). "R Tip: Labeling Trees w/ Posterior Probability and Bootstrap Support".
# http://treethinkers.blogspot.de/2008/10/labeling-trees-posterior-probability.html
# (access date: 4th August 2015)
# ... but was modified by Hoepke, J.
# This script was created to plot the support values (summarised by SumTrees.py) on the "best"
# (= most likely) tree from GARLI. For doing so, please copy supplementary Appendix files
# S5 to S23 in one folder (S5-S11 are for ITS, S12-S17 for trnLF, and S18-S23 for cpDNA).
################################# Initial set-up #######################################
### Loading packages
library
(
ape
)
library
(
geiger
)
library
(
phytools
)
### Print information about used package versions (not necessarily matching with citations in the
# publication but it shows the program versions during my last successful run during revision
# of this file)
sink
(
"Appendix_S10_Hoepke_et_al_tree_plotting_RSessionInfo.txt"
)
print
(
sessionInfo
())
sink
()
### Create (sub-)directories, e.g. for storing plots
system
(
"mkdir Plots"
)
########################### Make preparations ##################################
### Some plot options
# define cex-size for tiplabel
tcex
<
-0.7
# define cex-size for support
scex
<
-0.6
# define cex-size for tree line
lcex
<
-1.5
### Read in trees
read.nexus
(
"ITS_best.tre"
)
->
bestTree
#FigTree output (rooted)
read.nexus
(
"ITS_mb_consensus.tre"
)
->
bayesTree
#SumTrees.py output
read.nexus
(
"ITS_garli_consensus.tre"
)
->
bootTree
#SumTrees.py output
### Setting plot options
opar
<-
par
()
par
(
mar
=
c
(
0
,
0
,
0
,
0
),
xpd
=
T
)
########################### Root all trees ##################################
### Reroot bestTree
plot
(
bestTree
,
cex
=
tcex
)
### Adjust bestTree via "rotate"
nodelabels
()
rrbestTree
<-
rotate
(
bestTree
,
61
,
polytom
=
c
(
1
,
2
))
plot
(
rrbestTree
,
show.node.label
=
F
,
cex
=
tcex
)
nodelabels
()
rrbestTree
<-
rotate
(
rrbestTree
,
62
,
polytom
=
c
(
1
,
2
))
plot
(
rrbestTree
,
show.node.label
=
F
,
cex
=
tcex
)
nodelabels
()
rrbestTree
<-
rotate
(
rrbestTree
,
63
,
polytom
=
c
(
2
,
3
))
plot
(
rrbestTree
,
show.node.label
=
F
,
cex
=
tcex
)
nodelabels
()
rrbestTree
<-
rotate
(
rrbestTree
,
72
,
polytom
=
c
(
1
,
3
))
plot
(
rrbestTree
,
show.node.label
=
F
,
cex
=
tcex
)
nodelabels
()
rrbestTree
<-
rotate
(
rrbestTree
,
73
,
polytom
=
c
(
1
,
2
))
plot
(
rrbestTree
,
show.node.label
=
F
,
cex
=
tcex
)
nodelabels
()
rrbestTree
<-
rotate
(
rrbestTree
,
74
,
polytom
=
c
(
1
,
3
))
plot
(
rrbestTree
,
show.node.label
=
F
,
cex
=
tcex
)
nodelabels
()
rrbestTree
<-
rotate
(
rrbestTree
,
79
,
polytom
=
c
(
3
,
13
))
plot
(
rrbestTree
,
show.node.label
=
F
,
cex
=
tcex
)
nodelabels
()
rrbestTree
<-
rotate
(
rrbestTree
,
89
,
polytom
=
c
(
3
,
13
))
plot
(
rrbestTree
,
show.node.label
=
F
,
cex
=
tcex
)
# Create new labels for bestTree
bestLabels
<-
read.csv
(
"bestTree_tips.csv"
,
header
=
T
,
sep
=
";"
)
str
(
bestLabels
)
attach
(
bestLabels
)
bestLabels
<-
data.frame
(
lapply
(
bestLabels
,
as.character
),
stringsAsFactors
=
FALSE
)
#converts all colums from a dataframe into characters
detach
(
bestLabels
)
attach
(
bestLabels
)
str
(
bestLabels
)
bestTips
<-
mixedFontLabel
(
new1
,
" "
,
new2
,
", "
,
new3
,
" "
,
new4
,
italic
=
1
:
3
,
parenthesis
=
7
,
sep
=
""
)
### Reroot bootTree
plot
(
bootTree
,
cex
=
tcex
)
nodelabels
()
i
<
-67
rbootTree
<-
reroot
(
bootTree
,
i
,
position
=
0.5
*
bootTree
$
edge.length
[
which
(
bootTree
$
edge
[,
2
]
==
i
)])
plot
(
rbootTree
,
show.node.label
=
T
,
cex
=
tcex
)
#Adjust bootTree via "rotate"
nodelabels
()
rrbootTree
<-
rotate
(
rbootTree
,
68
,
polytom
=
c
(
1
,
2
))
plot
(
rrbootTree
,
show.node.label
=
T
,
cex
=
tcex
)
nodelabels
()
rrbootTree
<-
rotate
(
rrbootTree
,
72
,
polytom
=
c
(
1
,
2
))
plot
(
rrbootTree
,
show.node.label
=
T
,
cex
=
tcex
)
nodelabels
()
rrbootTree
<-
rotate
(
rrbootTree
,
74
,
polytom
=
c
(
1
,
2
))
plot
(
rrbootTree
,
show.node.label
=
T
,
cex
=
tcex
)
nodelabels
()
rrbootTree
<-
rotate
(
rrbootTree
,
75
,
polytom
=
c
(
18
,
19
))
plot
(
rrbootTree
,
show.node.label
=
T
,
cex
=
tcex
)
### Delete "Root" labeling
rrbootTree
$
node.label
[
which
(
rrbootTree
$
node.label
==
"Root"
)]
<-
""
plot
(
rrbootTree
,
show.node.label
=
T
,
cex
=
tcex
)
### Reroot bayesTree
plot
(
bayesTree
,
show.node.label
=
T
,
cex
=
tcex
)
nodelabels
()
i
<
-67
rbayesTree
<-
reroot
(
bayesTree
,
i
,
position
=
0.5
*
bayesTree
$
edge.length
[
which
(
bayesTree
$
edge
[,
2
]
==
i
)])
plot
(
rbayesTree
,
show.node.label
=
T
,
cex
=
tcex
)
#Adjust bootTree via "rotate"
nodelabels
()
rrbayesTree
<-
rotate
(
rbayesTree
,
68
,
polytom
=
c
(
1
,
2
))
plot
(
rrbayesTree
,
show.node.label
=
T
,
cex
=
tcex
)
nodelabels
()
rrbayesTree
<-
rotate
(
rrbayesTree
,
75
,
polytom
=
c
(
1
,
2
))
plot
(
rrbayesTree
,
show.node.label
=
T
,
cex
=
tcex
)
nodelabels
()
rrbayesTree
<-
rotate
(
rrbayesTree
,
80
,
polytom
=
c
(
1
,
13
))
plot
(
rrbayesTree
,
show.node.label
=
T
,
cex
=
tcex
)
### Delete "Root" labeling
rrbayesTree
$
node.label
[
which
(
rrbayesTree
$
node.label
==
"Root"
)]
<-
""
plot
(
rrbayesTree
,
show.node.label
=
T
,
cex
=
tcex
)
########################### Prepare comparisons of trees ##################################
### The getAllSubTrees function below is a necessary subfunction that atomizes a tree into
### each individual subclade and was provided compliments of Luke Harmon.
getAllSubtrees
<-
function
(
phy
,
minSize
=
2
)
{
res
<-
list
()
count
=
1
ntip
<-
length
(
phy
$
tip.label
)
for
(
i
in
1
:
phy
$
Nnode
)
{
l
<-
tips
(
phy
,
ntip
+
i
)
bt
<-
match
(
phy
$
tip.label
,
l
)
if
(
sum
(
is.na
(
bt
))
==
0
)
{
st
<-
phy
}
else
st
<-
drop.tip
(
phy
,
phy
$
tip.label
[
is.na
(
bt
)])
if
(
length
(
st
$
tip.label
)
>=
minSize
)
{
res
[[
count
]]
<-
st
count
<-
count
+1
}
}
res
}
### The plotBootBayes function below plots both posterior probability and bootstrap values
### on each node of the consensus tree obtained from your Maximum-Likelihood analysis.
### Bootstrap values will appear above and to the left of the node they support, whereas
### Bayesian posterior probabilies will appear below and to the left of the node.
tiff
(
"ITS_bestTree.tiff"
,
width
=
20
,
height
=
25
,
units
=
'cm'
,
res
=
300
)
par
(
mar
=
c
(
2
,
0
,
0
,
9
),
xpd
=
T
)
getAllSubtrees
(
rrbayesTree
)
->
bayesSub
getAllSubtrees
(
rrbootTree
)
->
bootSub
getAllSubtrees
(
rrbestTree
)
->
bestSub
bayesList
<-
matrix
(
""
,
Nnode
(
rrbestTree
),
1
)
bootList
<-
matrix
(
""
,
Nnode
(
rrbestTree
),
1
)
#The commands below compare all the subclades in the Bayes tree to all the subclades
#in the bootstrap tree, and vice versa, and identifies all those clades that are
#identical.
for
(
i
in
1
:
Nnode
(
rrbestTree
))
{
for
(
j
in
1
:
Nnode
(
rrbayesTree
))
{
match
(
bestSub
[[
i
]]
$
tip.label
[
order
(
bestSub
[[
i
]]
$
tip.label
)],
bayesSub
[[
j
]]
$
tip.label
[
order
(
bayesSub
[[
j
]]
$
tip.label
)])
->
shared
match
(
bayesSub
[[
j
]]
$
tip.label
[
order
(
bayesSub
[[
j
]]
$
tip.label
)],
bestSub
[[
i
]]
$
tip.label
[
order
(
bestSub
[[
i
]]
$
tip.label
)])
->
shared2
if
(
sum
(
is.na
(
c
(
shared
,
shared2
)))
==
0
)
{
rrbayesTree
$
node.label
[
j
]
->
bayesList
[
i
]
}}}
for
(
i
in
1
:
Nnode
(
rrbestTree
))
{
for
(
j
in
1
:
Nnode
(
rrbootTree
))
{
match
(
bestSub
[[
i
]]
$
tip.label
[
order
(
bestSub
[[
i
]]
$
tip.label
)],
bootSub
[[
j
]]
$
tip.label
[
order
(
bootSub
[[
j
]]
$
tip.label
)])
->
shared
match
(
bootSub
[[
j
]]
$
tip.label
[
order
(
bootSub
[[
j
]]
$
tip.label
)],
bestSub
[[
i
]]
$
tip.label
[
order
(
bestSub
[[
i
]]
$
tip.label
)])
->
shared2
if
(
sum
(
is.na
(
c
(
shared
,
shared2
)))
==
0
)
{
rrbootTree
$
node.label
[
j
]
->
bootList
[
i
]
}}}
plot
(
rrbestTree
,
cex
=
tcex
,
edge.width
=
lcex
,
show.tip.label
=
F
)
#Plots your Maximum-Likelihood consensus tree
tiplabels
(
bestTips
,
adj
=
-0.02
,
frame
=
"none"
,
col
=
"black"
,
bg
=
"white"
,
cex
=
tcex
)
bootNodes1
<-
bootList
bootNodes1
[
c
(
33
)]
<-
""
bootNodes2
<-
rep
(
""
,
length
(
bootNodes1
))
bootNodes2
[
33
]
<-
"100"
bayesNodes1
<-
bayesList
bayesNodes1
[
c
(
33
)]
<-
""
bayesNodes2
<-
rep
(
""
,
length
(
bayesList
))
bayesNodes2
[
33
]
<-
"1.00"
nodelabels
(
bootNodes1
,
adj
=
c
(
1.2
,
-0.3
),
frame
=
"n"
,
cex
=
scex
,
font
=
1
)
nodelabels
(
bayesNodes1
,
adj
=
c
(
1.12
,
1.3
),
frame
=
"n"
,
cex
=
scex
,
font
=
1
)
nodelabels
(
bootNodes2
,
adj
=
c
(
2.3
,
-0.3
),
frame
=
"n"
,
cex
=
scex
,
font
=
1
)
nodelabels
(
bayesNodes2
,
adj
=
c
(
2.1
,
1.3
),
frame
=
"n"
,
cex
=
scex
,
font
=
1
)
add.scale.bar
(
x
=
0
,
y
=
-1
,
length
=
NULL
,
cex
=
tcex
)
dev.off
()
# --> graphical output!
par
(
opar
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment