idiogramFISH: Idiograms with Marks and Karyotype Indices
Introduction
The goal of idiogramFISH is to plot idiograms of karyotypes, plasmids and circular chr. having a set of data.frames for chromosome data and optionally marks’ data (plotIdiograms function) (Roa and PC Telles, 2020). Idiograms can also be plotted in concentric circles. Separated chromatids can be visible when not in a circular plot.
Six styles of marks are available: square (squareLeft), dots, cM (cMLeft), cenStyle, upArrow, downArrow; its legend (label) can be drawn inline or to the right of karyotypes. It is possible to calculate also chromosome and karyotype indexes (Romero-Zarco, 1986; Watanabe et al., 1999) and classify chromosome morphology in the categories of Levan (1964), and Guerra (1986).
IdiogramFISH was written in R (R Core Team, 2019) and also uses crayon (Csárdi, 2017), tidyr (Wickham and Henry, 2020) and dplyr packages (Wickham et al., 2019a). Documentation was written with R-packages roxygen2 (Wickham et al., 2018), usethis (Wickham and Bryan, 2019), bookdown (Xie, 2016), knitr (Xie, 2015), pkgdown (Wickham and Hesselberth, 2019), Rmarkdown (Xie et al., 2018), rvcheck (Yu, 2019a), badger (Yu, 2019b), kableExtra (Zhu, 2019), rmdformats (Barnier, 2020) and RCurl (Temple Lang and CRAN team, 2019). For some vignette figures, packages rentrez (Winter, 2017), plyr (Wickham, 2011), phytools (Revell, 2012), ggtree (Yu et al., 2018), ggplot2 (Wickham, 2016) and ggpubr (Kassambara, 2019) were used.
Installation instructions
You can install idiogramFISH from CRAN with:
Or the devel. version
Install Gitlab dev. ver. with devtools (Wickham et al., 2019b):
Attention windows users, please install Rtools and git
Vignettes use a lua filter, so you would need pandoc ver. > 2. rmarkdown::pandoc_version()
# This installs package devtools, necessary for installing the dev version
install.packages("devtools")
url <- "https://gitlab.com/ferroao/idiogramFISH"
# Necessary packages for vignettes:
list.of.packages <- c(
"plyr",
"knitr",
"kableExtra",
"rmdformats",
"rmarkdown",
"RCurl",
"rvcheck",
"badger",
"rentrez"
)
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
# Linux with vignettes and Windows
devtools::install_git(url = url,build_vignettes = TRUE, force=TRUE)
# Mac with vignettes
devtools::install_git(url = url, build_opts=c("--no-resave-data","--no-manual") )Or install it in terminal:
Need help?
Vignettes:
Online:
Launch vignettes from R for the installed version:
Minimal examples
Monocentrics:
Define your plotting window size with something like par(pin=c(10,6)), or with svg(), png(), etc. Add chromosome morphology according to Guerra (1986) or (Levan et al., 1964)
library(idiogramFISH)
data(dfOfChrSize) # chromsome data
data(dfMarkColor) # mark general data
data(dfOfMarks2) # mark position data (inc. cen.)
# column Mbp not for plotting purposes
dfOfChrSize$Mbp<-(dfOfChrSize$shortArmSize+dfOfChrSize$longArmSize)*100
svg("dfOfChrSize.svg",width=10,height=6 )
# png("dfOfChrSize.png", width=500, height=400)
plotIdiograms(dfChrSize =dfOfChrSize, # data.frame of chr. size
dfMarkColor=dfMarkColor, # d.f of mark style <- Optional
dfMarkPos=dfOfMarks2, # df of mark positions (includes cen. marks)
karHeight=5, # kar. height
chrWidth = 1.2, # chr. width
chrSpacing = 1, # space among chr.
morpho="Guerra", # chr. morpho. classif. (Guerra, Levan, both, "" ) ver. >= 1.12 only
chrIndex="CI", # cen. pos. (CI, AR, both, "" ) ver. >= 1.12 only
chrSize = TRUE, # add chr. sizes under chr.
chrSizeMbp = TRUE, # add Mbp sizes under chr. (see above)
rulerPos= 0, # position of ruler
ruler.tck=-0.01, # size and orientation of ruler ticks
rulerNumberSize=.8 # font size of rulers
,xPosRulerTitle = 3 # pos of ruler title
,legendWidth=1 # width of legend items
,fixCenBorder = TRUE # use chrColor as border color of cen. or cen. marks
,distTextChr = 1.2 # chr. text separation
,xlimLeftMod = 2 # xlim left param.
,ylimBotMod = 0 # modify ylim bottom argument
,ylimTopMod = 0 # modify ylim top argument
)
dev.off() # close svg()Let’s explore the data.frames for monocentrics:
If only one species, column OTU is optional
| chrName | shortArmSize | longArmSize | Mbp |
|---|---|---|---|
| 1 | 3 | 4 | 700 |
| 2 | 4 | 5 | 900 |
| 3 | 2 | 3 | 500 |
| X | 1 | 2 | 300 |
| markName | markColor | style |
|---|---|---|
| 5S | red | dots |
| 45S | chartreuse3 | square |
| DAPI | blue | square |
| CMA | darkgoldenrod1 | square |
p, q and w marks can have empty columns markDistCen and markSize since v. 1.9.1 to plot whole arms (p, q) and whole chr. w.
| chrName | markName | chrRegion | markSize | markDistCen |
|---|---|---|---|---|
| 1 | 5S | p | 1 | 0.5 |
| 1 | 45S | q | 1 | 0.5 |
| X | 45S | p | NA | NA |
| 3 | DAPI | q | 1 | 1.0 |
| 1 | DAPI | cen | NA | NA |
| X | CMA | cen | NA | NA |
Holocentrics:
library(idiogramFISH)
# load some package data.frames - optional
data(dfChrSizeHolo, dfMarkColor, dfMarkPosHolo)
# column Mbp not for plotting purposes
dfChrSizeHolo$Mbp<-dfChrSizeHolo$chrSize*100
# svg("testing.svg",width=14,height=8 )
par(mar = c(0, 0, 0, 0), omi=rep(0,4) )
plotIdiograms(dfChrSize =dfChrSizeHolo, # data.frame of chr. size
dfMarkColor=dfMarkColor, # df of mark style
dfMarkPos =dfMarkPosHolo, # df of mark positions
addOTUName=FALSE, # do not add OTU names
distTextChr = 1, # chr. name distance to chr.
chrSize = TRUE, # show chr. size under chr.
chrSizeMbp = TRUE, # show chr. size in Mbp under chr. requires Mbp column
rulerPos=-0.1, # position of ruler
rulerNumberPos=.9 # position of numbers of rulers
,xPosRulerTitle = 3 # pos. of ruler title (units)
,xlimLeftMod=2 # modify xlim left argument of plot
,ylimBotMod=.2 # modify ylim bottom argument of plot
,legendHeight=.5 # height of legend labels
,legendWidth = 1.2 # width of legend labels
,xModifier = .025 # separ. among chromatids
); #dev.off() # close svg()Let’s explore the data.frames for holocentrics:
- chromosome data, if only 1 species, column OTU is optional
| chrName | chrSize | Mbp |
|---|---|---|
| 1 | 3 | 300 |
| 2 | 4 | 400 |
| 3 | 2 | 200 |
| 4 | 5 | 500 |
- mark general data
| markName | markColor | style |
|---|---|---|
| 5S | red | dots |
| 45S | chartreuse3 | square |
| DAPI | blue | square |
| CMA | darkgoldenrod1 | square |
- mark position data, if only 1 species, column OTU is optional (mandatory if in d.f of Chr. Size)
| chrName | markName | markPos | markSize |
|---|---|---|---|
| 3 | 5S | 1.0 | 0.5 |
| 3 | DAPI | 1.5 | 0.5 |
| 1 | 45S | 2.0 | 0.5 |
| 2 | DAPI | 2.0 | 0.5 |
| 4 | CMA | 2.0 | 0.5 |
| 4 | 5S | 0.5 | 0.5 |
Plotting both mono. and holo.
Merge data.frames with plyr (Wickham, 2011)
# chromosome data, if only 1 species, column OTU is optional
require(plyr)
dfOfChrSize$OTU <- "Species mono"
dfChrSizeHolo$OTU <- "Species holo"
monoholoCS <- plyr::rbind.fill(dfOfChrSize,dfChrSizeHolo)
dfOfMarks2$OTU <-"Species mono"
dfOfMarks2[which(dfOfMarks2$markName=="5S"),]$markSize<-.7
dfMarkPosHolo$OTU <-"Species holo"
monoholoMarks <- plyr::rbind.fill(dfOfMarks2,dfMarkPosHolo)Plot
library(idiogramFISH)
#svg("testing.svg",width=14,height=10 )
png("monoholoCS.png", width=700, height=600)
par(mar=rep(0,4))
plotIdiograms(dfChrSize = monoholoCS, # data.frame of chr. size
dfMarkColor= dfMarkColor, # df of mark style
dfMarkPos = monoholoMarks,# df of mark positions, includes cen. marks
chrSize = TRUE, # show chr. size under chr.
squareness = 4, # vertices squareness
roundedCen = FALSE, # triangular cen.
addOTUName = TRUE, # add OTU names
OTUTextSize = .7, # font size of OTU
distTextChr = .5, # separ. among chr. and text and among chr. name and indices
karHeiSpace = 4, # karyotype height inc. spacing
karIndexPos = .2, # move karyotype index
legendHeight= 1, # height of legend labels
legendWidth = 1, # width of legend labels
fixCenBorder = TRUE, # use chrColor as border color of cen. or cen. marks
rulerPos= 0, # position of ruler
ruler.tck=-0.02, # size and orientation of ruler ticks
rulerNumberPos=.9, # position of numbers of rulers
xPosRulerTitle = 3.5, # ruler title (units) position
xlimLeftMod=1, # modify xlim left argument of plot
xlimRightMod=3, # modify xlim right argument of plot
ylimBotMod= .2 # modify ylim bottom argument of plot
,chromatids=FALSE # do not show separ. chromatids
# for Circular Plot, add:
# ,circularPlot = TRUE # circularPlot
# ,shrinkFactor = .9 # percentage 1 = 100% of circle with chr.
# ,circleCenter = 3 # X coordinate of circleCenter (affects legend pos.)
# ,chrLabelSpacing = .9 # chr. names spacing
# ,OTUsrt = 0 # angle for OTU name (or number)
# ,OTUplacing = "number" # Use number and legend instead of name
# ,OTULabelSpacerx = -1.5 # modify position of OTU label, when OTUplacing="number" or "simple"
# ,OTUlegendHeight = 1.5 # space among OTU names when in legend - OTUplacing
)
dev.off() # close pngCitation
To cite idiogramFISH in publications, please use:
Roa F, Telles MPC (2020) idiogramFISH: Idiograms with Marks and Karyotype Indices, Universidade Federal de Goiás. Brazil. R-package. version 1.16.6 https://ferroao.gitlab.io/manualidiogramfish/. doi:10.5281/zenodo.3579417
To write citation to file:
1 Plotting chromosomes
This guide shows how to plot idiograms of measured karyotypes and optionally marks.
1.2 Plot monocentrics
Initially you have to put chromosome data in data.frames.
Main three data.frames:
- One for chr. sizes (parameter
dfChrSize) - One for marks’ positions (parameter
dfMarkPos) - One (optional) for mark style (parameter
dfMarkColor)
For a way to start with only one data.frame of chr. size and marks’ pos., see Chapter 8.
data.frame of chr. size
# Example data.frame to write in R, use: (column OTU is optional if only 1 OTU)
mydfChrSize<-read.table(text=
" OTU chrName shortArmSize longArmSize
\"Species one\" 1 1.5 2.0
\"Species one\" 2 2.0 2.5
\"Species one\" 3 1.0 1.5
\"Species one\" B 2.0 3.5" , header=TRUE, stringsAsFactors=FALSE,fill=TRUE)| OTU | chrName | shortArmSize | longArmSize |
|---|---|---|---|
| Species one | 1 | 1.5 | 2.0 |
| Species one | 2 | 2.0 | 2.5 |
| Species one | 3 | 1.0 | 1.5 |
| Species one | B | 2.0 | 3.5 |
loading saved data:
If you use RStudio, in the menu “Session”, use “Set working directory” for choosing your desired folder or:
Open your chromosome data data.frame importing it from a .csv (read.csv) or .xls file (readxl).
Editing a data.frame:
For fixing column names use:
Marks’ position data
Open or write your mark positions in a data.frame. This data.frame has the marks present in all karyotypes with position info. This data.frame has also the centromeric marks present in all karyotypes.
Column chrRegion defines the arm or region of occurrence (p, q, w, cen). Distance to centromere is defined in markDistCen.
# We will use column OTU if data.frame because chromosome size df has it
mydfOfMarks<-read.table(text=
" OTU chrName markName chrRegion markSize markDistCen
\"Species one\" 1 45S p NA NA # no measure (NA) means whole arm
\"Species one\" 1 5S q 0.5 0.5
\"Species one\" B \"B mark\" w NA NA # w for whole chromosome
\"Species one\" B \"cB mark\" q NA 1.0
\"Species one\" 2 45S p 1 1.0
\"Species one\" 2 gene1 q 0.5 1.0
\"Species one\" 2 gene2 q 0.5 2.0
\"Species one\" 3 DAPI q NA 1
\"Species one\" 3 gene3 p NA 0.5
\"Species one\" 1 DAPI cen
\"Species one\" 3 CMA cen", header=TRUE, stringsAsFactors=FALSE,fill=TRUE)| OTU | chrName | markName | chrRegion | markSize | markDistCen |
|---|---|---|---|---|---|
| Species one | 1 | 45S | p | NA | NA |
| Species one | 1 | 5S | q | 0.5 | 0.5 |
| Species one | B | B mark | w | NA | NA |
| Species one | B | cB mark | q | NA | 1.0 |
| Species one | 2 | 45S | p | 1.0 | 1.0 |
| Species one | 2 | gene1 | q | 0.5 | 1.0 |
| Species one | 2 | gene2 | q | 0.5 | 2.0 |
| Species one | 3 | DAPI | q | NA | 1.0 |
| Species one | 3 | gene3 | p | NA | 0.5 |
| Species one | 1 | DAPI | cen | NA | NA |
| Species one | 3 | CMA | cen | NA | NA |
For fixing column names use something like:
Marks’ general data
This data.frame is optional. It has the marks present in all karyotypes without position info.
It includes color and style. If the style column is not present, param. defaultStyleMark = "square" will be used during plotting.
Note the cenStyle to make constrictions, mimicking centromeres.
# From scratch:
mydfMarkColor<-read.table(text=
" markName markColor style
5S red dots
45S chartreuse3 square
gene1 chocolate upArrow
gene2 salmon downArrow
gene3 \"#056522\" cMLeft
DAPI dodgerblue cM
\"cB mark\" black cenStyle
CMA darkgoldenrod1 square
\"B mark\" black square" , header=TRUE, stringsAsFactors=FALSE,fill=TRUE)| markName | markColor | style |
|---|---|---|
| 5S | red | dots |
| 45S | chartreuse3 | square |
| gene1 | chocolate | upArrow |
| gene2 | salmon | downArrow |
| gene3 | #056522 | cMLeft |
| DAPI | dodgerblue | cM |
| cB mark | black | cenStyle |
| CMA | darkgoldenrod1 | square |
| B mark | black | square |
For fixing column names use:
Add some text to the right
For ver. > 1.7
# We will use column note to add a note to the right of the karyotype of the
# OTU in column OTU
notesdf<-read.table(text=
" OTU note
\"Species one\" \"Author notes\" ", header=TRUE, stringsAsFactors=FALSE,fill=TRUE)For adding just the OTU name (from column OTU of data.frame of chr. size) to the right, use OTUasNote=TRUE
Plotting
You can plot without marks (use only 1st data.frame), but we will use all 4 data.frames created. By default the function will calculate indices (Romero-Zarco, 1986; Watanabe et al., 1999) and morphological categories of Guerra (1986) and Levan (1964). Use parameters chrIndex and morpho of the function plotIdiograms to modify that. See ?plotIdiograms.
The cM style of mark always adds the name as if legend="inline", even when legend="aside" (default).
# svg("mydfChrSize.svg",width=12,height=6 )
par(mar = c(0, 0, 0, 0))
plotIdiograms(dfChrSize= mydfChrSize, # chr. size data.frame
dfMarkPos= mydfOfMarks, # mark position data.frame (inc. cen.)
dfMarkColor=mydfMarkColor, # mark style d.f.
chrSpacing=.6, # separ. among chr.
distTextChr = .7, # separation among text and chr. names and ind.
orderChr = "name", # order chr. by name
karHeiSpace=2 # vertical size of karyotype including spacer
,arrowhead = .5 # proportion of head of arrow
,fixCenBorder = TRUE # use chrColor as border color of cen. or cen. marks
,legendWidth = .8 # legend item width
,legendHeight = .5 # legend item height
,markLabelSpacer = 2 # legend spacer
,lwd.mimicCen = 2.5 # constric. mark line width
,rulerPos=0 # ruler position
,ruler.tck=-0.01 # ticks of ruler size and orientation
,xPosRulerTitle = 2.5 # ruler units pos.
,markPer = "45S" # show mark % of chr. under kar.
,showMarkPos = TRUE # show position of marks under kar. See bToRemove
,bToRemove = c("B mark","cB mark") # bands to remove from pos. calc. See showMarkPos
,notes=notesdf # data.frame with notes
,notesTextSize = 1.3 # font size of notes
,notesPosX = .2 # space from chr. (right) to note
,ylimBotMod = 2 # modify ylim bottom argument
,ylimTopMod = 0 # modify ylim top argument
,xlimLeftMod = 2 # modify left xlim
,xlimRightMod = 3 # modify right xlim
,lwd.cM = 2 # thickness of cM marks
,pattern = "^c" # regex pattern to remove from mark names
,remSimiMarkLeg=TRUE # remove pseudoduplicated mark names from legend (same after pattern removal)
# ,legend="inline" # legend next to chr.
# ,bannedMarkName = "cB mark" # remove from legends
); # dev.off()Vertices when centromereSize=0 are rounded:
png("mydfChrSize2.png", width=550, height=550)
par(mar = c(0, 0, 0, 0))
plotIdiograms(dfChrSize = bigdfOfChrSize[1:8,], # chr. size data.frame
dfMarkColor = mydfMarkColor,# mark style df
dfMarkPos = bigdfOfMarks, # mark position df
centromereSize = 0, # <- HERE
squareness=3, # vertices squareness
chrSpacing = .7, # space among chr.
karHeight = 2, # karyotype rel. height
karHeiSpace=4, # vertical size of karyotype including spacer
amoSepar= 2.5, # separation among karyotype
indexIdTextSize=.8, # font size of chr. name and indices
karIndexPos = .1, # position of kar. index
markLabelSize=.7, # font size of mark legends
fixCenBorder = FALSE, # do not use chrColor as border color of cen. or cen. marks
distTextChr = .8, # separation among chr. and ind.
rulerPos= 0, # ruler position
ruler.tck=-0.01, # ticks of ruler size and orientation
xPosRulerTitle = 2.6, # ruler units pos.
xlimLeftMod = 2, # modify xlim left argument
ylimBotMod = 0.4, # modify ylim bottom argument
ylimTopMod = 0 # modify ylim top argument
,lwd.cM = 2 # thickness of cM marks
)
dev.off()There is no need to add dfMarkColor and you can also use the parameter mycolors (optional too), to establish marks’ colors. Colors are assigned depending on the order of marks, i.e.:
Let’s use the cM style of marks. A protruding line.
cM style does not apply to centromere marks. To make something similar, use centromereSize=0, legend="inline" and fixCenBorder = FALSE.
charVectorCol <- c("tomato3","darkolivegreen4","dfsd","dodgerblue","chartreuse3")
# Modify size of kar. to use rulerInterval and ceilingFactor (>= 1.13)
quo<-9
dfOfChrSize2<-dfOfChrSize
dfOfChrSize2$shortArmSize<-dfOfChrSize$shortArmSize/quo
dfOfChrSize2$longArmSize<-dfOfChrSize$longArmSize/quo
dfOfMarks2b<-dfOfMarks2
dfOfMarks2b$markSize<-dfOfMarks2$markSize/quo
dfOfMarks2b$markDistCen<-dfOfMarks2$markDistCen/quo
png("dfOfChrSizeVector.png", width=1000, height=450)
par(mar=rep(0,4))
plotIdiograms(dfChrSize = dfOfChrSize2, # d.f. of chr. sizes
dfMarkPos = dfOfMarks2b, # d.f. of marks' positions
defaultStyleMark = "cM", # forces "cM" style in d.f dfMarkColor (exc. 5S)
mycolors = charVectorCol, # colors to use
distTextChr = 0.5, # separ. text and chr.
markLabelSize=.7, # font size for labels (legend)
lwd.cM=2, # width of cM marks
legendWidth=0.9, # legend item width
legendHeight=.5,
rulerPos= 0, # ruler position
ruler.tck=-0.01, # ruler tick orientation and length
rulerNumberSize=.5 # ruler font size
,xPosRulerTitle = 2.8 # ruler units pos.
,xlimRightMod = 1 # modify xlim right arg.
)
dev.off() # close png1.3 Plot holocentrics
Initially you have to put your chromosome data in data.frames.
Main three data.frames:
- One for chr. sizes (parameter
dfChrSize) - One for marks’ positions (parameter
dfMarkPos) - One (optional) for mark style (parameter
dfMarkColor)
For simplicity, I call a holocen. any karyotype without centromeres.
Accordingly, they lack the columns: shortArmSize and longArmSize.
From scratch:
| OTU | chrName | chrSize |
|---|---|---|
| Species one | 1 | 6.5 |
| Species one | 2 | 5.0 |
| Species one | 3 | 4.0 |
| Species one | 4 | 4.0 |
| Species one | X | 3.0 |
or loading saved data:
If you use RStudio, in menu “Session”, open “Set working directory” for choosing your desired folder or:
Open your chromosome data as data.frame importing it from a .csv (read.csv) or .xls file (readxl).
For fixing column names use:
Get marks general data
This data.frame is optional for ver. > 1.0.0
Put your mark data in a data.frame. This data.frame has the marks present in all karyotypes without position info. If the style column is not present, param. defaultStyleMark = "square" will be used during plotting.
| markName | markColor | style |
|---|---|---|
| 5S | red | dots |
| 45S | chartreuse3 | square |
| DAPI | dodgerblue | square |
| CMA | darkgoldenrod1 | square |
For fixing column names use:
Get marks positions data
Open or write your mark positions in a data.frame. This data.frame has the marks present in all karyotypes with position info.
For holocentrics, position is defined with column markPos, while in monocentrics it is markDistCen.
Column chrRegion can be absent for holocentrics.
# We will use column OTU if data.frame because chromosome size df has it
mydfMarkPosHolo<-read.table(text=
" OTU chrName markName markPos markSize chrRegion
\"Species one\" 4 B NA NA w # w = whole chromosome mark
\"Species one\" 3 DAPI 2.0 0.5
\"Species one\" 1 45S 2.0 0.5
\"Species one\" 2 DAPI 2.0 0.5
\"Species one\" X CMA 2.0 0.5
\"Species one\" X 5S 0.5 0.5
\"Species one\" X 5S 0.5 0.5" , header=TRUE, stringsAsFactors=FALSE,fill=TRUE)| OTU | chrName | markName | markPos | markSize | chrRegion |
|---|---|---|---|---|---|
| Species one | 4 | B | NA | NA | w |
| Species one | 3 | DAPI | 2.0 | 0.5 | |
| Species one | 1 | 45S | 2.0 | 0.5 | |
| Species one | 2 | DAPI | 2.0 | 0.5 | |
| Species one | X | CMA | 2.0 | 0.5 | |
| Species one | X | 5S | 0.5 | 0.5 | |
| Species one | X | 5S | 0.5 | 0.5 |
For fixing column names use something like:
Plotting
You can plot without marks (passing only 1st data.frame), but we will use all 4 data.frames created:
# library(idiogramFISH)
# svg("mydfChrSizeHolo.svg",width=13.5,height=6 )
# png("mydChrSizeHolo.png", width=600, height=300)
par(mar=c(0,0,0,1)) # bottom left top right
plotIdiograms(dfChrSize = mydfChrSizeHolo,# data.frame of chr. sizes
dfMarkColor= mydfMarkColor, # df of mark style
dfMarkPos = mydfMarkPosHolo,# df of mark positions
addOTUName=FALSE, # add OTU names
xlimLeftMod= 2, # modify xlim left argument
ylimTopMod= -1, # modify ylim top argument
ylimBotMod= -2 # modify ylim bottom argument
,rulerPos = 0 # ruler position
,ruler.tck = -0.01 # ruler ticks size and orient.
,xPosRulerTitle=2.6
,legendWidth=1 # width of legend
,legendHeight=.7 # height of legend item
,xModifier=0.01 # separation among chromatids
); # dev.off() # closes png or svgIt is not mandatory to use dfMarkColor and you can also use the parameter mycolors (optional too), to establish marks’ colors. When using mycolors, colors are assigned depending on the order of marks, i.e.:
unique(dfMarkPosHolo$markName)
# [1] "5S" "DAPI" "45S" "CMA"
par(mar=rep(0,4))
plotIdiograms(dfChrSize = dfChrSizeHolo, # d.f. of chr. size
dfMarkPos = dfMarkPosHolo, # d.f. of marks' positions
mycolors = c("red","dodgerblue","fdsjkfds","chartreuse3","darkgoldenrod1"), # colors for marks
addOTUName=FALSE, # do not add OTU name
ruler=FALSE, # do not add ruler
xlimLeftMod=1, # modify left xlim arg.
xlimRightMod=3, # modify right xlim arg.
ylimBotMod=.2 # modify bottom ylim
,chromatids=FALSE # do not show separ. chromatids
)1.4 Plot holo. and mono. in the same karyotype
To accomplish this, we will use cenStyle marks in a (modified) holocen. karyotype. The ruler is continuous as in holocen.
# mark general characteristics' data.frame:
mydfMarkColor2<-read.table(text=
" markName markColor style
1 5S red dots
2 45S chartreuse3 square
3 DAPI dodgerblue square
4 CMA darkgoldenrod1 square
5 c45S chartreuse3 cenStyle # <- simulate Cen.
6 c5S red cenStyle
7 cB black cenStyle
8 constr NA cenStyle
9 B black square" , header=TRUE, stringsAsFactors=FALSE,fill=TRUE)
# add new marks to data.frame of marks' position
mydfMarkPosHolo2<-plyr::rbind.fill(mydfMarkPosHolo,
data.frame(OTU="Species one",
chrName=1:4,
markName=c("c45S","c5S","constr","cB"), # <- use new mark
markPos=2.5,
markSize=NA
)
)
# png("mydChrSizeHolo.png", width=600, height=300)
par(mar=c(0,0,0,1)) # bottom left top right
plotIdiograms(dfChrSize = mydfChrSizeHolo, # data.frame of chr. sizes
dfMarkColor= mydfMarkColor2, # df of mark style
dfMarkPos = mydfMarkPosHolo2,# df of mark positions
addOTUName=FALSE, # add OTU names
xlimLeftMod= 2, # modify xlim left argument
ylimTopMod= -1, # modify ylim top argument
ylimBotMod= -2 # modify ylim bottom argument
,rulerPos = 0
,ruler.tck = -0.01
,xPosRulerTitle = 2.6
,legendWidth=1 # width of legend
,legendHeight=.7 # height of legend item
,lwd.mimicCen=2.5 # line width of const. mark
,pattern="^c" # regex pattern to remove from mark names
,remSimiMarkLeg = TRUE # remove pseudoduplicated mark names (got equal after pattern removal)
# ,legend="inline" # legends inline
# ,bannedMarkName = c("c45S","cB") # do not use this names from labels
); # dev.off() closes png or svg2 Multiple OTUs
2.1 Example with several species (OTUs) - mono.
To illustrate this, we will load some data.frames from the package
- Chromosome sizes
| OTU | chrName | shortArmSize | longArmSize |
|---|---|---|---|
| Species 1 | 1 | 1.5 | 2.0 |
| Species 1 | 2 | 2.0 | 2.5 |
| Species 1 | 3 | 1.0 | 2.0 |
| Species 2 | 1 | 3.0 | 4.0 |
| Species 2 | 2 | 4.0 | 5.0 |
| Species 2 | 3 | 2.0 | 3.0 |
| Species 2 | X | 1.0 | 2.0 |
| Species 2 | 4 | 3.0 | 4.0 |
| Species 3 | 1 | 3.2 | 4.0 |
| Species 3 | 2 | 4.5 | 5.0 |
| Species 3 | 3 | 2.0 | 3.0 |
| Species 3 | 4 | 1.5 | 2.0 |
| Species 3 | 5 | 4.8 | 6.0 |
| Species 3 | 6 | 6.1 | 7.0 |
| Species 4 | 1 | 1.5 | 2.0 |
- Mark characteristics, does not require OTU
- df optional for ver > 1.0.0
| markName | markColor | style |
|---|---|---|
| 5S | red | dots |
| 45S | chartreuse3 | square |
| DAPI | blue | square |
| CMA | darkgoldenrod1 | square |
- Mark position
| OTU | chrName | markName | chrRegion | markDistCen | markSize |
|---|---|---|---|---|---|
| Species 1 | 1 | 5S | p | 0.5 | 1 |
| Species 1 | 1 | 45S | q | 0.5 | 1 |
| Species 1 | 2 | 45S | p | 1.0 | 1 |
| Species 1 | 3 | DAPI | q | 1.0 | 1 |
| Species 3 | 3 | 5S | p | 1.0 | 1 |
| Species 3 | 3 | DAPI | q | 1.0 | 1 |
| Species 3 | 4 | 45S | p | NA | NA |
| Species 3 | 4 | DAPI | q | 1.0 | 1 |
| Species 3 | 5 | CMA | q | 2.0 | 1 |
| Species 3 | 6 | 5S | q | 0.5 | 1 |
| Species 2 | 1 | DAPI | cen | NA | NA |
| Species 2 | 4 | CMA | cen | NA | NA |
Plotting
# png("bigdfOfChrSize.png", width=650, height=1300)
par(mar = c(0, 0, 0, 0))
plotIdiograms(dfChrSize =bigdfOfChrSize,# chr. sizes
dfMarkColor=dfMarkColor, # mark characteristics, optional in dev version. see above.
dfMarkPos =bigdfOfMarks, # mark positions (inc. cen. marks)
karHeight=2.5, # karyotype rel. height
karHeiSpace=6, # karyotype vertical size with spacing
chrWidth = .35, # chr. width
amoSepar = 2, # Vertical separation of kar. when karSepar = TRUE
squareness = 10, # squareness of chr. vertices
distTextChr=.8, # distance of chr. to text
chrIndex = "AR", # add arm ratio only. For v. >=1.12
nameChrIndexPos = 3,
morpho="Guerra", # add chr. morphology by Guerra, see above. For v. >=1.12
indexIdTextSize=.6, # font size of indices and chr. name
OTUTextSize=.9, # font size of OTU names
markLabelSize=.7, # font size of legend
fixCenBorder = TRUE, # use chrColor as border color of cen. or cen. marks
legendHeight = 2, # height of labels
rulerPos=-1, # position of ruler
ruler.tck=-0.004, # size and orient. of ticks in ruler
rulerNumberPos=.4, # position of numbers of ruler
rulerNumberSize=.4, # font size of ruler
xPosRulerTitle = 5, # ruler units pos.
rulerTitleSize=.5, # ruler font size of units (title)
xlimRightMod = 3, # modify xlim left argument
xlimLeftMod = 2, # modify xlim left argument
ylimBotMod = 0, # modify ylim bottom argument
ylimTopMod = -.3 # modify ylim top argument
); # dev.off() # for png()2.2 Example with several species (OTUs) - holo.
To illustrate this, we will load some data.frames from the package
- Chromosome sizes
| OTU | chrName | chrSize |
|---|---|---|
| species one | 1 | 5.1 |
| species one | 2 | 5.0 |
| species one | 3 | 4.9 |
| species one | 4 | 5.2 |
| species two | 1 | 3.0 |
| species two | 2 | 4.0 |
| species two | 3 | 2.0 |
| species two | 4 | 5.0 |
| species three | 1 | 1.5 |
| species three | 2 | 2.0 |
| species three | 3 | 6.0 |
| species three | 4 | 8.0 |
- Mark characteristics, does not require OTU
- d.f optional for ver. > 1.0.0
| markName | markColor | style |
|---|---|---|
| 5S | red | dots |
| 45S | chartreuse3 | square |
| DAPI | blue | square |
| CMA | darkgoldenrod1 | square |
- Mark position
| OTU | chrName | markName | markPos | markSize |
|---|---|---|---|---|
| species two | 3 | 5S | 1.0 | 0.5 |
| species two | 3 | DAPI | 2.0 | 0.5 |
| species two | 1 | 45S | 2.0 | 0.5 |
| species two | 2 | DAPI | 2.0 | 0.5 |
| species two | 4 | CMA | 2.0 | 0.5 |
| species two | 4 | 5S | 0.5 | 0.5 |
Plotting
library(idiogramFISH)
# fig.width=6, fig.height=6
png("bigdfChrSizeHolo.png", width=600, height=600)
par(mar=rep(0,4))
plotIdiograms(dfChrSize=bigdfChrSizeHolo, # chr. size data.frame
dfMarkColor=dfMarkColor, # df of mark style
dfMarkPos=bigdfMarkPosHolo, # df of marks' position
markDistType="cen", # measure towards center of mark
squareness=6, # vertices squareness of chr. and marks
karHeiSpace = 4, # karyotype height including spacing
karSepar=TRUE, # reduce vertical space among karyotypes
amoSepar = 1, # separation among karyotypes
distTextChr=.5, # distance text to chr.
legendWidth = 1 # width of legend labels
,chrId="simple", # numbering of chr., not using "original" name
indexIdTextSize=.9, # font size of chr names and indices
markLabelSize=.9, # font size of legends
rulerPos=0, # position of ruler
rulerNumberSize=.9, # font size of ruler
ruler.tck= -.004, # tick length and orient.
xPosRulerTitle = 3, # position of ruler units (title)
ylimBotMod=.4 # modify ylim bottom argument
,xModifier=0.01 # separation among chromatids
)
dev.off()3 Changing Units
3.1 Using bases instead of micrometers - no. cen.
Create some data in millions of bases:
require(idiogramFISH)
# transform data.frames for simplicity
bigdfChrSizeHoloMb <- bigdfChrSizeHolo # included in idiogramFISH
bigdfChrSizeHoloMb$chrSize <- bigdfChrSizeHoloMb$chrSize * 98000000
bigdfMarkPosHoloMb <- bigdfMarkPosHolo
bigdfMarkPosHoloMb$markPos <- bigdfMarkPosHoloMb$markPos * 98000000
bigdfMarkPosHoloMb$markSize<- bigdfMarkPosHoloMb$markSize * 98000000Plotting
In the plot length is shown in Mb
png("bigdfChrSizeHolo2.png", width=700, height=600)
# par(mar=c(1,1,1,1))
par(mar=rep(0,4))
plotIdiograms(dfChrSize=bigdfChrSizeHoloMb, # chr. size data.frame
dfMarkColor=dfMarkColor, # df of mark style
dfMarkPos=bigdfMarkPosHoloMb, # df of mark positions
markDistType="cen", # distance to mark is to its center
squareness=4, # vertices squareness of chr. and marks
distTextChr = .5, # separ. chr. to text
karHeight = 2, # rel. karyotype height
karHeiSpace = 4, # karyotype height including spacing
karSepar=TRUE, # reduce spacing among karyotypes
amoSepar = 1, # depends on karSepar, amount of sep.
chrId="simple", # chr. names not "original"
chrSize=TRUE, # show chr. size under chr.
indexIdTextSize=.9, # font size of chr names and indices
karIndex = FALSE, # do not add karyotype asymmetry index
rulerNumberSize=.9, # font size of ruler
rulerPos = 0, # position of ruler
ruler.tck= -.004, # ruler tick length and orient.
xPosRulerTitle = 3.5, # modifies position of ruler title (Mb)
markLabelSize=.9, # font size of legend
legendWidth = 1.2, # width of legends
xlimLeftMod = 1, # modify left argument of xlim
ylimBotMod=.4 # modify bottom argument of ylim
,chromatids=FALSE # do not show chromatids
)
dev.off()For another example see: https://stackoverflow.com/questions/33727432/how-to-plot-positions-along-a-chromosome-graphic/57153497#57153497
3.2 Using threshold to fix scale
The default value of 35 for threshold may shrink one of the OTUs of this example more than expected. In this case threshold must be bigger.
# fig.width=7, fig.height=7
bigdfOfChrSize3_100Mb<-bigdfOfChrSize3Mb
bigdfOfChrSize3_100Mb$chrSize<-bigdfOfChrSize3Mb$chrSize*33
bigdfOfMarks3_100Mb<-bigdfOfMarks3Mb
bigdfOfMarks3_100Mb$markPos<-bigdfOfMarks3_100Mb$markPos*33
bigdfOfMarks3_100Mb$markSize<-bigdfOfMarks3_100Mb$markSize*33
par(mar=rep(0,4))
plotIdiograms(dfChrSize = bigdfOfChrSize3_100Mb, # chr. size data.frame
dfMarkPos = bigdfOfMarks3_100Mb, # mark position df
chrWidth=.6, # width of chr.
chrSpacing = .6, # space among chr.
karHeight = 3, # kar. height without interspace
karHeiSpace = 5, # vertical size of karyotype including spacer
amoSepar =2, # separ. among kar.
indexIdTextSize=.6, # font size of chr. name and indices
markLabelSize=.7, # font size of mark legends
distTextChr = .65, # separation among chr. names and indices
fixCenBorder = TRUE # use chrColor as border color of cen. or cen. marks
,legendWidth = 1.5 # legend items width
,xPosRulerTitle = 3.5 # position of Mb (title) in ruler
,rulerPos= 0, # ruler position
ruler.tck=-0.005, # ticks of ruler size and orientation
rulerNumberPos =.7, # position of numbers in ruler
rulerNumberSize=.7, # font size of ruler numbers
rulerInterval = 1.5, # ruler interval for micrometeres
rulerIntervalMb = 50000000, # ruler interval for Mb
ylimBotMod = 0.4, # modify ylim bottom argument
ylimTopMod = 0 # modify ylim top argument
,chromatids=FALSE # do not show chromatids
#### NEW #####
,threshold = 90 # this will allow to not to shrink data greater than 350 Mb
)3.3 Plot data in micrometers and bases
Info in number of bases can be combined in the same plot with info. in micrometers.
Here the new mark style cenStyle is used to add centromeres to “holocen.” (genomes).
To make the rules fit better, having less excess of length over chr., use ceilingFactor.
#fig.width=10, fig.height=10
# modify data in millions to hundreds of millions of Mb
bigdfOfChrSize3_100Mb<-bigdfOfChrSize3Mb[1:8,]
bigdfOfChrSize3_100Mb$chrSize<-bigdfOfChrSize3_100Mb$chrSize*100
bigdfOfMarks3_100Mb<-bigdfOfMarks3Mb
bigdfOfMarks3_100Mb$markPos <-bigdfOfMarks3_100Mb$markPos *100
bigdfOfMarks3_100Mb$markSize<-bigdfOfMarks3_100Mb$markSize*100
# merge data.frames in micrometers and number of bases
mixedThreeSpChrSize <- plyr::rbind.fill(bigdfOfChrSize[1:8,], bigdfOfChrSize3_100Mb)
# sort by OTU name
mixedThreeSpChrSize <- mixedThreeSpChrSize[order(mixedThreeSpChrSize$OTU),]
# add cenStyle marks to simulate centromeres in karyo. in Mb (holocen.)
# compare rulers
bigdfSimCenMarks<- bigdfOfChrSize3_100Mb
bigdfSimCenMarks$markPos<-bigdfSimCenMarks$chrSize/2
bigdfSimCenMarks$markName<-"sim. cen."
bigdfSimCenMarks$chrSize<-NULL
# merge marks in micrometers and bases
mixedThreeSpMarks <- plyr::rbind.fill(bigdfOfMarks , bigdfOfMarks3_100Mb,bigdfSimCenMarks)
# remove cenStyle mark info.
mixedThreeSpMarks<-mixedThreeSpMarks[which(!( mixedThreeSpMarks$OTU %in% "Species 2 genome" &
mixedThreeSpMarks$chrName %in% c(1,4) &
mixedThreeSpMarks$markName %in% "sim. cen.") ),]
# constric. marks
mixedThreeSpMarks[which(mixedThreeSpMarks$OTU %in% "Species 2 genome" &
mixedThreeSpMarks$chrName %in% c(1,4) ),]$markName<-c("cDAPI","cCMA")
# add arrow mark
mixedThreeSpMarks <- dplyr::bind_rows(mixedThreeSpMarks , mixedThreeSpMarks[nrow(mixedThreeSpMarks),] )
mixedThreeSpMarks[nrow(mixedThreeSpMarks),]$markName<-"S58A"
mixedThreeSpMarks[nrow(mixedThreeSpMarks),]$markPos<-.7e+08
mixedThreeSpMarks[nrow(mixedThreeSpMarks),]$markSize<-.7e+08
dfMarkColorAndStyle<-makedfMarkColorMycolors(unique(mixedThreeSpMarks$markName),
c("red","chartreuse3","dodgerblue","darkgoldenrod1","dodgerblue","darkgoldenrod1","black")
)
# d.f. of marks'styles
dfMarkColorAndStyle$style[5:7]<-"cenStyle"
dfMarkColorAndStyle$markColor[7]<-NA
dfMarkColorAndStyle$style[8]<-"upArrow"
dfMarkColorAndStyle
# markName markColor style
# 1 5S red dots
# 2 45S chartreuse3 square
# 3 DAPI dodgerblue square
# 4 CMA darkgoldenrod1 square
# 5 cDAPI dodgerblue cenStyle
# 6 cCMA darkgoldenrod1 cenStyle
# 7 sim. cen. <NA> cenStyle
# 8 S58A red upArrow
par(mar=rep(0,4))
plotIdiograms(dfChrSize = mixedThreeSpChrSize, # chr. size data.frame
dfMarkPos = mixedThreeSpMarks, # mark position df
dfMarkColor = dfMarkColorAndStyle,
chrWidth=.6, # width of chr.
chrSpacing = .6, # space among chr.
karHeight = 3, # kar. height without interspace
karHeiSpace = 5, # vertical size of karyotype including spacer
amoSepar =2, # separ. among kar.
indexIdTextSize=.6, # font size of chr. name and indices
markLabelSize=.7, # font size of mark legends
distTextChr = .65, # separation among chr. names and indices
lwd.mimicCen = 1.5, # constric. line width
legendWidth = 1.5, # legend items width
fixCenBorder = TRUE, # use chrColor as border color of cen. or cen. marks
xPosRulerTitle = 3.7, # position of Mb (title) in ruler
rulerPos= 0, # ruler position
ruler.tck=-0.005, # ticks of ruler size and orientation
rulerNumberPos =.7, # position of numbers in ruler
rulerNumberSize=.7, # font size of ruler numbers
rulerInterval = 1.5, # ruler interval for micrometeres
rulerIntervalMb = 150000000,# ruler interval for Mb
ceilingFactor = 1, # affects rounding for ruler max. value
ylimBotMod = 0.4, # modify ylim bottom argument
ylimTopMod = 0 # modify ylim top argument
,holocenNotAsChromatids = TRUE # do not use chromatids in holocen.
,pattern="^c" # regex pattern to remove from mark names
,remSimiMarkLeg = TRUE # remove pseudoduplicate names arising from pattern removal
)Let’s explore those data.frames
| OTU | chrName | shortArmSize | longArmSize | chrSize | |
|---|---|---|---|---|---|
| 1 | Species 1 | 1 | 1.5 | 2.0 | NA |
| 2 | Species 1 | 2 | 2.0 | 2.5 | NA |
| 3 | Species 1 | 3 | 1.0 | 2.0 | NA |
| 9 | Species 1 genome | 1 | NA | NA | 3.5e+08 |
| 10 | Species 1 genome | 2 | NA | NA | 4.5e+08 |
| 11 | Species 1 genome | 3 | NA | NA | 2.5e+08 |
| OTU | chrName | markName | chrRegion | markDistCen | markSize | markPos | |
|---|---|---|---|---|---|---|---|
| 1 | Species 1 | 1 | 5S | p | 0.5 | 1 | NA |
| 2 | Species 1 | 1 | 45S | q | 0.5 | 1 | NA |
| 3 | Species 1 | 2 | 45S | p | 1.0 | 1 | NA |
| 4 | Species 1 | 3 | DAPI | q | 1.0 | 1 | NA |
| 13 | Species 1 genome | 1 | 5S | NA | NA | 100000000 | 250000000 |
| 14 | Species 1 genome | 1 | 45S | NA | NA | 100000000 | 50000000 |
| 15 | Species 1 genome | 2 | 45S | NA | NA | 100000000 | 350000000 |
| 16 | Species 1 genome | 3 | DAPI | NA | NA | 100000000 | 0 |
| 25 | Species 1 genome | 1 | sim. cen. | NA | NA | NA | 175000000 |
| 26 | Species 1 genome | 2 | sim. cen. | NA | NA | NA | 225000000 |
| 27 | Species 1 genome | 3 | sim. cen. | NA | NA | NA | 125000000 |
3.4 Use cM as units
Info in cM can be combined in the same plot with info. in micrometers.
To make the rules fit better, having less excess of length over chr., use ceilingFactor.
#fig.width=10, fig.height=10
# merge data.frames in micrometers and cM
bigdfOfChrSize3cM<-bigdfOfChrSize3Mb[1:8,]
bigdfOfChrSize3cM$chrSize<-bigdfOfChrSize3cM$chrSize/100000
mixedThreeSpChrSize <- plyr::rbind.fill(bigdfOfChrSize[1:8,], bigdfOfChrSize3cM)
# sort by OTU name
mixedThreeSpChrSize <- mixedThreeSpChrSize[order(mixedThreeSpChrSize$OTU),]
# create data with cM. markSize col. is not necessary because style is cM
bigdfOfMarks3cM<-bigdfOfMarks3Mb
bigdfOfMarks3cM$markPos<-bigdfOfMarks3Mb$markPos/100000
bigdfOfMarks3cM$markSize<-NA
# As we want only the cM idiograms to be plotted as cM (lines), change mark names
bigdfOfMarks3cM$markName<-paste0("cM",bigdfOfMarks3cM$markName)
# d.f of all marks
mixedThreeSpMarks <- plyr::rbind.fill(bigdfOfMarks , bigdfOfMarks3cM)
# create a data.frame with mark characteristics
mixedDfMarkStyle <- makedfMarkColorMycolors(unique(mixedThreeSpMarks$markName),
c("red","chartreuse3","dodgerblue","darkgoldenrod1")
)
# mark names of cM marks with "cM" style (lines): not dots, not squares
mixedDfMarkStyle[which(mixedDfMarkStyle$markName %in%
grep("cM", mixedDfMarkStyle$markName, value=TRUE) ) ,]$style<-"cM"
par(mar=rep(0,4))
plotIdiograms(dfChrSize = mixedThreeSpChrSize, # chr. size data.frame
dfMarkPos = mixedThreeSpMarks, # mark position data.frame
dfMarkColor = mixedDfMarkStyle, # mark style data.frame
chrWidth=.6, # width of chr.
chrSpacing = .7, # space among chr.
specialOTUNames = bigdfOfMarks3cM$OTU, # OTUs in this object will have different ruler units
specialyTitle = "cM", # ruler title for specialOTUNames
specialChrWidth = .2, # modify chr width of OTUs in specialOTUNames
specialChrSpacing = 1.1, # modify chr spacing of OTUs in specialOTUNames
karHeight = 3, # kar. height without interspace
karHeiSpace = 6, # vertical size of karyotype including spacer
amoSepar = 3, # separ. among kar.
chrSize=TRUE, # show chr. size under chr.
indexIdTextSize=.6, # font size of chr. name and indices
distTextChr = .85, # separation among chr. names and indices
protruding = 1, # extension of cM mark type
pattern = "cM", # regex pattern to remove from mark names
markLabelSize=.7 # font size of mark legends
,legendWidth = 2 # legend items width
,fixCenBorder = TRUE # use chrColor as border color of cen. or cen. marks
,lwd.cM = 2 # thickness of cM marks
,holocenNotAsChromatids=TRUE# do not use chromatids in holocen. kar.
,xPosRulerTitle = 3.2 # position of Mb or cM (title) in ruler
,rulerPos= 0, # ruler position
ruler.tck=-0.005, # ticks of ruler size and orientation
rulerNumberPos =.7, # position of numbers in ruler
rulerNumberSize=0.7, # font size of ruler numbers
rulerIntervalcM = 12, # ruler interval for OTU in specialOTUnames and MbThreshold not met
ceilingFactor = 1, # affects max. value in ruler. See also rulerInterval
ylimBotMod = 0.4, # modify ylim bottom argument
ylimTopMod = 0 # modify ylim top argument
)4 GISH
4.1 GISH of monocentric chromosomes
You need the data.frame of chr. sizes, and a d.f. of marks
Chr. sizes:
parentalAndHybChrSize
| OTU | chrName | shortArmSize | longArmSize |
|---|---|---|---|
| Parental 1 | 1 | 3.2 | 4 |
| Parental 1 | 4 | 1.5 | 2 |
| Parental 1 | 5 | 4.8 | 6 |
| Parental 1 | 6 | 6.1 | 7 |
| Parental 2 | 1 | 3.2 | 4 |
| Parental 2 | 2 | 4.5 | 5 |
| Parental 2 | 3 | 2.0 | 3 |
| Allopolyploid | 1 | 3.2 | 4 |
| Allopolyploid | 2 | 4.5 | 5 |
| Allopolyploid | 3 | 2.0 | 3 |
| Allopolyploid | 4 | 1.5 | 2 |
| Allopolyploid | 5 | 4.8 | 6 |
| Allopolyploid | 6 | 6.1 | 7 |
Marks’ positions data
dfAlloParentMarks
| OTU | chrName | markName | chrRegion |
|---|---|---|---|
| Allopolyploid | 1 | Parental 1 | p |
| Allopolyploid | 1 | Parental 2 | q |
| Allopolyploid | 1 | Parental 2 | cen |
| Allopolyploid | 2 | Parental 2 | w |
| Allopolyploid | 3 | Parental 2 | w |
| Allopolyploid | 4 | Parental 1 | w |
| Allopolyploid | 5 | Parental 1 | w |
| Allopolyploid | 6 | Parental 1 | w |
| Parental 1 | 6 | Parental 1 | w |
| Parental 1 | 5 | Parental 1 | w |
| Parental 1 | 1 | Parental 1 | w |
| Parental 1 | 4 | Parental 1 | w |
| Parental 2 | 2 | Parental 2 | w |
| Parental 2 | 1 | Parental 2 | w |
| Parental 2 | 3 | Parental 2 | w |
4.1.1 Plotting
# svg("gish.svg",width=7,height=9 )
#png("parentalAndHybChrSize.png", width=700, height=900)
# REORDER OTUs
parentalAndHybChrSize$OTU<-factor(parentalAndHybChrSize$OTU,levels=c("Parental 1", "Allopolyploid","Parental 2") )
parentalAndHybChrSize<-parentalAndHybChrSize[order(parentalAndHybChrSize$OTU),]
par(mar=rep(0,4) )
plotIdiograms(dfChrSize = parentalAndHybChrSize, # d.f. of chr. sizes
dfMarkPos = dfAlloParentMarks, # d.f. of marks' positions
cenColor = NULL, # no cen. color for GISH
karHeiSpace=5, # karyotype height including spacing
karSepar = FALSE, # equally sized (height) karyotypes
legend="" # no legend
,notes=notesdf2 # data.frame with notes NEW
#,OTUasNote=TRUE # TRY THIS (OTU name to the right)
,notesTextSize = 1.3 # font size of notes
,notesPosX = 1.5 # space from chr. (right) to note
,ruler = FALSE
,moveKarHor = "Allopolyploid"# OTU to move to the right
,mkhValue = 7 # amount to move to right
,anchor = TRUE # show anchor for moveKarHor OTUs
,moveAnchorV = 4 # modify anchor Vertical portion position
,moveAnchorH = -1.5 # modify anchor Horizon. portion position
,ylimBotMod = 1 # ylim bottom argument mod.
,xlimRightMod = 4
); # dev.off()4.2 GISH of holocentric chromosomes
You need the data.frame of chr. sizes, and a d.f. of marks
Chr. sizes:
parentalAndHybHoloChrSize
| OTU | chrName | chrSize |
|---|---|---|
| Parental 1 | 7 | 4 |
| Parental 1 | 4 | 2 |
| Parental 1 | 5 | 6 |
| Parental 1 | 6 | 7 |
| Parental 2 | 1 | 4 |
| Parental 2 | 2 | 5 |
| Parental 2 | 3 | 3 |
| Allopolyploid | 7 | 4 |
| Allopolyploid | 2 | 5 |
| Allopolyploid | 3 | 3 |
| Allopolyploid | 4 | 2 |
| Allopolyploid | 5 | 6 |
| Allopolyploid | 6 | 7 |
Marks’ positions data
dfAlloParentMarksHolo
| OTU | chrName | markName | chrRegion | |
|---|---|---|---|---|
| 1 | Allopolyploid | 7 | Parental 1 | w |
| 4 | Allopolyploid | 2 | Parental 2 | w |
| 5 | Allopolyploid | 3 | Parental 2 | w |
| 6 | Allopolyploid | 4 | Parental 1 | w |
| 7 | Allopolyploid | 5 | Parental 1 | w |
| 8 | Allopolyploid | 6 | Parental 1 | w |
| 9 | Parental 1 | 6 | Parental 1 | w |
| 10 | Parental 1 | 5 | Parental 1 | w |
| 11 | Parental 1 | 7 | Parental 1 | w |
| 12 | Parental 1 | 4 | Parental 1 | w |
| 13 | Parental 2 | 2 | Parental 2 | w |
| 14 | Parental 2 | 1 | Parental 2 | w |
| 15 | Parental 2 | 3 | Parental 2 | w |
Plotting
# svg("gish.svg",width=8,height=7 )
par(mar=c(0,0,0,0))
plotIdiograms(dfChrSize = parentalAndHybHoloChrSize, # d.f. of chr. sizes
dfMarkPos = dfAlloParentMarksHolo, # d.f. of marks' positions
chrColor = "gray", # chr. color
cenColor = NULL, # cen. color when GISH
karHeight = 3, # karyotype height without spacing
karHeiSpace=5, # karyotype height including spacing
distTextChr = 0.8 # separation among chr. and text
,ruler=FALSE # no ruler
,legend="" # no legend
,xlimRightMod = 0 # xlim right arg. modif.
,xModifier=.005 # separ. among chromatids
); # dev.off()4.3 GISH of Citrus as Yasuda et al. (2010)
For more details on the use of Citrus functions go to chapter Citrus
Parental C. schweinfurthii: 14D + 4F (using Guerra nomenclature).
{
#
# c. schweinfurthii chr sizes d.f.
#
cschweinformula<-"14D + 4F"
require(idiogramFISH)
citrusschwein <- citrusSize(D=14,
F=4
,OTU="C. schweinfurthii"
,longArm=1.2)
#
# c. schweinfurthii CMA and GISH marks
#
citrusschweinMarkPosDF <- citrusMarkPos(citrusschwein)
#
# data.frame of genomic marks
#
citrusschweinMarkPosDF2 <- data.frame(chrName=c(paste0("D_",1:7),paste0("F_",1:2)),
chrRegion="w"
,markName="schweingenome"
,OTU=unique(citrusschwein$OTU)
)
#
# merge marks pos.
#
citrusschweinMarkPosDF <- dplyr::bind_rows(citrusschweinMarkPosDF2,citrusschweinMarkPosDF)
#
# Inversion of some chr. (D marks up)
#
csSwap <- swapChrRegionDfSizeAndMarks(citrusschwein,citrusschweinMarkPosDF,c(paste0("D_",1:14) ) )
citrusschwein <- csSwap$dfChrSize
citrusschweinMarkPosDF<- csSwap$dfMarkPos
#
# mark style
#
unique(citrusschweinMarkPosDF$markName)
{
markStyleschweinDF <- makedfMarkColorMycolors(
unique(citrusschweinMarkPosDF$markName), c("chartreuse3","darkgoldenrod1") )
}
#
# d.f. of notes
#
leftNotesschwein <- data.frame(OTU=unique(citrusschwein$OTU), note= paste0("Female gamete: 7D + 2E" ) )
leftNotesschweinUp<- data.frame(OTU=unique(citrusschwein$OTU), note= paste0(unique(citrusschwein$OTU)," (",cschweinformula,")" ) )
notesschwein<- data.frame(OTU=unique(citrusschwein$OTU), note= "Yasuda et al. (2010)" )
}Parental ‘Nanpu’ tangor
{
cnanpuformula<-"1A + 4C + 5D + 8F" # Guerra nom.
#
# 'Nanpu' tangor chr. sizes
#
citrusnanpu <- citrusSize(A=1,C=4,D=5,F=8 #
,OTU="nanpu tangor"
,longArm=1.2)
#
# c. nanpu CMA marks
#
citrusnanpuMarkPosDF <- citrusMarkPos(citrusnanpu)
#
# d.f. of genomic marks
#
citrusnanpuMarkPosDF2 <- data.frame(chrName = c("A","C_1",paste0("D_",1:4), paste0("F_",1:3) ),
chrRegion="w"
,markName="nanpugenome"
,OTU=unique(citrusnanpu$OTU)
)
#
# merge marks pos.
#
citrusnanpuMarkPosDF <- dplyr::bind_rows(citrusnanpuMarkPosDF2,citrusnanpuMarkPosDF)
#
# mark style d.f.
#
unique(citrusnanpuMarkPosDF$markName)
{
markStylenanpuDF <- makedfMarkColorMycolors(
unique(citrusnanpuMarkPosDF$markName), c("chocolate","darkgoldenrod1") )
}
#
# invert some chr.
#
csSwap<-swapChrRegionDfSizeAndMarks(citrusnanpu,citrusnanpuMarkPosDF,c(paste0("D_",1:5) ) )
citrusnanpu <- csSwap$dfChrSize
citrusnanpuMarkPosDF <- csSwap$dfMarkPos
#
# notes data.frames
#
leftNotesnanpu <- data.frame(OTU=unique(citrusnanpu$OTU), note= paste0("Male gamete: 1A + 1C + 4D + 3E" ) )
leftNotesnanpuUp<- data.frame(OTU=unique(citrusnanpu$OTU), note= paste0("'Nanpu' tangor (",cnanpuformula,")" ) )
notesnanpu<- data.frame(OTU=unique(citrusnanpu$OTU), note= "Yasuda et al. (2010)" )
}Merge data.frames from parentals
{
bothParentalsChr <- dplyr::bind_rows(citrusschwein, citrusnanpu)
bothParentalsMarks <- dplyr::bind_rows(citrusschweinMarkPosDF, citrusnanpuMarkPosDF)
bothPmarkStyle <- unique(dplyr::bind_rows(markStyleschweinDF, markStylenanpuDF) )
bothPleftNotesUp <- dplyr::bind_rows(leftNotesschweinUp,leftNotesnanpuUp)
bothPleftNotes <- dplyr::bind_rows(leftNotesschwein,leftNotesnanpu)
}data.frames of the hybrid
{
cschnanpuformula<-"1A + 1C + 11D + 5F"
require(idiogramFISH)
#
# hybrid chr. size
#
citrusschnanpu <- citrusSize(A=1,C=1,D=11,F=5 #
,OTU="schweinfurthii + nanpu"
,longArm=1.2)
#
# hybrid CMA marks
#
citrusschnanpuMarkPosDF <- citrusMarkPos(citrusschnanpu)
#
# invert some chr.
#
csSwap<-swapChrRegionDfSizeAndMarks(citrusschnanpu,citrusschnanpuMarkPosDF,c(paste0("D_",1:11) ) )
citrusschnanpu <- csSwap$dfChrSize
citrusschnanpuMarkPosDF<- csSwap$dfMarkPos
#
# d.f. of gish marks
#
citrusschnanpuMarkPosDF2 <- data.frame(chrName=c(paste0("D_",5:11), paste0("F_",1:2) ),
chrRegion="w"
,markName="schweingenome"
,OTU=unique(citrusschnanpu$OTU)
)
citrusschnanpuMarkPosDF3 <- data.frame(chrName=c("A","C",paste0("D_",1:4), paste0("F_",3:5) ),
chrRegion="w"
,markName="nanpugenome"
,OTU=unique(citrusschnanpu$OTU)
)
#
# merge marks
#
citrusschnanpuMarkPosDF <- dplyr::bind_rows(citrusschnanpuMarkPosDF2,citrusschnanpuMarkPosDF3,citrusschnanpuMarkPosDF)
#
# style of marks d.f.
#
unique(citrusschnanpuMarkPosDF$markName)
{
markStyleschnanpuDF <- makedfMarkColorMycolors(
unique(citrusschnanpuMarkPosDF$markName), c("chartreuse3","chocolate","darkgoldenrod1") )
}
#
# notes for hybrid
#
# italics! # rest: \" to \"
name <- paste0("italic('C. schweinfurthii'), \" × 'Nanpu' tangor (CN3) (", cschnanpuformula,")\"" )
# to parse italics, use parseStr2lang = TRUE
leftNotesschnanpuUp <- data.frame(OTU=unique(citrusschnanpu$OTU), note= name )
notesschnanpu <- data.frame(OTU=unique(citrusschnanpu$OTU), note= "'Yasuda et al. (2010)'" )
}Plot
#
# plot of parentals only
#
{
par(mar=rep(0,4), oma=rep(0,4) )
plotIdiograms(callPlot=T,
dfChrSize= bothParentalsChr, # chr. size data.frame
dfMarkPos= bothParentalsMarks, # mark position data.frame
dfMarkColor=bothPmarkStyle, # mark style d.f.
orderChr = "original" # order of chr. as in d.f.
,chrWidth = .5 # chr. width
,chrSpacing=.5 # separ. among chr.
,karHeight=4 # kar. height
,karHeiSpace=5 # anchor height
,chromatids = FALSE # don't use chromatids
,chrColor= "white" # chr. color
,ruler=FALSE # don't use ruler
,chrId="" # don't use chr. name
,chrIndex = "" # don't use chr. indices
,morpho="" # don't use morphology
,karIndex = FALSE # don't use kar. indices
,colorBorderMark="black"# color of border of marks
,addOTUName = F # do not add OTU names
,lwd.chr = 1.6 # border width
,lwd.marks=1 # border width marks
,gishCenBorder=T # cen. border of gish as mark color
,hideCenLines=1.75 # hide cen. border
,legend="" # no legend for marks
,leftNotes = bothPleftNotes # data.frame with left notes
,leftNotesUp= bothPleftNotesUp # data.frame with Up left notes
,leftNoteFontUp =3 # italics
,notesTextSize = 1.3 # font size of notes
,leftNotesPosX = 0 # horizontal pos. of notes
,leftNotesPosY = -2 # vertical pos. of notes
,verticalPlot=FALSE # horizontal plot
,karSpaceHor=3 # horizontal spacing among kar.
,karAnchorLeft = "C. schweinfurthii" # anchor to the left of
,anchor=TRUE # add anchor
,ylimBotMod = 1 # modify ylim bottom argument
,ylimTopMod = 0 # modify ylim top argument
,xlimLeftMod =0 # modify left xlim
,xlimRightMod = 2 # modify right xlim
)
}
# add plot of hybrid over parents plot
{
plotIdiograms(callPlot=FALSE, # plot over previous plot
dfChrSize= citrusschnanpu, # chr. size data.frame
dfMarkPos= citrusschnanpuMarkPosDF, # mark position data.frame
dfMarkColor=markStyleschnanpuDF, # mark style d.f.
orderChr = "original", # order of chr. as in d.f.
chrWidth = .5, # chr. width
chrSpacing=.5, # separ. among chr.
karHeight=4 # kar. height
,chromatids = FALSE # don't use chromatids
,chrColor= "white" # chr. color
,ruler=FALSE # don't use ruler
,chrId="" # don't use chr. name
,chrIndex = "" # don't use chr. indices
,morpho="" # don't use morphology
,karIndex = FALSE # don't use kar. indices
,colorBorderMark="black"# color of border of marks
,addOTUName=F # don't add OTU name
,lwd.chr = 1.6 # border width
,lwd.marks=1 # border width marks
,leftNotesUp = leftNotesschnanpuUp # up notes: name of hybrid
,parseStr2lang = TRUE # for italics, see notes data.frame
,notesTextSize = 1.3 # font size of notes
,leftNotesPosX = 0 # horizontal pos. of notes
,leftNotesPosY = -2 # vertical pos. notes
,notes = notesschnanpu # right notes - authors
,notesPosX=3 # notes hor. pos
,ylimBotMod = 1 # modify ylim bottom argument
,ylimTopMod = -5 # modify ylim top argument
,xlimLeftMod = 0 # modify left xlim
,xlimRightMod = 2 # modify right xlim
,gishCenBorder=T # cen. border as mark color
,legend="" # no legend for marks
,hideCenLines=1.75 # hide cen. lines
,moveAllKarValueHor=9.5 # move kar. to right
,moveAllKarValueY =-10 # move kar. down
)
} # hybrid5 Groups
5.1 monocentrics
Adding the column group
Open your chromosome data - Chr. size - as data.frame and add column
| chrName | shortArmSize | longArmSize | group |
|---|---|---|---|
| 1 | 3.0 | 5.0 | 1 |
| 1 | 3.2 | 5.5 | 1 |
| 1 | 3.5 | 4.8 | 1 |
| 4 | 1.0 | 3.0 | NA |
| 5 | 3.0 | 5.0 | NA |
| X | 4.0 | 6.0 | NA |
Heteromorphic pairs
It can be used to plot heteromorphic pairs, see pair 1| chrName | shortArmSize | longArmSize | group | |
|---|---|---|---|---|
| 1 | 1A | 3 | 5 | 1 |
| 2 | 1B | 3 | 5 | 1 |
| 4 | 2 | 1 | 3 | NA |
| 5 | 3 | 3 | 5 | NA |
| 6 | 4 | 4 | 6 | NA |
| chrName | markName | chrRegion | markSize | markDistCen |
|---|---|---|---|---|
| 1A | 5S | p | 1 | 0.9 |
| 1B | 45S | p | 1 | 0.9 |
| 2 | CMA | q | 1 | 1.0 |
| 3 | DAPI | q | 1 | 1.0 |
Plot
require(idiogramFISH)
# svg("dfwithHetero.svg",width=13.5,height=8 )
par(mar=rep(0,4))
dfwithHetero$OTU<-"hetero"
dfwithgroups$OTU<-"first"
both<-plyr::rbind.fill(dfwithHetero,dfwithgroups)
dfOfMarksHetero$OTU<-"hetero"
plotIdiograms(dfChrSize=both, # chr. sizes
dfMarkPos=dfOfMarksHetero, # position of marks
karHeiSpace = 4,
chrId="original", # chr. name in df.
chrIndex = "", # do not add chr. indices
morpho="", # do not add chr. morphologies
karIndex = FALSE, # do not add karyotype indices
distTextChr = .8, # distance from text to chr.
markDistType="cen", # mark position measured to center of mark
orderChr = "name", # order chr. by name
ruler=FALSE # do not plot ruler
,ylimBotMod = 1 # modify ylim bottom argument
,legendWidth = 1 # width of legend
); # dev.off()5.2 Holocentrics
Let’s modify some data.frames to add a group
data("dfChrSizeHolo")
data("dfMarkPosHolo")
dfMarkPosHoloHetero<-dfMarkPosHolo
dfMarkPosHoloHetero$chrName<-c(3,3,"1A",2,"1B","1B")
dfMarkPosHoloHetero$OTU<-"heteromorphic"
dfChrSizeHoloHetero<-dfChrSizeHolo
dfChrSizeHoloHetero$chrName<-c("1A","1B",2,3)
dfChrSizeHoloHetero$OTU<-"heteromorphic"
# Adding the group column
dfChrSizeHoloHetero$group<-c(1,1,NA,NA)Creating a new data.frame for holocentrics
| OTU | chrName | chrSize | group |
|---|---|---|---|
| Species name | 1 | 3.1 | 1 |
| Species name | 1 | 3.2 | 1 |
| Species name | 1 | 3.3 | 1 |
| Species name | 1 | 3.4 | 1 |
| Species name | 2 | 4.0 | NA |
| Species name | 3 | 5.0 | NA |
| Species name | 4 | 6.0 | NA |
par(mar=rep(0,4))
mergedChrSize<-plyr::rbind.fill(dfChrSizeHoloGroup,dfChrSizeHoloHetero)
plotIdiograms(dfChrSize=mergedChrSize, # data.frame of chr. sizes
dfMarkPos=dfMarkPosHoloHetero,# d.f. of marks
orderChr = "name", # order chr. by name
karIndex = FALSE, # do not add karyotype indices
addOTUName = TRUE, # add OTU name
karHeiSpace = 4, # height of kar. with spacing
ruler=FALSE, # no ruler
xlimLeftMod=-1, # modify left argument of xlim
xlimRightMod=0, # modify right argument of xlim
ylimBotMod=1.3 # modify bottom argument of ylim
,xModifier=0.005 # separ. among chromatids
)6 Circular Plots
visit gitlab for installation instructions https://gitlab.com/ferroao/idiogramFISH
6.1 Example with monocen. and holocen.
{
require(idiogramFISH)
require(plyr)
dfOfChrSize$OTU <- "Species mono"
dfChrSizeHolo$OTU <- "Species holo"
monoholoCS <- plyr::rbind.fill(dfOfChrSize,dfChrSizeHolo)
dfOfMarks2$OTU <-"Species mono"
dfMarkPosHolo$OTU <-"Species holo"
monoholoMarks <- plyr::rbind.fill(dfOfMarks2,dfMarkPosHolo)
monoholoMarks[which(monoholoMarks$markName=="5S"),]$markSize<-.5
}
plotIdiograms(dfChrSize = monoholoCS, # data.frame of chr. size
dfMarkColor= dfMarkColor, # df of mark style
dfMarkPos = monoholoMarks,# df of mark positions, includes cen. marks
squareness =5, # vertices squareness
addOTUName = TRUE, # add OTU names
distTextChr = .5, # separ. among chr. and text and among chr. name and indices
chrId="original", # use original name of chr.
OTUTextSize = .7, # size of OTU name
legendHeight= 1, # height of legend labels
legendWidth = 1, # width of legend labels
# ,legend="inline"
fixCenBorder = TRUE, # use chrColor as border color of cen. or cen. marks
xlimLeftMod=1, # modify xlim left argument of plot
xlimRightMod=2, # modify xlim right argument of plot
ylimBotMod= .2 # modify ylim bottom argument of plot
# GRAPHICAL PARAMETERS FOR CIRCULAR PLOT
,circularPlot = TRUE # circularPlot
,shrinkFactor = .9 # percentage 1 = 100% of circle with chr.
,circleCenter = 3 # X coordinate of circleCenter (affects legend pos.)
,chrLabelSpacing = .9 # chr. names spacing
,OTUsrt = 0 # angle for OTU name (or number)
,OTUplacing = "number" # Use number and legend instead of name. See OTUcentered
,OTUjustif = 0 # OTU names justif. left.
,OTULabelSpacerx = -1.5 # modify position of OTU label, when OTUplacing="number" or "simple"
,OTUlegendHeight = 1.5 # space among OTU names when in legend - OTUplacing
)6.2 Recreating circular karyotype of (Golczyk et al., 2005)
# First swap short and long arms to show the same rotation of the article
listradfs<-swapChrRegionDfSizeAndMarks(traspadf,traspaMarks,c("3","6","7","9","12") )
# Create marks' characteristics
dfMarkColor5S25S<-read.table(text=" markName markColor style
5S black dots
25S white dots" , header=TRUE, stringsAsFactors=FALSE,fill=TRUE)
plotIdiograms(dfChrSize = listradfs$dfChrSize, # d.f. of chr. sizes
dfMarkPos = listradfs$dfMarkPos, # d.f. of marks' positions
dfMarkColor = dfMarkColor5S25S, # d.f. of mark characteristics
cenColor = "black", # cen. color
squareness = 5, # corner squareness
chrWidth = 1, # chr. width
orderChr = "name" # order chr. by name
,addOTUName = FALSE # do not add OTU name
,legendHeight = 2.5 # labels separ. y axis
# circular plot parameters
,circularPlot=TRUE
,radius=5 # basic radius
,useOneDot=FALSE # use two dots in dot marks
,chrLabelSpacing = 1 # chr. name spacing
,rotation = 0.1 # anti-clockwise start site in x*pi radians, from top (0)
,shrinkFactor = .95 # % of circle use
)6.3 Plasmid data from genBank
Using upArrow and downArrow styles, clockwise and anti-clockwise, respectively.
# data from: https://www.ncbi.nlm.nih.gov/nuccore/NZ_CP009939.1
#install.packages("rentrez")
library(rentrez)
# search string
bcereus <- "Bacillus cereus strain 03BB87 plasmid pBCN, complete sequence"
bcereus_search <- rentrez::entrez_search(db="nuccore", term = bcereus)
# get summaries
esummaries<-rentrez::entrez_summary(db = "nuccore", id = bcereus_search$ids)
# download plasmid data
# From the entrez formats:
# https://www.ncbi.nlm.nih.gov/books/NBK25499/table/chapter4.T._valid_values_of__retmode_and/
# idiogramFISH can read only:
rentrezDownloadPlas <- rentrez::entrez_fetch(db="nuccore",
id = bcereus_search$ids[1],
rettype="gbwithparts",
retmode = "text")
mylist<-genBankReadIF(rentrezDownloadPlas)
# data.frames in mylist
names(mylist)
# [1] "gbdfMain" "gbdfAssemblyMeta" "gbdfAnnoMeta" "source"
# [5] "gene" "CDS"
# mylist$source
# View(mylist$gbdfMain)
# View(mylist$gbdfAssemblyMeta)
# mylist$gbdfAnnoMeta
# View(mylist$CDS)
# View(mylist$gene)
# Authors of plasmid sequence
paste(mylist$gbdfMain[which(mylist$gbdfMain$field=="AUTHORS"),][1,2] )
# [1] "Johnson,S.L., Minogue,T.D., Teshima,H., Davenport,K.W., Shea,A.A.,; Miner,H.L., Wolcott,M.J. and Chain,P.S."
# create plasmid size data data.frame
{
myPlasmiddf <- data.frame(chrName=1, chrSize=mylist$source$end)
myPlasmiddf$OTU<-mylist$gbdfMain[which(mylist$gbdfMain$field=="DEFINITION"),]$value
myPlasmiddf$OTU<-gsub(", complete sequence.","",myPlasmiddf$OTU)
# Creating mark info data.frame
mylistSel<- mylist[which(names(mylist) %in% "gene")]
mylistSelDF <- dplyr::bind_rows(mylistSel, .id="feature")
mylistSelDF$markPos <-pmin(as.numeric(mylistSelDF$begin),as.numeric(mylistSelDF$end) )
mylistSelDF$markSize<-abs(as.numeric(mylistSelDF$end)-as.numeric(mylistSelDF$begin) )
mylistSelDF$markName<-mylistSelDF$locus_tag
# orientation of arrows
mylistSelDF$style<-ifelse(mylistSelDF$isComplement,"downArrow","upArrow")
# Replace codes with names
mylistSelDF[which(!is.na(mylistSelDF$gene) ),]$markName<-
mylistSelDF[which(!is.na(mylistSelDF$gene) ),]$gene
# subset columns
marksDfPlas<-mylistSelDF[,c("markName","markPos","markSize","style"),]
# add OTU name
marksDfPlas$OTU<-myPlasmiddf$OTU
# add mandatory column
marksDfPlas$chrName<-myPlasmiddf$chrName
# organize inner arrows (downArrow) in two columns avoiding overlap
protVal <- .5 # this values (and others) must be the same
circVal <- TRUE # in plotIdiograms function
rotaVal <- 0
marksDfPlasCols<-namesToColumns(marksDfPlas, myPlasmiddf,
markType=c("downArrow"),
amountofSpaces=10,colNumber=2,
protrudingInt=1.3, protruding = protVal,
circularPlot = circVal,
rotation=rotaVal
)
# add marker for start pos.
colnames(marksDfPlasCols)
marksDfPlasCols<-rbind(marksDfPlasCols,c(paste0("START",paste0(rep(" ",0), collapse="")),1,NA,"square",myPlasmiddf$OTU,1,NA) )
# create mark general data data.frame
markStyle <- makedfMarkColorMycolors(
unique(marksDfPlasCols$markName), c("black","forestgreen","cornflowerblue") )
# arrows
markStyle$style <- marksDfPlasCols$style[match(markStyle$markName, marksDfPlasCols$markName)]
markStyle$protruding <- marksDfPlasCols$protruding[match(markStyle$markName, marksDfPlasCols$markName)]
# prefix to remove from marks
mypattern<-sub("([[:alnum:]]+_).*","\\1",trimws(marksDfPlas$markName[1]) )
}
library(idiogramFISH)
par(mar=rep(0,4), oma = rep(0,4) )
plotIdiograms(dfChrSize = myPlasmiddf, # plasmid size d.f.
dfMarkPos = marksDfPlasCols, # mark pos d.f.
dfMarkColor = markStyle, # mark style d.f.
squareness = 21, # corners not rounded
chrWidth = .1, # chr. width
chrId="", # no chr. name
markLabelSize=.7, # font size of labels
pattern=mypattern, # remove pattern from mark names
cMBeginCenter = TRUE,
legend ="inline",
protruding= protVal,
ylimBotMod = 0, # modify plot size
ylimTopMod = 0,
xlimLeftMod = 2,
# circular params.
circularPlot = circVal, # circular
rotation=rotaVal, # begin plasmid in top
radius=2.5,
shrinkFactor = 1, # use 100% of circle
labelSpacing = 1.7, # label spacing from chr.
labelOutwards = TRUE, # label projected based on mark angle
OTUjustif = 0.5, # OTU name justif. centered.
OTUplacing = "simple" # plasmid name place. See OTUcentered
,OTUTextSize = .8 # font size of OTU name
)6.4 Prokaryote chromosome from genBank
library(idiogramFISH)
# Option 1: Download prokaryote genome data from:
# https://www.ncbi.nlm.nih.gov/nuccore/NC_014248.1
# Choose Customize View -> Basic Features -> genes, CDS
# Send To -> File -> Create File
# Use your file name:
data.gb <- "nostoc.gb" # 5 Mbytes
# Option 2: Download with rentrez package
library(rentrez)
# search string
nostoc <- "'Nostoc azollae' 0708, complete genome"
nostoc_search <- rentrez::entrez_search(db="nuccore", term=nostoc)
# get summaries
esummaries<-rentrez::entrez_summary(db="nuccore", id=nostoc_search$ids)
# select only perfect matches
select<-numeric()
for (i in 1:length(esummaries)){
if(esummaries[[i]]$title ==nostoc){ select<-c(select,i) }
}
select
# 3 8
# download chr. data
dataChr.gb <- rentrez::entrez_fetch(db="nuccore",
id=nostoc_search$ids[select][1],
rettype="gbwithparts",
retmode = "text")
# START:
library(idiogramFISH)
mylistChr<-genBankReadIF(dataChr.gb) # 9 seconds
names(mylistChr)
# "gbdfMain" "gbdfAnnoMeta" "source" "gene" "CDS" "tRNA"
# "regulatory" "ncRNA" "rRNA" "misc_feature" "tmRNA"
# Authors of sequence
paste(mylistChr$gbdfMain[which(mylistChr$gbdfMain$field=="AUTHORS"),][1,2] )
# [1] "Ran,L., Larsson,J., Vigil-Stenman,T., Nylander,J.A., Ininbergs,K.,;
# Zheng,W.W., Lapidus,A., Lowry,S., Haselkorn,R. and Bergman,B."
# create chr. size data data.frame
# columns chrName and chrSize
myProkaryotedf <- data.frame(chrName=1, chrSize=mylistChr$source$end)
# column with OTU name
myProkaryotedf$OTU<-mylistChr$gbdfMain[which(mylistChr$gbdfMain$field=="DEFINITION"),]$value
myProkaryotedf$OTU<-gsub(", complete genome.","",myProkaryotedf$OTU)
# Creating mark info data.frame excluding some features
mylistChrSel <- mylistChr[which(names(mylistChr) %in%
setdiff( names(mylistChr) , c("gbdfMain","gbdfAnnoMeta","source","CDS") ) )]
# or:
# mylistSel<- mylistChr[which(names(mylistChr) %in% "CDS")]
# transform list into data.frame
mylistChrDF<-dplyr::bind_rows(mylistChrSel, .id="feature")
# add necessary columns
mylistChrDF$markPos <-pmin(as.numeric(mylistChrDF$begin),as.numeric(mylistChrDF$end) )
mylistChrDF$markSize<-abs(as.numeric(mylistChrDF$end)-as.numeric(mylistChrDF$begin) )
mylistChrDF$markName<-mylistChrDF$locus_tag
# Replace codes with genes, and replace NAs in markNames (locus_tag)
mylistChrDF[which(!is.na(mylistChrDF$gene) ),]$markName<-
mylistChrDF[which(!is.na(mylistChrDF$gene) ),]$gene
mylistChrDF[which(!is.na(mylistChrDF$regulatory_class) ),]$markName<-
mylistChrDF[which(!is.na(mylistChrDF$regulatory_class) ),]$regulatory_class
# careful
mylistChrDF[which(is.na(mylistChrDF$markName) ),]$markName<-
sub("([[:alpha:] ]+);.*","\\1", mylistChrDF[which(is.na(mylistChrDF$markName) ),]$note )
# orientation of arrows
mylistChrDF$style<-ifelse(mylistChrDF$isComplement,"downArrow","upArrow")
# select main columns for data.frame of marks' positions
marksDfChr<-mylistChrDF[,c("markName","markPos","markSize","feature","isJoin","style"),]
marksDfChr$OTU<-myProkaryotedf$OTU
# add mandatory column
marksDfChr$chrName<-myProkaryotedf$chrName
# Organize mark names in columns to avoid overlap
rotaVal<-0
marksDfChrCols<-namesToColumns(marksDfChr, myProkaryotedf,
markType=c("downArrow","upArrow"),
amountofSpaces=13,colNumber=4,
protrudingInt=0.5,
rotation = rotaVal)
{
# add marker for start pos.
colnames(marksDfChrCols)
marksDfChrCols<-rbind(marksDfChrCols,c(" START",1,NA,"start",FALSE,"square",myProkaryotedf$OTU,1,NA) )
# create mark general data data.frame
markStyle <- makedfMarkColorMycolors(
unique(marksDfChrCols$markName), c("black","forestgreen","cornflowerblue") )
unique(marksDfChrCols$feature)
# [1] "gene" "tRNA" "regulatory" "ncRNA" "rRNA" "misc_feature" "tmRNA" "start"
unique(marksDfChrCols$isJoin)
# [1] "FALSE"
# change some colors depending on feature
markStyle[which(markStyle$markName %in%
marksDfChrCols[which(marksDfChrCols$feature %in% c("tRNA","tmRNA") ),]$markName
),]$markColor<-"magenta"
markStyle[which(markStyle$markName %in%
marksDfChrCols[which(marksDfChrCols$feature %in% c("regulatory","ncRNA") ),]$markName
),]$markColor<-"tomato3"
markStyle[which(markStyle$markName %in%
marksDfChrCols[which(marksDfChrCols$feature %in% "rRNA" ),]$markName
),]$markColor<-"red2"
markStyle[which(markStyle$markName %in%
marksDfChrCols[which(marksDfChrCols$feature %in% "misc_feature" ),]$markName
),]$markColor<-"lightsalmon"
# or:
# When isJoin is TRUE (CDS feature included)
# markStyle[which(markStyle$markName %in%
# marksDfChrCols[which(marksDfChrCols$isJoin==TRUE),]$markName
# ),]$markColor<-"red"
# arrows info. to d.f. of charac.
markStyle$style <- marksDfChrCols$style[match(markStyle$markName, marksDfChrCols$markName)]
markStyle$protruding <- marksDfChrCols$protruding[match(markStyle$markName, marksDfChrCols$markName)]
mypattern<-sub("([[:alnum:]]+_).*","\\1",trimws(marksDfChrCols$markName[1]) )
}
# png("NOSTOC.png", width=9500, height=9500) # 14 Mbytes
pdf("NOSTOC.pdf", width=130, height=130) # 20 Mb with arrows
# svg("NOSTOC.svg", width=130, height=130) # 140 Mb with arrows
par(mar=rep(0,4))
plotIdiograms(dfChrSize = myProkaryotedf, # chr. data d.f.
dfMarkPos = marksDfChrCols, # mark pos d.f.
dfMarkColor = markStyle, # mark style d.f. style cM
squareness = 21, # corners not rounded
n=100, # number of vertices in rounded items.
chrWidth = .02, # chr. width
chrId="", # no chr. name
legend="inline", # for arrows, this mimics cM and cMLeft marks
markLabelSize=1, # font size of labels
pattern= mypattern, # remove pattern from mark names
ylimBotMod = -.5, # modify plot size
ylimTopMod = -.5,
xlimLeftMod = .3,
xlimRightMod = .3,
# circular plot params.
circularPlot = TRUE, # circular
shrinkFactor = 1, # use 100% of circle
labelSpacing = 1, # label spacing from chr.
rotation=rotaVal, # begin chr. in top
labelOutwards = TRUE # label projected based on mark angle
,OTUjustif = 0.5 # OTU name centered
,OTUplacing = "simple" # location of OTU name, see OTUcentered
,radius = .1 # radius of circle
,OTUTextSize = 10 # font size of OTU name
,cMBeginCenter = TRUE # label of arrows (inline) start in the middle
)
dev.off() 7 Plotting alongside phylogeny
This guide shows the files to plot idiograms alongside a phylogeny
7.1 Load package
visit gitlab for installation instructions https://gitlab.com/ferroao/idiogramFISH
7.2 ggtree of iqtree and monocentrics
idiogramFISH comes with two trees and data.frames with chr. and marks’ data for the correspondent OTUs, first we will plot a tree produced with iqtree (Nguyen et al., 2015)
Load the iqtree:
We will use phytools for that (Revell, 2012)
require(ggplot2)
require(phytools)
require(ggpubr)
require(grid) #pushViewport
require(ggtree)
# list.files(system.file('extdata', package = 'my_package') )
# find path of iqtree file
iqtreeFile <- system.file("extdata", "eightSpIqtree.treefile", package = "idiogramFISH")
# load file as phylo object
iqtreephylo <- read.newick(iqtreeFile) # phytools
# transform tree
iqtreephyloUM <- force.ultrametric(iqtreephylo, method= "extend") # phytoolsMake a ggtree (Yu et al., 2018)
Modify optionally graphical parameters with ggplot and ggpubr: (Wickham, 2016; Kassambara, 2019)
gbuil2 <- ggplot_build(ggtreeOf8) # get ggplot_built
gtgbuild <- ggplot_gtable(gbuil2) # get gtable from ggplot_built
gtgbuild$layout$clip[gtgbuild$layout$name == "panel"] <- "off" # modify gtable
ggtreeOf8b <- as_ggplot(gtgbuild) # back to ggplot
gtgbuildgg2 <- ggtreeOf8b + theme(plot.margin = unit(c(1,9.5,3,1.5), "cm") ) # top right bottom left - modify marginsOrder OTUs in data.frame of chr. data
Apply order of phylogeny to the data.frame
# Let's get the order of species in tree
ggtreeOf8TIPS <- ggtreeOf8$data[which(ggtreeOf8$data$isTip),]
desiredOrder <- rev(ggtreeOf8TIPS[order(ggtreeOf8TIPS$y),]$label)
# make a vector without missing OTUs
desiredFiltered <- intersect(desiredOrder,allChrSizeSample$OTU)
# establish desired order
allChrSizeSample$OTU <- factor(allChrSizeSample$OTU, levels = desiredFiltered)
# order
allChrSizeSample <- allChrSizeSample[order(allChrSizeSample$OTU),]Now we have to establish where are the OTUs in the tree, that don’t have chr. data
# Establish position of OTUs before missing data OTUs
matchres <- match(desiredOrder,desiredFiltered)
matchres[is.na(matchres)] <- "R"
reps <- rle(matchres)
posOTUsBeforeMissing <- as.numeric(matchres[which(matchres=="R")-1][which(matchres[which(matchres=="R")-1]!="R")] )
# This are the OTUs that come before missing chr. data OTUs
BeforeMissing <- desiredFiltered[posOTUsBeforeMissing]
# This is the amount of missing OTUs, spaces to add (ghost karyotypes)
valuesOfMissRepsBefore <- reps$lengths[which(reps$values=="R")]Plotting
Now we are ready to plot adding those arguments for addMissingOTUAfter and missOTUspacings
# plot to png file
png(file="firstplot.png" ,width=962,height=962 )
par(omi=rep(0,4),
mar=c(0,1,2,1),
mfrow=c(1,2) ) # one row two columns
par(fig=c(0,.3,0,1)) # location of left ghost plot
plot.new() # ghost plot to the left
par(fig=c(.3,1,0,1)) # location of right plot
plotIdiograms(dfChrSize = allChrSizeSample, # data.frame of Chr. Sizes
dfMarkPos = allMarksSample, # d.f. of Marks (inc. cen. marks)
dfMarkColor = mydfMaColor, # d.f. of mark characteristics
squareness = 4, # squareness of vertices
lwd.chr=.5, # width of lines
orderChr = "name", # order chr. by name
centromereSize = 1.3, # apparent cen. size
chrWidth =.75, # width of chr.
chrSpacing = .25, # horizontal spacing of chr.
indexIdTextSize=.4, # font size of indices and chr. names
karHeight = 4.8, # karyotype vertical relative size without spacing
karHeiSpace = 6.5, # karyotype vertical relative size with spacing
nameChrIndexPos=4, # move the name of chr. indexes to left
morpho="both", # add chr. morphology
chrIndex = "both", # add chr. indices
karIndex = TRUE, # add karyotype indices
yTitle= "", # remove units title of ruler
markLabelSpacer = 0 # spaces from rightmost chr. to legend
,ylimTopMod = -.1 # modify ylim top margin
,ylimBotMod=1.6 # modify ylim bottom margin
,rulerPos = -0.5 # position of rulers
,rulerNumberSize = .35 # font size of ruler number
,rulerNumberPos = .4 # position of ruler numbers
,ruler.tck = -.004 # tick size and orient.
,addMissingOTUAfter = BeforeMissing # OTUs after which there are ghost karyotypes - empty spaces
,missOTUspacings = valuesOfMissRepsBefore # number of ghost karyotypes
)
# plot to the left the ggtree
pushViewport(viewport(layout = grid.layout(1, 2)))
pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 1))
print(gtgbuildgg2,newpage=F)
# close png
dev.off()7.3 plot of revBayes tree and holocentrics
Now we are going to plot a tree from revBayes (Höhna et al., 2017)
First, load the revBayes tree:
require(ggplot2)
require(phytools)
require(ggpubr)
require(grid) #pushViewport
require(ggtree)
require(treeio)
# find path of iqtree file
revBayesFile <- system.file("extdata", "revBayesTutorial.tree", package = "idiogramFISH")
# load file as phylo object
revBayesPhylo <- read.beast(revBayesFile) # ggtree or treeio
# transform tree
revBayesPhyloUM <- force.ultrametric(revBayesPhylo@phylo, method= "extend") # phytoolsOrder OTUs in data.frame of chr. data
# Get order of OTUs in tree
is_tip <- revBayesPhyloUM$edge[,2] <= length(revBayesPhyloUM$tip.label)
ordered_tips <- revBayesPhyloUM$edge[is_tip, 2]
desiredorderRevB <- rev(revBayesPhyloUM$tip.label[ordered_tips])
# Ceate some holocentrics' data
allChrSizeSampleHolo <- allChrSizeSample
allChrSizeSampleHolo <- allChrSizeSampleHolo[,c("OTU","chrName","longArmSize")]
colnames(allChrSizeSampleHolo)[which(names(allChrSizeSampleHolo)=="longArmSize")]<-"chrSize"
allMarksSampleHolo <- allMarksSample
allMarksSampleHolo <- allMarksSampleHolo[which(allMarksSampleHolo$chrRegion!="cen"),]
allMarksSampleHolo <- allMarksSampleHolo[c("OTU","chrName","markName","markDistCen","markSize")]
colnames(allMarksSampleHolo)[which(names(allMarksSampleHolo)=="markDistCen")] <- "markPos"
allMarksSampleHolo[which(allMarksSampleHolo$markName=="5S"),]$markSize <- .5
# Apply order of phylogeny to data.frame
# make a vector without missing OTUs
desiredFiltered <- intersect(desiredorderRevB,allChrSizeSampleHolo$OTU)
# establish desired order
allChrSizeSampleHolo$OTU <- factor(allChrSizeSampleHolo$OTU, levels = desiredFiltered)
# order
allChrSizeSampleHolo <- allChrSizeSampleHolo[order(allChrSizeSampleHolo$OTU),]Now we have to establish where are the OTUs in the tree, that don’t have chr. data
# Establish position of OTUs before missing data OTUs
matchres <- match(desiredorderRevB,desiredFiltered)
matchres[is.na(matchres)] <- "R"
reps <- rle(matchres)
posOTUsBeforeMissing <- as.numeric(matchres[which(matchres=="R")-1][which(matchres[which(matchres=="R")-1]!="R")] )
# This are the OTUs that come before missing chr. data OTUs
BeforeMissingPlot2 <- desiredFiltered[posOTUsBeforeMissing]
# This is the amount of missing OTUs, spaces to add (ghost karyotypes)
valuesOfMissRepsBeforePlot2 <- reps$lengths[which(reps$values=="R")]Plotting
Now we are ready to plot adding those arguments for addMissingOTUAfter and missOTUspacings
# plot to png file
png(file=paste0("secondplot.png" ),width=962,height=700)
{
par(omi=rep(0,4) , mar=c(0,0,0,0), mfrow=c(1,2))
par(fig=c(0,.27,0,1))
par(mar=c(2,0,2,0)) # b l t r
plot(revBayesPhyloUM)
par(fig=c(0.27,1,0,1), new=TRUE)
par(mar=c(0,0,0,0)) # b l t r
plotIdiograms(allChrSizeSampleHolo, # chr. size data.frame
dfMarkPos = allMarksSampleHolo, # data.frame of marks' positions
dfMarkColor = mydfMaColor, # d.f. of mark characteristics
squareness = 4, # vertices squareness
karHeight = 2.8, # karyotype height
karHeiSpace = 4.5, # vertical size of kar. including spacing
yTitle="",
karIndex = TRUE, # add karyotype index
indexIdTextSize=.4 # font size of indices and chr. names
,addMissingOTUAfter = BeforeMissingPlot2 # add ghost OTUs after these names
,missOTUspacings = valuesOfMissRepsBeforePlot2 # how many ghosts, respectively
,lwd.chr=.5 # line width
,markLabelSpacer = 0 # dist. of legend to rightmost chr.
,legendWidth = 2.3 # width of square or dots of legend
,rulerPos = -0.5 # position of ruler
,rulerNumberSize = .35 # font size of number of ruler
,rulerNumberPos = .4 # position of ruler number
,ruler.tck=-.004 # tick of ruler size and orient.
,ylimTopMod = -4 # modify ylim of top
,ylimBotMod = -4 # modify ylim of bottom
,xlimRightMod = 3 # modify xlim right argument
,xModifier=0.005 # separ. among chromatids
)
}
# close png
dev.off()7.4 plot of revBayes tree and holocentrics and monocentrics
Create data.frames with both types of karyotypes (Wickham, 2011)
require(plyr)
# Select this OTU from the monocen.
monosel<-c("Species_F","Species_C","Species_A")
# chr.
allChrSizeSampleSel <- allChrSizeSample [which(allChrSizeSample$OTU %in% monosel ),]
# marks
allMarksSampleSel <- allMarksSample [which(allMarksSample$OTU %in% monosel ),]
# Select the others from the holocen.
holosel <- setdiff(unique(allChrSizeSampleHolo$OTU),monosel)
# chr.
allChrSizeSampleHoloSel <- allChrSizeSampleHolo[which(allChrSizeSampleHolo$OTU %in% holosel ),]
# marks
allMarksSampleHoloSel <- allMarksSampleHolo [which(allMarksSampleHolo$OTU %in% holosel ),]
# merge chr d.fs
mixChrSize <- plyr::rbind.fill(allChrSizeSampleSel,allChrSizeSampleHoloSel)
# merge marks' d.fs
mixMarks <- plyr::rbind.fill(allMarksSampleSel,allMarksSampleHoloSel)Order data.frame and determine missing karyotypes
# make a vector without missing OTUs
desiredFiltered <- intersect(desiredorderRevB, mixChrSize$OTU)
# establish desired order
mixChrSize$OTU <- factor(mixChrSize$OTU, levels = desiredFiltered)
# order data.frame
mixChrSize <- mixChrSize[order(mixChrSize$OTU),]
# Establish position of OTUs before missing data OTUs
matchres <- match(desiredorderRevB,desiredFiltered)
matchres[is.na(matchres)] <- "R"
reps <- rle(matchres)
posOTUsBeforeMissing <- as.numeric(matchres[which(matchres=="R")-1][which(matchres[which(matchres=="R")-1]!="R")] )
# This are the OTUs that come before missing chr. data OTUs
BeforeMissingPlot2 <- desiredFiltered[posOTUsBeforeMissing]
# This is the amount of missing OTUs, spaces to add (ghost karyotypes)
valuesOfMissRepsBeforePlot2 <- reps$lengths[which(reps$values=="R")]Plotting
Now we are ready to plot adding those arguments for addMissingOTUAfter and missOTUspacings
# plot to png file
png(file=paste0("thirdplot.png" ),width=1100,height=1000)
{
par(omi=rep(0,4) , mar=c(0,0,0,0), mfrow=c(1,2))
par(fig=c(0,.25,0,1))
par(mar=c(1,0,0,0))
plot(revBayesPhyloUM)
par(fig=c(0.25,1,0,1), new=TRUE)
par(mar=c(0,0,0,0))
plotIdiograms(mixChrSize, # chr. size data.frame
dfMarkPos = mixMarks, # data.frame of marks' positions (inc. cen. marks)
dfMarkColor = mydfMaColor, # d.f. of mark characteristics
origin="b", # position measured from bottom of chr.
karHeight = 2.8, # vertical size of kar. including spacing
karHeiSpace = 4.5, # vertical size of kar. including spacing
squareness = 5, # vertices squareness
chrSpacing = .25, # horizontal spacing among chr.
yTitle = "",
karIndex = TRUE # add karyotype index
,indexIdTextSize=.4 # font size of indices and chr. names
,distTextChr=0.7 # dist. among chr. and chr. name
,addMissingOTUAfter = BeforeMissingPlot2 # add ghost OTUs after these names
,missOTUspacings = valuesOfMissRepsBeforePlot2 # how many ghosts, respectively
,lwd.chr=.5 # line width
,markLabelSpacer = 0 # dist. of legend to rightmost chr.
,legendWidth = 2 # width of square or dots of legend
,ylimTopMod = -2 # modify ylim of top
,ylimBotMod = -2 # modify ylim of bottom
,rulerPos = -0.5 # position of ruler
,rulerNumberSize = .35 # font size of number of ruler
,rulerNumberPos = .4 # position of ruler number
,ruler.tck=-.004 # ruler tick size and orient.
,OTUfont=3 # italics
,OTUfamily="Courier New" # for OTU name
,xModMonoHoloRate = 5 # factor (quotient) to shrink separation of chromatids of holocen.
)
}
# close png
dev.off()8 Citrus
8.1 C. maxima as da-Costa-Silva et al. (2019)
data.frame of chr. size and marks
Main three data.frames:
- One for chr. sizes (parameter
dfChrSize) - One for marks’ positions (parameter
dfMarkPos) - One (optional) for mark style (parameter
dfMarkColor)
In this example two of them (1 and 2) will be obtained from a larger data.frame citrusMaximaChrMark.
Column chrNameUp will be used in this case for unifying the chr. names (chrName) in both data.frames.
# C. maxima 'pink'
# 4A 2C 4D 6F 2FL
{
citrusMaximaChrMark<-read.table(text="
chrName chrNameUp shortArmSize longArmSize markName chrRegion markDistCen markSize
FL 1 67 97 24c13 p 52 10
D 2 62 75 21L13 q 35 8
D 2 62 75 CMA q 43 32
A 3 70 103 45S p 6 16
A 3 70 103 14A12 p 32 8
A 3 70 103 CMA p 40 30
A 3 70 103 28A07 q 54 10
A 3 70 103 CMA q 64 39
D 4 59 84 02C12 p 31 10
D 4 59 84 20C13 q 32 9
D 4 59 84 cma q 48 36
F 5 52 74 5s p 18 10
C 6 62 86 28A05 p 22 9
C 6 62 86 cma p 40 22
C 6 62 86 cma q 61 25
A 7 57 96 45S p 6 18
A 7 57 96 cma p 38 19
A 7 57 96 cma q 62 34
F 8 41 72 01b09 q 47 8
F 9 40 72 55b01/59C23 q 24 13", header =TRUE)
}data.frame of chr. sizes
Main columns: chrName, shortArmSize, longArmSize, OTU (optional when only one OTU), group (optional)
Column chrNameUp will be used in this case for unifying the chr. names (chrName) between data.frames.
{
require(idiogramFISH)
# column and row subset
citrusMaxima<- citrusMaximaChrMark[,1:4][!duplicated(citrusMaximaChrMark[,1:4]),]
# chr. name change (unique)
citrusMaxima$chrName<-make.uniqueIF(citrusMaxima$chrName)
# chr. size in pixels
chrSizes <- citrusMaxima$shortArmSize+citrusMaxima$longArmSize
# max. size in μm.
maxSize <-3.6
maxPixel<-max(chrSizes)
# pixel to microm.
citrusMaxima$shortArmSize<-citrusMaxima$shortArmSize/(maxPixel/maxSize)
citrusMaxima$longArmSize <-citrusMaxima$longArmSize /(maxPixel/maxSize)
citrusMaxima$OTU<- "C. maxima 'Pink'"
# add groups (pairs)
citrusMaxima$group<-1:9
}data.frame of marks’ positions
Main columns: chrName, markName, chrRegion (arm), markDistCen (mark distance to centr.), markSize
Column chrNameUp will be used in this case for unifying the chr. names (chrName) between data.frames.
Column OTU is mandatory because is present in first data.frame (citrusMaxima)
{
# Select columns
citrusMaximaMarkPos<- citrusMaximaChrMark[,c(1:2,5:8)][!duplicated(citrusMaximaChrMark[,c(1:2,5:8)] ),]
# transcribe chr.names - changed above. needs common column (i.e. chrNameUp)
citrusMaximaMarkPos$chrName<-citrusMaxima$chrName[match(citrusMaximaMarkPos$chrNameUp,citrusMaxima$chrNameUp )]
#pixel to μm.
citrusMaximaMarkPos$markDistCen<-citrusMaximaMarkPos$markDistCen/(maxPixel/maxSize)
citrusMaximaMarkPos$markSize<-citrusMaximaMarkPos$markSize/(maxPixel/maxSize)
# OTU column
citrusMaximaMarkPos$OTU<-unique(citrusMaxima$OTU)
# fix case
citrusMaximaMarkPos$markName<-toupper(citrusMaximaMarkPos$markName)
}data.frame of marks’ style
Optional data.frame. Add color and style for marks present in citrusMaximaMarkPos
{
unique(citrusMaximaMarkPos$markName)
# "24C13" "21L13" "CMA" "45S" "14A12" "28A07" "02C12" "20C13" "5S" "28A05" "01B09" "55B01/59C23"
# make d.f. of styles of marks
markStyleDF <- makedfMarkColorMycolors(
unique(citrusMaximaMarkPos$markName),
c("chocolate","chocolate","darkgoldenrod1","chartreuse3", rep("chocolate",4),"red", rep("chocolate",3) )
)
}Notes and plot
Two optional data.frames for adding notes to plot with columns OTU and note.
Parameters: leftNotes and notes
# notes
{
# formula
maxima<-"4A + 2C + 4D + 6F + 2FL [4A/45S,2F/5S]"
leftNotesdf<- data.frame(OTU=unique(citrusMaxima$OTU), note= maxima )
# authors
notesdf<- data.frame(OTU=unique(citrusMaxima$OTU), note="da-Costa-Silva et al. 2019" )
}
# add group column to show that each one is a pair
{
par(mar=rep(0,4),oma=rep(0,4))
plotIdiograms(dfChrSize= citrusMaxima, # chr. size data.frame
dfMarkPos= citrusMaximaMarkPos, # mark position data.frame
dfMarkColor=markStyleDF, # mark style d.f.
orderChr = "original", # order of chr. as in d.f.
chrIdPatternRem="_.*", # regex pattern to remove from chr. names
classChrName = "Type", # chr. names title
chrWidth = 0.3, # chr. width
chrSpacing=0.40, # separ. among chr.
groupSepar = 1 # factor to multiply chr. spacing among groups
,chromatids = FALSE # don't use chromatids
,chrColor= "white" # chr. color
,classGroupName = "Pair"# groups title
,chrBorderColor ="black"# border color
,lwd.chr = 0.5 # border width
,legend="inline" # label location
,bannedMarkName = c("CMA","45S","5S") # don't show this (inline)
,bannedMarkNameAside =TRUE # show banned marks "aside" NEW, NOT IN CRAN
,legendHeight=1.7 # height of labels (aside)
,colorBorderMark="black"# color of border of marks
,markNewLine = "/" # split mark name to new line
,ruler=FALSE # don't use ruler
,threshold=40 # fix scale, when too much shrinking
,distTextChr = .7 # distance text to chr.
,chrIndex = "" # don't use chr. indices
,morpho="" # don't use morphology
,karIndex = FALSE # don't use kar. indices
,OTUfont=3 # OTU name in italics
,notesTextSize = 1.3 # font size of notes
,leftNotes=leftNotesdf # data.frame with left notes
,leftNotesPosX = 0 # horizontal pos. of formula
,leftNotesPosY = -.5
,notes = notesdf # right notes - authors
,ylimBotMod = 1 # modify ylim bottom argument
,ylimTopMod = 0 # modify ylim top argument
,xlimLeftMod = 2 # modify left xlim
,xlimRightMod = 3 # modify right xlim
)
}8.2 C. reticulata as da-Costa-Silva et al. (2015)
Chr. size data.frame
#
# chr. size - arms in pixels
#
{
citrusReticulata<-read.table(text="
chrName shortArmSize longArmSize totalMicro Mbp group
f 67 91 2.65 50.96 1
d 61 77 2.32 44.60 2
c 59 78 2.18 41.81 3
d 61 83 2.49 47.75 4
d 34 63 1.87 35.90 5
d 34 63 1.87 35.90 5
d 50 66 1.93 37 6
d 50 83 2.28 43.72 7
f 42 77 2.02 38.78 8
f 28 67 1.70 32.57 9", header =T)
citrusReticulata$pixeltotal <- citrusReticulata$shortArmSize+citrusReticulata$longArmSize
# pixel to micrometers
citrusReticulata$shortArmSize<- citrusReticulata$shortArmSize/(citrusReticulata$pixeltotal/citrusReticulata$totalMicro)
citrusReticulata$longArmSize <- citrusReticulata$longArmSize /(citrusReticulata$pixeltotal/citrusReticulata$totalMicro)
# change chr. names avoiding duplicates
citrusReticulata$chrName<-toupper(citrusReticulata$chrName)
citrusReticulata$chrName<-make.uniqueIF(citrusReticulata$chrName)
# add OTU
citrusReticulata$OTU<-"C. reticulata 'Cravo'"
# replicate name for plotting it over chrs.
citrusReticulata$chrNameUp<-citrusReticulata$chrName
}Marks
citrusReticulataMarkPosDF<- read.table(text="
chrName chrRegion markName markDistCen markSize
F_1 p 24C13 0.87 0.12
C p CMA 0.64 0.30
C q CMA 0.84 0.40
C p 14A12 0.48 0.11
C q 28A07 0.77 0.14
C p 45S 0.00 0.10
D_1 q CMA 0.54 0.75
D_1 p 21L13 0.67 0.14
D_2 q CMA 0.88 0.55
D_2 p 02C12 0.5 0.14
D_2 q 20C13 0.42 0.14
D_3 p CMA 0.35 0.30
D_3 p c45S 0.35 0.35
D_3 p CMA 0.8 0.15
D_3 p c45S 0.8 0.15
D_4 p CMA 0.35 0.30
D_4 p 45S 0.35 0.30
D_5 p 28A05 0.66 0.14
D_5 q CMA 0.50 0.60
D_6 q CMA 0.72 0.70
F_2 q 01B09 0.8 0.14
F_3 q 55B01 0.3 0.18
F_3 q 59C23 0.3 0.18", header =T, stringsAsFactors=F)
# marks' style data.frame
unique(citrusReticulataMarkPosDF$markName)
# [1] "24C13" "CMA" "14A12" "28A07" "45S" "21L13" "02C12" "20C13" "c45S"
# [10] "28A05" "01B09" "55B01" "59C23"
markStyleDF <- makedfMarkColorMycolors(
unique(citrusReticulataMarkPosDF$markName),
c("chocolate","darkgoldenrod1","chocolate","chocolate","chartreuse3",rep("chocolate",3),"chartreuse3",rep("chocolate",4) )
)
# square mark with label to the left (squareLeft style)
markStyleDF[which(markStyleDF$markName=="59C23"),]$style<-"squareLeft"
# add OTU!
citrusReticulataMarkPosDF$OTU<-unique(citrusReticulata$OTU)Plotting
# notes to the left
reticulata <- "2C + 10D + 6F [2C/45S, 2D/45S]"
leftNotesdf<- data.frame(OTU=unique(citrusReticulata$OTU), note= reticulata )
# authors in notes (right side)
notesdf<- data.frame(OTU=unique(citrusReticulata$OTU), note="da-Costa-Silva et al. (2015)" )
par(mar=rep(0,4),oma=rep(0,4))
{
require(idiogramFISH)
plotIdiograms(dfChrSize= citrusReticulata, # chr. size data.frame
dfMarkPos = citrusReticulataMarkPosDF,# mark position data.frame (inc. cen.)
dfMarkColor=markStyleDF,# mark style d.f.
orderChr = "original", # order of chr. as in d.f.
chrIdPatternRem="_.*", # pattern to remove from chr. names
chrColor= "white" # color of chr.
,chrBorderColor="black" # borders
,chrIndex = "AR" # add index r
,morpho="" # don't add morphology cat.
,karIndex = FALSE # don't add kar. indeex
,chrNameUp = TRUE # add. info. of col. chrNameUp over kar.
,centromereSize = 0 # size of cen.
,colorBorderMark="black"# color of border of marks
,lwd.chr = 1 # border width
,OTUfont=3 # OTU name in italics
,leftNotes=leftNotesdf # data.frame with notes
,notesTextSize = 1 # font size of notes
,leftNotesPosX = 0 # horizontal pos. of formula- left notes
,leftNotesPosY = -1.9 # y pos. of left notes
,notes = notesdf # authors in notes (right)
,notesPosX = 1 # move right notes to right
,rulerInterval = .5 # ruler label int.
,ruler.tck = -.01 # ruler ticks
,rulerPos = -0.5 # ruler pos.
,xPosRulerTitle = 7 # move title (units) of ruler, beginning in 1st chr.
,ylimBotMod = 2 # modify ylim bottom argument
,ylimTopMod = 1 # modify ylim top argument
,xlimLeftMod = 1 # modify left xlim
,xlimRightMod = 2 # modify right xlim
,chromatids=FALSE # do not plot chromatids
,squareness = 2 # corners rounded
,useMinorTicks = TRUE # ruler minor ticks
,miniTickFactor = 5 # number of small ticks per big ticks
,distTextChr=.7 # distance indices to chr.
,chrId="" # don't add chr. names (below)
,chrSize = TRUE # add chr. size
,chrSizeMbp = TRUE # add info of col. Mbp
,nsmall=2 # significative digits for indices
,markPer = "CMA" # calculate % of chr. for this mark
,showMarkPos = TRUE # show mark. position as fraction, under kar.
,bToRemove = c("CMA","45S","c45S") # do not use these in showMarkPos
,legend = "inline" # labels inline
,legendHeight = 1.5 # legend height (right)
,bannedMarkName = "CMA" # do not add label of this mark
,bannedMarkNameAside=TRUE # add banned mark aside
,forbiddenMark = "c45S" # do not add this mark label
,groupSepar = 1.8 # separation among groups, see col. group (x chrSpacing)
,chrSpacing=.20 # separ. among chr.
,chrWidth = .20 # chr. width
,nameChrIndexPos = 4 # move name of indices to the left
)
} Download Citrus scripts from: https://ferroao.gitlab.io/idiogramfishhelppages/citrushelp.R
8.3 Exploring Citrus functions
Published by Carvalho et al. (2005)
C. jambhiri/ C. volkameriana
1B + 11D + 4F + 2FL0
Create data.frame of chr. size
{
library(idiogramFISH)
citrusSizeDF <- citrusSize(B=1,D=11,F=4,FL0=2,
OTU="C. jambhiri")
# add simple secondary names
citrusSizeDF$chrNameUp <- 1:nrow(citrusSizeDF)
head(citrusSizeDF,3)
tail(citrusSizeDF,3)
# Editing data.frame:
# citrusSizeDF <- edit(citrusSizeDF)
# Initial plot, only sizes:
par(mar = rep(0,4),oma=rep(0,4) )
plotIdiograms(dfChrSize= citrusSizeDF, # chr. size data.frame
orderChr = "original", # order of chr.
ruler=FALSE,
ylimBotMod = 2, # modify bottom margin
ylimTopMod = 1,
chrNameUp = TRUE, # use col. chrNameUp
classChrName = "Type", # change default title of inferior name
classChrNameUp = "Chr." # change default title of upper name
)
}Use the group column to define pairs
citrusSizeDF$chrName
[1] "B" "D_1" "D_2" "D_3" "D_4" "D_5" "D_6" "D_7" "D_8"
[10] "D_9" "D_10" "D_11" "F_1" "F_2" "F_3" "F_4" "FL0_1" "FL0_2"
#" "B" "D_1" "D_2" "D_3" "D_4" "D_5" "D_6" "D_7" "D_8" "D_9" "D_10" "D_11" "F_1" "F_2" "F_3" "F_4" "FL0_1" "FL0_2"
# ------- --------- --------- --------- ----------- ------------ ----------- ------------ -------------
#" 1 2 3 4 5 6 7 8 9
citrusSizeDF$group<-unlist(lapply(1:9, function(x) rep(x,2)) )
citrusSizeDF$group
[1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
# make secondary names
citrusSizeDF$chrNameUp <- unlist(lapply(1:9, function(x) rep(x,2)) )
citrusSizeDF$chrNameUp <- make.uniqueIF(citrusSizeDF$chrNameUp, sep="", letter=TRUE)data.frame of marks’ position
# CMA bands
citrusMarkPosDF <- citrusMarkPos(citrusSizeDF)
head(citrusMarkPosDF,3)
# chrName chrRegion markName markDistCen markSize OTU
# 1 B p CMA 0.00 0.35 C. jambhiri
# 2 B q CMA 1.35 0.35 C. jambhiri
# 3 D_1 q CMA 1.35 0.35 C. jambhiri
tail(citrusMarkPosDF,3)
# chrName chrRegion markName markDistCen markSize OTU
# 11 D_7 q CMA 1.35 0.35 C. jambhiri
# 12 D_8 q CMA 1.35 0.35 C. jambhiri
# 13 D_9 q CMA 1.35 0.35 C. jambhiri
# marks with overlap with CMA
# add mark of 45S rDNA in B, short arm (p)
citrusMarkPosDF45S <- markOverCMA(citrusMarkPosDF, # d.f. of CMA bands
chrType="B", # chr. of new mark
chrRegion="p", # arm of new mark
markName="45S") # name of mark
# add 45S in D (D_1) long arm
citrusMarkPosDF45S <- markOverCMA(citrusMarkPosDF45S, # d.f. including CMA bands
chrName="D_1",
chrRegion="q",
markName="45S")
# creating additional data.frames of marks (non-CMA overlap)
citrusMarkPosDF45S_D11 <- data.frame(chrName="D_11", # cr.
chrRegion="q", # arm
markName="45S",
markDistCen=1, # dist. to centrom.
markSize=0.2, # mark size
OTU="C. jambhiri")
citrusMarkPosDF45S_F4 <- data.frame(chrName="F_4",
chrRegion="q",
markName="45S",
markDistCen=1,
markSize=0.2,
OTU="C. jambhiri")
# fuse data.frames
citrusMarkPosDF45S <- dplyr::bind_rows(citrusMarkPosDF45S, # CMA marks and overlapped
citrusMarkPosDF45S_D11, # 45S in D (no overlap)
citrusMarkPosDF45S_F4 ) # 45S in F (no overlap)data.frame of mark style
Add karyotype formulas
Plot
par(mar = rep(0,4),oma=rep(0,4) )
library(idiogramFISH)
plotIdiograms(dfChrSize= citrusSizeDF, # chr. size data.frame
dfMarkPos= citrusMarkPosDF45S,# mark position data.frame (inc. cen.)
dfMarkColor=markStyleDF, # mark style d.f.
orderChr = "original", # preserve order of chr. of d.f.
# chrId = "", # remove name of chr.
chrIdPatternRem="_.*", # regex pattern for removal of names of chr.
chrSpacing=0.2, # separ. among chr.
chrColor= "dodgerblue",
chrNameUp = TRUE, # use col. chrNameUp
classChrName = "Type", # change default title of inferior name
classChrNameUp = "Chr." # change default title of upper name
,legendWidth = .8 # legend item width
,legendHeight = 3 # legend item height
,markLabelSpacer = 2 # legend spacer
,ruler=F # no ruler
,chrIndex = "" # no chr. index
,morpho="" # no morpho.
,karIndex = FALSE # no kar. ind.
,leftNotes=notesdf # data.frame with notes
,notesTextSize = 1.3 # font size of notes
,leftNotesPosX = 10.2 # pos. formula x axis
,leftNotesPosY = 0 # pos. formula y axis
,ylimBotMod = 1 # modify ylim bottom argument
,xlimRightMod = 4 # modify right xlim
)8.4 Representing only one chromosome per pair
As in the article (Carvalho et al., 2005)
C. jambhiri/ C. volkameriana
1B + 11D + 4F + 2FL0
{
# data.frame of chr. sizes
citrusSizeDF_2 <- citrusSize(B=1,D=8,F=3,FL0=1, # MODIFIED, SEE ABOVE
OTU="C. jambhiri_2")
head(citrusSizeDF_2)
# data.frame of CMA band pos.
citrusMarkPosDF_2 <- citrusMarkPos(citrusSizeDF_2)
head(citrusMarkPosDF_2)
# marks with overlap with CMA
# 45S in B, short arm
citrusMarkPosDF45S_2<-markOverCMA(citrusMarkPosDF_2,
chrType="B",
chrRegion="p",
markName="45S")
# 45S in D (D_1), long arm
citrusMarkPosDF45S_2<-markOverCMA(citrusMarkPosDF45S_2,
chrName="D_1",
chrRegion="q",
markName="45S")
# add mark from scratch (no overlap with CMA)
citrusMarkPosDF45S_D8 <- data.frame(chrName="D_8", # name of chr.
chrRegion="q", # arm
markName="45S",#
markDistCen=1, # dist. to centrom.
markSize=0.2, # mark size
OTU="C. jambhiri_2")
citrusMarkPosDF45S_F3 <- data.frame(chrName="F_3",
chrRegion="q",
markName="45S",
markDistCen=1,
markSize=0.2,
OTU="C. jambhiri_2")
# fuse data.frames
citrusMarkPosDF45S_2 <- dplyr::bind_rows(citrusMarkPosDF45S_2,
citrusMarkPosDF45S_D8,
citrusMarkPosDF45S_F3
)
# current marks
unique(citrusMarkPosDF45S$markName)
# data.frame of mark style
markStyleDF <- makedfMarkColorMycolors(
unique(citrusMarkPosDF45S_2$markName), c("darkgoldenrod1","chartreuse3") )
# modify styles
markStyleDF$style<-c("square","dots")
# organize pairs, group
citrusSizeDF_2$chrName
# "B" "D_1" "D_2" "D_3" "D_4" "D_5" "D_6" "D_7" "D_8" "F_1" "F_2" "F_3" "FL0"
# ________ ____ ___ ________ ____ _________ ____ ________ ___
# 1 2 3 4 5 6 7 8 9
citrusSizeDF_2$group <- c(1,1,2,3,4,4,5,6,6,7,8,8,9)
# add names over chr.
citrusSizeDF_2$chrNameUp <- citrusSizeDF_2$group
citrusSizeDF_2$chrNameUp <- make.uniqueIF(citrusSizeDF_2$chrNameUp, sep="", letter=TRUE)
# formula
notesdf <- data.frame(OTU=unique(citrusSizeDF_2$OTU), note="1B + 11D + 4F + 2FL0") # keep spacing
}
par(mar = c(0, 0, 0, 0), oma=rep(0,4) )
library(idiogramFISH)
plotIdiograms(dfChrSize= citrusSizeDF_2, # d.f. of chr. size
dfMarkPos= citrusMarkPosDF45S_2,# d.f. of mark pos
dfMarkColor=markStyleDF, # d.f. of mark style
orderChr = "original", # chr. order as in d.f.
chrIdPatternRem = "_.*", # modif name of chr. removing this pattern
chrSpacing=.20, # separ. among chr.
chrColor= "dodgerblue"
,legendWidth = .8 # legend item width
,legendHeight = 2.5 # legend item height
,markLabelSpacer = 2 # legend spacer
,ruler=F
,chrIndex = ""
,morpho=""
,karIndex = FALSE
,chrNameUp = TRUE # use col. chrNameUp
,classChrName = "Type" # change default title of inferior name
,classChrNameUp = "Chr." # change default title of upper name
,classGroupName = "Pair" # name for groups
,leftNotes=notesdf # data.frame with notes
,notesTextSize = 1.3 # font size of notes
,leftNotesPosX = 10.2 # formula horiz. pos.
,leftNotesPosY = 0
,ylimBotMod = 1 # modify ylim bottom argument
,ylimTopMod = 0 # modify ylim top argument
,xlimLeftMod = 2 # modify left xlim
,xlimRightMod = 3 # modify right xlim
)8.5 Several karyotypes per plot
Column OTU is mandatory for several OTU.
# data.frames of size - merge
bothSize <-dplyr::bind_rows(citrusSizeDF, citrusSizeDF_2)
# data.frames of band pos. merge
bothMarkPos <-dplyr::bind_rows(citrusMarkPosDF45S, citrusMarkPosDF45S_2)
# formulas
notesdf<- data.frame(OTU=unique(bothSize$OTU), note="1B + 11D + 4F + 2FL0")
par(mar=rep(0,4),oma=rep(0,4))
plotIdiograms(dfChrSize= bothSize, # chr. size data.frame
dfMarkPos= bothMarkPos, # mark position data.frame (inc. cen.)
dfMarkColor=markStyleDF,# mark style d.f.
orderChr = "original", # order of chr. as in d.f.
chrIdPatternRem="_.*", # pattern to remove from chr. names
karHeight = 2, # karyotype height
karHeiSpace = 5, # height + separ. among karyot.
chrSpacing=.20, # separ. among chr.
chrColor= "dodgerblue"
,distTextChr = .9 # distance text to chr.
,legendWidth = .8 # legend item width
,legendHeight = 3 # legend item height
,markLabelSpacer = 2 # legend spacer
,ruler=FALSE
,chrIndex = ""
,morpho=""
,karIndex = FALSE
#,colorBorderMark="black"# color of border of marks
,lwd.chr = 1 # border width
,chrNameUp = TRUE # use col. chrNameUp
,classChrName = "Type" # change default title of inferior name
,classChrNameUp = "Chr."# change default title of upper name
,groupName = FALSE # don't show group names
,OTUfont=3 # OTU name in italics
,OTUfamily="mono" # font type for OTU
,leftNotes=notesdf # data.frame with notes
,notesTextSize = 1.3 # font size of notes
,leftNotesPosX = 10.2 # horizontal pos. of formula
,leftNotesPosY = 0
,ylimBotMod = 1 # modify ylim bottom argument
,ylimTopMod = 0 # modify ylim top argument
,xlimLeftMod = 2 # modify left xlim
,xlimRightMod = 3 # modify right xlim
)8.6 C. leiocarpa as Yi et al. (2018)
#
# create data.frame of chr.
#
cleiocarpaChr <- citrusSize(A=1,C=1,D=10,F=6, # Using Guerra nom.
OTU="C. leiocarpa",
shortArm=1.7
)
#
# add groups
#
cleiocarpaChr$group<-gsub("_.*","",cleiocarpaChr$chrName)
#
# marks data.frame
#
# CMA
cleiocarpaMarks <- citrusMarkPos(cleiocarpaChr)
# marks with overlap with CMA
# add mark of 45S rDNA in A, short arm (p)
cleiocarpaMarks <- markOverCMA(cleiocarpaMarks, # d.f. of CMA bands
chrType="A", # chr. of new mark
chrRegion="p", # arm of new mark
markName="45S", # name of mark
shrinkMark=TRUE
)
# add 45S in Ds
cleiocarpaMarks <- markOverCMA(cleiocarpaMarks, # d.f. including CMA bands
chrName=paste0("D_",1:4),
chrRegion="q",
markName="45S",
shrinkMark=TRUE
)
# creating additional data.frames of marks (non-CMA overlap)
cleiocarpaMarks_D3 <- data.frame(chrName=c("D_3","D_4"), # cr.
chrRegion="q", # arm
markName="5S",
markDistCen=1.1, # dist. to centrom.
markSize=0.2, # mark size
OTU="C. leiocarpa")
#
# merge marks d.fs
#
cleiocarpaMarks <- dplyr::bind_rows(cleiocarpaMarks, # CMA marks and overlapped 45S
cleiocarpaMarks_D3, # 5S in D (no overlap)
)
#
# mark style data.frame
#
# current marks
unique(cleiocarpaMarks$markName)
# [1] "CMA" "45S" "5S"
markStyleDF <- makedfMarkColorMycolors(
unique(cleiocarpaMarks$markName), c("darkgoldenrod1","chartreuse3","red")
)
# modify styles
markStyleDF$style<-c("square","dots","dots")
#
# swap chromosome arms of Ds (CMA marks originally in long arm)
#
dflist<-swapChrRegionDfSizeAndMarks(cleiocarpaChr,
cleiocarpaMarks,
paste0("D_",1:10)
)
cleiocarpaChr <-dflist$dfChrSize
cleiocarpaMarks <-dflist$dfMarkPos
#
# Left notes Up data.frame
#
notesdf<- data.frame(OTU=unique(cleiocarpaChr$OTU),
note= "italic('Citrus leiocarpa'),' Hort. ex Tan.' " # use with parseStr2lang
)
par(mar = rep(0,4),oma=rep(0,4) )
plotIdiograms(dfChrSize= cleiocarpaChr, # chr. size data.frame
dfMarkPos= cleiocarpaMarks, # mark position data.frame
dfMarkColor=markStyleDF, # mark style d.f.
orderChr = "original", # preserve order of chr. of d.f.
chrId="", # do not add chr. names
addOTUName = FALSE, # remove name of OTU
chrIdPatternRem="_.*", # regex pattern for removal of names of chr.
chrSpacing=0.2, # separ. among chr.
chrColor= "dodgerblue", # chr. color
chromatids=FALSE, # do not use separ. chromatids
dotsAsOval = TRUE # use oval shape instead of dots marks
,legendWidth = .8 # legend item width
,legendHeight = 3 # legend item height
,markLabelSpacer = 2 # legend spacer
,ruler=F # no ruler
,chrIndex = "" # no chr. index
,morpho="" # no morpho.
,karIndex = FALSE # no kar. ind.
,leftNotesUp=notesdf # data.frame with notes
,parseStr2lang = TRUE # use italics, see notesdf above
,notesTextSize = 1.3 # font size of notes
,leftNotesPosX = 0 # pos. left notes x axis
,leftNotesPosY = -1 # pos. left notes y axis
,ylimBotMod = 0 # modify ylim bottom argument
,xlimRightMod = 4 # modify right xlim
)8.7 Citrus limon origin
With data from da-Costa-Silva et al. (2015), Mendes et al. (2016) and Carvalho et al. (2005)
8.7.1 Citrus reticulata
data.frame of chr. sizes
# c. reticulata ----X---- c. aurantium
# |
# c. limon
# c. reticulata
#
# chr. size - arms in pixels
#
{
citrusReticulata<-read.table(text="
chrName shortArmSize longArmSize totalTrue
f 67 91 2.65
d 61 77 2.32
c 59 78 2.18
d 61 83 2.49
d 34 63 1.87
d 50 66 1.93
d 50 83 2.28
f 42 77 2.02
f 28 67 1.70", header =T)
citrusReticulata$pseudototal <- citrusReticulata$shortArmSize+citrusReticulata$longArmSize
# pixel to micrometers
citrusReticulata$shortArmSize<- citrusReticulata$shortArmSize/(citrusReticulata$pseudototal/citrusReticulata$totalTrue)
citrusReticulata$longArmSize <- citrusReticulata$longArmSize /(citrusReticulata$pseudototal/citrusReticulata$totalTrue)
citrusReticulata$chrName<-toupper(citrusReticulata$chrName)
citrusReticulata$chrName<-make.uniqueIF(citrusReticulata$chrName)
citrusReticulata$OTU<-"C. reticulata 'Cravo'"
}Sort chromosomes
# sort chr. by name
citrusReticulata<-citrusReticulata[order(citrusReticulata$chrName),]
# sort Ds by size
Ds<-citrusReticulata[which( citrusReticulata$chrName %in% grep("D", citrusReticulata$chrName, value=T)
),]
citrusReticulata[which( citrusReticulata$chrName %in% grep("D", citrusReticulata$chrName, value=T)
),] <- Ds[order(Ds$shortArmSize+Ds$longArmSize),]
# sort Fs by size
Fs<-citrusReticulata[which( citrusReticulata$chrName %in% grep("F", citrusReticulata$chrName, value=T)
),]
citrusReticulata[which( citrusReticulata$chrName %in% grep("F", citrusReticulata$chrName, value=T) ),] <-
Fs[order(Fs$shortArmSize + Fs$longArmSize),]
# add group column to show that each one is a pair
citrusReticulata$group<-1:9data.frame of bands
#
# c. reticulata bands
#
{
citrusReticulataMarkPosDF <- citrusMarkPos(citrusReticulata)
# remove CMA terminal from D
citrusReticulataMarkPosDF <- citrusReticulataMarkPosDF[-which(citrusReticulataMarkPosDF$chrName=="D_3" &
citrusReticulataMarkPosDF$markName=="CMA"
),]
# add marks in short arm of D
Sr_D_3<-citrusReticulata[which(citrusReticulata$chrName=="D_3"),]$shortArmSize
#45S
citrusReticulataMarkPosDF_D45S <- data.frame(chrName="D_3",
chrRegion="p",
markName="45S",
markDistCen=Sr_D_3- (.15+.15/2),
markSize=0.15,
OTU=unique(citrusReticulata$OTU)
)
# CMA
citrusReticulataMarkPosDF_DCMA <- data.frame(chrName="D_3",
chrRegion="p",
markName="CMA",
markDistCen=Sr_D_3-.3,
markSize=0.3,
OTU=unique(citrusReticulata$OTU)
)
# add 45S rDNA mark in short arm of C
citrusReticulataMarkPosDF_C45S <- data.frame(chrName="C",
chrRegion="p",
markName="45S",
markDistCen=0,
markSize=0.1,
OTU=unique(citrusReticulata$OTU)
)
# fuse marks
citrusReticulataMarkPosDF <- dplyr::bind_rows(citrusReticulataMarkPosDF,
citrusReticulataMarkPosDF_D45S,
citrusReticulataMarkPosDF_DCMA,
citrusReticulataMarkPosDF_C45S
)
# change band sizes
# D_1
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="D_1"),]$markSize<-.75
LAD_1<-citrusReticulata[which(citrusReticulata$chrName=="D_1"),]$longArmSize
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="D_1"),]$markDistCen<-
LAD_1-.75
# C short arm
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="C" &
citrusReticulataMarkPosDF$markName=="CMA" &
citrusReticulataMarkPosDF$chrRegion=="p"),]$markSize<-.3
SAC <- citrusReticulata[which(citrusReticulata$chrName=="C" ),]$shortArmSize
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="C" &
citrusReticulataMarkPosDF$markName=="CMA" &
citrusReticulataMarkPosDF$chrRegion=="p"
),]$markDistCen<-SAC-.3
# C LONG ARM
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="C" &
citrusReticulataMarkPosDF$markName=="CMA" &
citrusReticulataMarkPosDF$chrRegion=="q"),]$markSize<-.4
LAC <- citrusReticulata[which(citrusReticulata$chrName=="C" ),]$longArmSize
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="C" &
citrusReticulataMarkPosDF$markName=="CMA" &
citrusReticulataMarkPosDF$chrRegion=="q"
),]$markDistCen<- LAC-.4
# D_2
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="D_2"),]$markSize<-.55
LAD_2<-citrusReticulata[which(citrusReticulata$chrName=="D_2"),]$longArmSize
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="D_2"),]$markDistCen<-
LAD_2-.55
# D_4
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="D_4"),]$markSize<-.6
LAD_4<-citrusReticulata[which(citrusReticulata$chrName=="D_4"),]$longArmSize
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="D_4"),]$markDistCen<-
LAD_4-.6
# D_5
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="D_5"),]$markSize<-.7
LAD_5<-citrusReticulata[which(citrusReticulata$chrName=="D_5"),]$longArmSize
citrusReticulataMarkPosDF[which(citrusReticulataMarkPosDF$chrName=="D_5"),]$markDistCen<-
LAD_5-.7
}8.7.2 C. aurantium ‘common’
data.frame of chr. sizes
# From Mendes et al. 2016
# 1a + 1b + 1C + 8D + 7F
{
#
# chr .sizes
#
citrusaurantium<-read.table(text="
chrName shortArmSize longArmSize
f 1.43333333333333 2.06666666666667
f 1.36666666666667 1.83333333333333
d 1.3 1.66666666666667
d 1.13333333333333 1.46666666666667
d 1 1.6
a 1.3 2
d 1.36666666666667 1.8
d 1.06666666666667 1.63333333333333
d 0.733333333333333 1.36666666666667
f 0.833333333333333 1.36666666666667
d 1.13333333333333 1.33333333333333
c 1.16666666666667 1.66666666666667
d 1.06666666666667 1.8
b 1 1.83333333333333
f 0.966666666666667 1.6
f 0.8 1.36666666666667
f 0.633333333333333 1.43333333333333
f 0.733333333333333 1.3
", header =TRUE)
# modify chr. names
citrusaurantium$chrName<-toupper(citrusaurantium$chrName)
citrusaurantium$chrName<-make.uniqueIF(citrusaurantium$chrName)
# add column
citrusaurantium$OTU<-"C. aurantium 'common'"
}
Order pairs based in BAC markers (not shown here - different to 45S / 5S rDNA )
{
# confirmed pairs
customOrder<-c("A","D_3","C","D_7")
customOrder<-c(customOrder,sort(setdiff(citrusaurantium$chrName,customOrder)) )
# sort
citrusaurantium$chrName<-factor(citrusaurantium$chrName, levels=customOrder)
citrusaurantium<-citrusaurantium[order(citrusaurantium$chrName),]
# sort Ds by size
Ds<-citrusaurantium[which( citrusaurantium$chrName %in% grep("D", citrusaurantium$chrName, value=T) &
!citrusaurantium$chrName %in% c("D_3","D_7") ),]
citrusaurantium[which( citrusaurantium$chrName %in% grep("D", citrusaurantium$chrName, value=T) &
!citrusaurantium$chrName %in% c("D_3","D_7") ),] <- Ds[order(Ds$shortArmSize+Ds$longArmSize),]
# sort Fs by size
Fs<-citrusaurantium[which( citrusaurantium$chrName %in% grep("F", citrusaurantium$chrName, value=T)
),]
citrusaurantium[which( citrusaurantium$chrName %in% grep("F", citrusaurantium$chrName, value=T) ),] <-
Fs[order(Fs$shortArmSize + Fs$longArmSize),]
# pairs:
groups<-c(1,1,2,2)
citrusaurantium$group<-c(groups,rep(NA,18-length(groups) ) )
# secondary name
citrusaurantium$chrNameUp<-1:18
}data.frame of bands
Option 1. Write from scratch:
{
citrusaurantiumMarkPosDF<-read.table(text="
chrName chrRegion markName markDistCen markSize
A p CMA 0.73 0.570
A p CMA 0.00 0.350
A q CMA 1.23 0.770
B p CMA 0.00 0.350
B q CMA 0.86 0.970
C p CMA 0.74 0.430
C q CMA 1.07 0.600
D_1 q CMA 0.60 1.070
D_2 q CMA 0.84 0.630
D_3 q CMA 1.07 0.530
D_4 q CMA 1.07 0.730
D_5 q CMA 0.86 0.770
D_7 q CMA 0.46 0.870
D_8 q CMA 0.90 0.900
B p 45S 0.09 0.175
A p 45S 0.09 0.175
D_6 p 45S 0.58 0.100
D_6 p CMA 0.53 0.200
",header=TRUE)
citrusaurantiumMarkPosDF$OTU<-"C. aurantium 'common'"
}
# this is equivalent to the following sectionOption 2. Use functions:
{
#
# CMA bands
#
citrusaurantiumMarkPosDF <- citrusMarkPos(citrusaurantium)
# add 45S in B
citrusaurantiumMarkPosDF<-markOverCMA(citrusaurantiumMarkPosDF,
chrType="B",
chrRegion="p",
markName="45S")
# add 45S in A p prox
citrusaurantiumMarkPosDF<-markOverCMA(citrusaurantiumMarkPosDF,
chrType="A",
chrRegion="p",
markName="45S")
# D_6
# change D (D_6) band from long to short
SA_D_6<-citrusaurantium[which(citrusaurantium$chrName=="D_6"),]$shortArmSize
# 45S in short
citrusaurantiumMarkPosDF_D45S <- data.frame(chrName="D_6",
chrRegion="p",
markName="45S",
markDistCen=SA_D_6-.15,
markSize=0.1,
OTU=unique(citrusaurantium$OTU)
)
# CMA in short
citrusaurantiumMarkPosDF_DCMA <- data.frame(chrName="D_6",
chrRegion="p",
markName="CMA",
markDistCen=SA_D_6-.2,
markSize=0.2,
OTU=unique(citrusaurantium$OTU)
)
# remove CMA terminal from D_6 long
citrusaurantiumMarkPosDF<-citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName!="D_6"),]
# change mark sizes according to publication
# D_1 band
# change mark size
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_1"),]$markSize<-1.07
# arm size
LAD_1<-citrusaurantium[which(citrusaurantium$chrName=="D_1"),]$longArmSize
# change mark dist. to cen.
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_1"),]$markDistCen<-
LAD_1-1.07
# D_2
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_2"),]$markSize<-0.63
LAD_2<-citrusaurantium[which(citrusaurantium$chrName=="D_2"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_2"),]$markDistCen<-
LAD_2-.63
# D_3
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_3"),]$markSize<-0.53
LAD_3<-citrusaurantium[which(citrusaurantium$chrName=="D_3"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_3"),]$markDistCen<-
LAD_3-.53
# A p ter
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="A" &
citrusaurantiumMarkPosDF$markDistCen==1.05),]$markSize<-0.57
SAA<-citrusaurantium[which(citrusaurantium$chrName=="A"),]$shortArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="A"&
citrusaurantiumMarkPosDF$markDistCen==1.05),]$markDistCen<-
SAA-.57
# A q
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="A" &
citrusaurantiumMarkPosDF$chrRegion=="q"),]$markSize<-0.77
LAA<-citrusaurantium[which(citrusaurantium$chrName=="A"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="A"&
citrusaurantiumMarkPosDF$chrRegion=="q"),]$markDistCen<-
LAA-.77
# D_4
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_4"),]$markSize<-0.73
LAD_4<-citrusaurantium[which(citrusaurantium$chrName=="D_4"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_4"),]$markDistCen<-
LAD_4-.73
# D_5
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_5"),]$markSize<-0.77
LAD_5<-citrusaurantium[which(citrusaurantium$chrName=="D_5"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_5"),]$markDistCen<-
LAD_5-.77
# D_7
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_7"),]$markSize<-0.87
LAD_7<-citrusaurantium[which(citrusaurantium$chrName=="D_7"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_7"),]$markDistCen<-
LAD_7-.87
# C p
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="C" &
citrusaurantiumMarkPosDF$chrRegion=="p"),]$markSize<-.43
SAC<-citrusaurantium[which(citrusaurantium$chrName=="C"),]$shortArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="C" &
citrusaurantiumMarkPosDF$chrRegion=="p"),]$markDistCen<-
SAC-.43
# C q
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="C" &
citrusaurantiumMarkPosDF$chrRegion=="q"),]$markSize<-.6
LAC<-citrusaurantium[which(citrusaurantium$chrName=="C"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="C" &
citrusaurantiumMarkPosDF$chrRegion=="q"),]$markDistCen<-
LAC-.6
# D_8
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_8"),]$markSize<-0.9
LAD_8<-citrusaurantium[which(citrusaurantium$chrName=="D_8"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="D_8"),]$markDistCen<-
LAD_8-.9
# B q
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="B" &
citrusaurantiumMarkPosDF$chrRegion=="q"),]$markSize<-.97
LAB<-citrusaurantium[which(citrusaurantium$chrName=="B"),]$longArmSize
citrusaurantiumMarkPosDF[which(citrusaurantiumMarkPosDF$chrName=="B" &
citrusaurantiumMarkPosDF$chrRegion=="q"),]$markDistCen<-
LAB-.97
# fuse marks
citrusaurantiumMarkPosDF <- dplyr::bind_rows(citrusaurantiumMarkPosDF,
citrusaurantiumMarkPosDF_D45S,
citrusaurantiumMarkPosDF_DCMA
)
}8.7.3 C. limon
# from: Carvalho 2005
# C. limon - 1B(45Sprox) + 1C + 8D + 1D(45S) + 5F + 1FL0 + 1FL+
{
# data.frame of chr. sizes
citruslimon <- citrusSize(B=1,C=1,D=9,F=5,FL0=1,FL=1,
OTU="C. limon")
citruslimon
# modify sizes
citruslimon$shortArmSize[3]<-1.1
citruslimon$longArmSize[3]<-1.5
citruslimon$shortArmSize[4:5]<-1.15
citruslimon$longArmSize[4:5]<-1.6
citruslimon$shortArmSize[6:7]<-1.1
citruslimon$longArmSize[6:7]<-1.6
citruslimon$shortArmSize[8:9]<-1.15
citruslimon$longArmSize[8:9]<-1.65
citruslimon$shortArmSize[2]<-1
citruslimon$longArmSize[2]<-1.6
citruslimon$shortArmSize[12]<-1
citruslimon$longArmSize[12]<-1.5
citruslimon$shortArmSize[10:11]<-.95
citruslimon$longArmSize[10:11]<-1.4
citruslimon$shortArmSize[13:14]<-1
citruslimon$longArmSize[13:14]<-1.5
citruslimon$shortArmSize[15:16]<-.95
citruslimon$longArmSize[15:16]<-1.3
# sort Ds by size
Ds<-citruslimon[which( citruslimon$chrName %in% grep("D", citruslimon$chrName, value=T)
),]
citruslimon[which( citruslimon$chrName %in% grep("D", citruslimon$chrName, value=T)
),] <- Ds[order(Ds$shortArmSize+Ds$longArmSize),]
# sort Fs by size
Fs<-citruslimon[which( citruslimon$chrName %in% grep("F", citruslimon$chrName, value=T)
),]
citruslimon[which( citruslimon$chrName %in% grep("F", citruslimon$chrName, value=T) ),] <-
Fs[order(Fs$shortArmSize + Fs$longArmSize),]
# secondary chr. name
citruslimon$chrNameUp<-1:18
#
# data.frame of CMA band pos.
#
citruslimonMarkPosDF <- citrusMarkPos(citruslimon)
head(citruslimonMarkPosDF)
# marks with overlap with CMA
# 45S in B, short arm
citruslimonMarkPosDF<-markOverCMA(citruslimonMarkPosDF,
chrType="B",
chrRegion="p",
markName="45S")
# 45S in D (D_1), long arm
citruslimonMarkPosDF<-markOverCMA(citruslimonMarkPosDF,
chrName="D_1",
chrRegion="q",
markName="45S")
# add mark from scratch (no overlap with CMA)
}8.7.4 Merge data.frames from all OTUs
#
# data.frames of size - merge
#
threeSize <-dplyr::bind_rows(citrusReticulata, citruslimon, citrusaurantium)
#
# data.frames of band pos. merge
#
threeMarkPos <-dplyr::bind_rows(citruslimonMarkPosDF, citrusaurantiumMarkPosDF, citrusReticulataMarkPosDF)
#
# leftNotes with formulas
#
# formulas
limon <- "1B + 1C + 9D + 5F + 1FL0 + 1FL+ [1B/45S, 1D/45S]"
aurantium <- "1A + 1B + 1C + 8D + 7F [1A/45S,1B/45S,1D/45S]"
reticulata <- "2C + 10D + 6F [2C/45S, 2D/45S]"
leftNotesdf<- data.frame(OTU=unique(threeSize$OTU), note=c(reticulata, limon, aurantium) )
# authors
notesdf<- data.frame(OTU=unique(threeSize$OTU), note=c("da-Costa-Silva et al. (2015)","Carvalho et al. (2005)","Mendes et al. (in prep.)") )
# marks' style data.frame
markStyleDF <- makedfMarkColorMycolors(
unique(citrusReticulataMarkPosDF$markName), c("darkgoldenrod1","chartreuse3")
)
markStyleDF$style<-c("square","dots")8.7.5 Plot
{
svg("climon.svg",width=12,height=10 )
par(mar=rep(0,4),oma=rep(0,4))
plotIdiograms(dfChrSize= threeSize, # chr. size data.frame
dfMarkPos= threeMarkPos,# mark position data.frame (inc. cen.)
dfMarkColor=markStyleDF,# mark style d.f.
orderChr = "original", # order of chr. as in d.f.
chrIdPatternRem="_.*", # pattern to remove from chr. names
karHeight = 2, # karyotype height
karHeiSpace = 6, # height + separ. among karyot.
chrSpacing=.20, # separ. among chr.
chrColor= "dodgerblue"
,distTextChr = .9 # distance text to chr.
,legendWidth = .8 # legend item width
,legendHeight = 3 # legend item height
,markLabelSpacer = 2 # legend spacer
,ruler=FALSE # do not use ruler
,chrIndex = "" # do not print chr. index
,morpho="" # do not print morphology
,karIndex = FALSE # do not print kar. index
#,colorBorderMark="black"# color of border of marks
,lwd.chr = 1 # border width
,OTUfont=3 # OTU name in italics
,leftNotes=leftNotesdf # data.frame with notes (formula)
,notesTextSize = 1.3 # font size of notes
,leftNotesPosX = 0 # horizontal pos. of formula
,leftNotesPosY = -1.5 # vertical pos. of formula
,notes = notesdf # authors
,classGroupName = "Pair"# name for groups
,chrNameUp = TRUE # use col. chrNameUp
,classChrName = "Type" # change default title of inferior name
,classChrNameUp = "Chr."# change default title of upper name
,ylimBotMod = 1 # modify ylim bottom argument
,ylimTopMod = 0 # modify ylim top argument
,xlimLeftMod = 2 # modify left xlim
,xlimRightMod = 5 # modify right xlim
,threshold=40 # fixes shrinking of scale, needed because some chr. greater than 3.5 um
,moveKarHor = "C. limon"# kar. to move to right
,mkhValue = 5 # move cariótipo para direita
,anchor=TRUE # parental structure
,moveAnchorV = -1 # move anchor
,anchorVsizeF=1 # anchor vertical size factor modifier
,karSepar = F # modif. separ de karyo.
)
dev.off() # close svg
}For a plot of GISH of Citrus, visit the GISH chapter
8.8 Citrus Functions
Details of functions can be found with:
Or in: https://ferroao.gitlab.io/idiogramFISH/reference/citrusSize.html
9 Human Karyotype
9.1 Karyotype of 400 bands
Organize chr. in rows using column OTU. (Adler, 1994)
| chrName | group | shortArmSize | longArmSize |
|---|---|---|---|
| 1 | A | 5.600 | 5.890 |
| 2 | A | 4.245 | 6.715 |
| 3 | A | 4.220 | 4.720 |
| 4 | B | 2.240 | 6.165 |
| 5 | B | 2.110 | 5.920 |
| 6 | C | 2.880 | 4.835 |
FstRow<-length(which(humChr$group %in% c("A","B") ) ) # groups in 1st row
SndRow<-length(which(humChr$group %in% "C" ) ) # groups in second row
TrdRow<-length(which(humChr$group %in% c("D","E") ) ) # groups in third row
FrtRow<-length(which(humChr$group %in% c("F","G","sex") ) ) # groups in forth row
OTUdf<-data.frame(OTU=c(rep("otu1",FstRow),
rep("otu2",SndRow),
rep("otu3",TrdRow),
rep("otu4",FrtRow)
), stringsAsFactors=FALSE # c
) # df
OTUdf$chrName<-humChr$chrName
humChr$OTU<-OTUdf$OTUAdd OTU info. to data.frame of marks’ position
| chrName | markName | chrRegion | markDistCen | markSize | |
|---|---|---|---|---|---|
| 2 | 1 | chr1p36.3 | p | 5.290 | 0.310 |
| 3 | 1 | chr1p36.2 | p | 5.100 | 0.190 |
| 4 | 1 | chr1p36.1 | p | 4.680 | 0.420 |
| 5 | 1 | chr1p35 | p | 4.435 | 0.245 |
| 6 | 1 | chr1p34.3 | p | 4.270 | 0.165 |
| 7 | 1 | chr1p34.2 | p | 4.110 | 0.160 |
This is the data.frame of mark characteristics
| markName | markColor | style | |
|---|---|---|---|
| 2 | chr1p36.3 | white | square |
| 3 | chr1p36.2 | black | square |
| 4 | chr1p36.1 | white | square |
| 5 | chr1p35 | black | square |
| 6 | chr1p34.3 | white | square |
| 7 | chr1p34.2 | black | square |
Plot
# fig.width=10, fig.height=28
par(mar=rep(0,4))
plotIdiograms(humChr, # data.frame of chromosome size (in package)
dfMarkPos = humMarkPos, # df of mark positions (in package)
dfMarkColor = humMarkColor, # df of mark characteristics (in package)
addOTUName = FALSE, # do not add name of OTU
karHeight = 6, # vertical size of kar.
karHeiSpace = 7, # vertical spacing among OTU
chrWidth = .4, # chr. width
chrSpacing = .6, # space among chr.
classChrName = "", # string for naming chr.
orderChr = "group", # order chr. by group name
amoSepar = 2, # reduce distance among OTUs
karIndex = FALSE, # do not add karyotype indices
distTextChr = 1.5, # distance from chr. to text.
chrColor = "black", # chr. color
chrIndex = "", # do not add chromosome indices
morpho = "", # do not add morphological categories
centromereSize = 0, # apparent centromere size
squareness = 10, # squareness of chr. and marks
legend = "inline", # mark labels next to chr.
markLabelSize = .5, # size of legend font
colorBorderMark = "black", # force color of border of marks
pattern= "chr[0-9XY]+", # REGEX pattern to remove from name of marks
indexIdTextSize = 2, # font size of chr name and indices
lwd.chr=.5, # width of chr and mark borders
ruler= FALSE,
xlimRightMod = 0, # space to the right of karyotype
ylimBotMod = -.6 # modify ylim of bottom
)9.2 Robertsonian Translocations
This procedure transforms the data of long arms of the chromosomes 13 and 21 from data.frames of chr. and marks in a derivative (Robertson, 1916).
# extract 13 data
humChr13<-humChr[which(humChr$chrName %in% 13),]
humMarkPos13<-humMarkPos[which(humMarkPos$chrName %in% 13),]
# extract 21 data
humChr21<-humChr[which(humChr$chrName %in% 21),]
humMarkPos21<-humMarkPos[which(humMarkPos$chrName %in% 21),]
# Making derivative data.frame of Marks
# remove p arm from 21
humMarkPos21Der<-humMarkPos21[humMarkPos21$chrRegion=="q",]
humMarkPos21Der$chrRegion<-"p"
# remove p arm from 13
humMarkPos13Der<-humMarkPos13[humMarkPos13$chrRegion=="q",]
# rename fragments
humMarkPos21Der$chrName<-"t(13;21)"
humMarkPos13Der$chrName<-"t(13;21)"
# merge fragments of Marks
humMarkPosDer<-rbind(humMarkPos21Der,humMarkPos13Der)
# Making derivative data.frame of chr. size
humChrDer<-humChr13
humChrDer$shortArmSize<-humChr21$longArmSize
humChrDer$chrName<-"t(13;21)"
# Make data.frame of chr. to plot
humChr1321der<-rbind(humChr13, humChrDer , humChr21)
humChr1321der<-humChr1321der[,c("chrName","shortArmSize","longArmSize"),]
# marks for them, together:
humMarkPos1321Der<-rbind(humMarkPos13, humMarkPos21, humMarkPosDer)
humMarkPos1321Der$OTU<-NULLplot of t(13;21)
plotIdiograms(humChr1321der, # data.frame of size of chr.
dfMarkPos = humMarkPos1321Der,# d.f of position of marks
dfMarkColor = humMarkColor, # d.f of style of marks
addOTUName = FALSE, # do not add OTU name
centromereSize=0, # apparent size of centromere
roundness=5, # roundness of vertices of chr. and marks
chrColor = "black", # chr. color
classChrName = "", # string for naming chr.
karHeight = 4, # karyotype height without spacing
chrIndex = "", # do not add chr. indices
morpho = "", # do not add chr. morphology
karIndex = FALSE, # do not add karyotype indices
distTextChr = 2, # distance from chr. to text.
markLabelSize = .5, # font size of chr. mark labels
legend = "inline", # mark labels next to chr.
pattern="chr[0-9]+", # REGEX pattern to remove from mark names
lwd.chr=.9, # width of chr and mark borders
ruler=FALSE,
ylimBotMod = -.15 # modify ylim bottom argument
,asp=1 # y x aspect ratio
)9.3 function robert
This procedure transforms the data of long arms of the chromosomes 13 and 14 from data.frames of chr. and marks in a derivative (Robertson, 1916).
We can do any Robertsonian translocation using:
chrt13q14q<-robert(humChr,humMarkPos,13,14,"q","q")
# which produces a list of two data.frames:
# 1. chr. sizes
dfChrSizeDer<-chrt13q14q$dfChrSizeDer
# remove the group column
dfChrSizeDer<-dfChrSizeDer[ , !(names(dfChrSizeDer) %in% "group")]
# 2. marks' positions
dfMarkPosDer<-chrt13q14q$dfMarkPosDer
head(dfMarkPosDer)| chrName | markName | chrRegion | markDistCen | markSize | OTU | |
|---|---|---|---|---|---|---|
| 613 | t(13;14)(q10:q10) | chr14q11.1 | p | 0.000 | 0.125 | otu3 |
| 713 | t(13;14)(q10:q10) | chr14q11.2 | p | 0.125 | 0.330 | otu3 |
| 813 | t(13;14)(q10:q10) | chr14q12 | p | 0.455 | 0.335 | otu3 |
| 913 | t(13;14)(q10:q10) | chr14q13 | p | 0.790 | 0.305 | otu3 |
| 1013 | t(13;14)(q10:q10) | chr14q21 | p | 1.095 | 0.600 | otu3 |
| 1113 | t(13;14)(q10:q10) | chr14q22 | p | 1.695 | 0.330 | otu3 |
plot of t(13;14)
par(mar=c(0,2,.5,0))
plotIdiograms(dfChrSizeDer, # data.frame of chromosome size
dfMarkPos = dfMarkPosDer, # df of mark positions
dfMarkColor = humMarkColor, # df of mark characteristics (in package)
addOTUName = FALSE, # do not add name of OTU
karIndex = FALSE, # do not add karyotype indices
morpho = "", # do not add morphological categories
chrIndex = "", # do not add chromosome indices
classChrName = "", # string for naming chr.
chrColor = "black", # chr. color
chrWidth = 1, # chromosome width
karHeight = 9, # kar. height without space
centromereSize = 0, # apparent centromere size
squareness = 7, # squareness of chr. and marks
markLabelSize = .5, # size of legend font
legend = "inline", # mark labels next to chr.
pattern= "chr[0-9XY]+", # REGEX pattern to remove from name of marks
distTextChr = 6, # distance from chr. to text.
indexIdTextSize = 2, # font size of chr name and indices
lwd.chr=.5, # width of chr and mark borders
colorBorderMark = "black", # force color of border of marks
ruler= FALSE
,xlimLeftMod = 4 # space to the right of karyotype
)10 Functions
Here you will find how to modify the characteristics of your plots. Default values in parentheses
10.1 Function plotIdiograms
Karyotypes
dfChrSize: mandatory data.frame, with columns: OTU (optional), chrName (mandatory), shortArmSize, longArmSize for monocen. or chrSize for holocen.
defaultFontFamily: character. use this as the font family. No default value.
revOTUs: (FALSE) If TRUE, reverses the order of OTUs in data.frame dfChrSize
verticalPlot: boolean, when TRUE karyotypes are plotted vertically, otherwise, horizontally. Defaults to TRUE
karHeight: (2) Vertical size of karyotypes considering only chromosomes. for ex karHeight = 1
karHeiSpace: (2.5) Vertical size of karyotypes including spacer. for ex karHeiSpace = 1.2
karSpaceHor: numeric, separation among horizontal karyotypes. When verticalPlot=FALSE. Defaults to 0
karSepar: (TRUE) If TRUE reduces the space among karyotypes. FALSE = equally sized karyotypes or TRUE = equally spaced karyotypes. Incompatible with addMissingOTUAfter
amoSepar: (9) For karSepar = TRUE, if zero, no space among karyotypes. Amount of separation. if overlap, increase this and karHeiSpace
addMissingOTUAfter: (NA) character vector, Pass to this parameter a vector of OTUs after which empty spaces (ghost karyotypes) must be added. See missOUTspacings and the phylogeny chapter
missOTUspacings: (0) numeric vector. With the same length of addMissingOTUAfter. Pass to this parameter the number of ghost karyotypes following the OTUs passed to addMissingOTUAfter. See the phylogeny chapter
moveKarHor: character, OTUs’ names of karyotypes that should be moved horizontally. See mkhValue
mkhValue: numeric, value to move kar. hor. See moveKarHor
karAnchorLeft: character, OTUs’ names of karyotypes to the right of your desired anchor. For verticalPlot=FALSE
moveAllKarValueHor: numeric, similar to mkhValue, but affects all karyotypes.
moveAllKarValueY: numeric, similar to moveAllKarValueHor, but affects y axis.
n: (50) numeric, number of vertices for the rounded corners
propWidth: boolean, defaults to FALSE. Diminishes chr. width with increasing number of OTUs. For backwards compatibility
Indices
chrIndex: ("both") character, add arm ratio with "AR" and centromeric index with "CI", or "both" (Default), or "" for none to each chromosome (Levan et al., 1964). See armRatioCIalso.
chrSize: boolean, when TRUE adds total chr size under each chr. Defautls to FALSE
chrNameUp: boolean, when TRUE adds secondary chromosome name from col. chrNameUp over chrs. Defaults to FALSE
nsmall: numeric, rounding decimals for chrSize parameter. Defaults to 1
chrSizeMbp: boolean, when TRUE adds total Mbp chr. size to each chr. provided, there is a Mbp column in dfChrSize data.frame. Defaults to FALSE. If data in columns shortArmSize, or col. chrSize is in millions (“Mbp”). Use chrSize=TRUE not this one (not column Mbp, you don’t need this).
morpho: ("both") character, if "both" (default) prints the Guerra (1986) and Levan (1964) classif. of cen. position. , use also "Guerra" or "Levan" or "" for none. See ?armRatioCI also (function).
nameChrIndexPos: (2) Modify position of name (CI, AR) of chr. indices, numeric value.
karIndex: (TRUE) boolean. Adds karyotype indices A (intra - cen) and A2 (inter - size) (Romero-Zarco, 1986; Watanabe et al., 1999). Disable with karIndex = FALSE
karIndexPos: (0.5) numeric. Modify position of karyotype indices, to the left or right
indexIdTextSize: font size of chr. and kar. indices and chromosome name
distTextChr: Vertical distance from indices (text) to the chromosome.
markPer: character, name of mark to calculate % of mark in chr. and add it to plot. See perAsFraction
perAsFraction: boolean, when TRUE % is shown as fraction. Defaults to FALSE. See markPer
showMarkPos: boolean, adds position of marks under karyotype (fraction 0-1) when TRUE. Defaults to FALSE
bToRemove: character, bands to remove from calc. of pos.
Anchor
anchor: boolean, when TRUE, plots a parent progeny structure in karyotypes in moveKarHor
anchorVsizeF numeric, factor to modify vertical size of anchor 0.5 (default). Size itself is equal to karHeiSpace
moveAnchorV: numeric, displace anchor vertical portion to right or left. See anchor
moveAnchorH: numeric, displace anchor horizontal portion to right or left. See anchor
pchAnchor: numeric, symbol for anchor, see ?points and anchor
moveKarHor: character, OTUs’ names of karyotypes that should be moved horizontally. See mkhValue
mkhValue: numeric, value to move kar. hor. See moveKarHor
Notes
notes: data.frame with columns OTU and note for adding notes to each OTU, they appear to the right of the karyotype
leftNotes: data.frame with columns OTU and note for adding notes to each OTU, they appear to the left of the karyotype
leftNotesUp: data.frame, (to the left), similar to leftNotes, but intended for placement over kar.
notesTextSize: (0.4) numeric, font size of notes, see notes
notesPosX: (0.5) numeric, moves right notes in the x axis
leftNotesPosX: (0.5) numeric, moves left notes in the x axis
notesPosY: numeric, move right notes down or up (y axis)
leftNotesPosY: numeric, move left notes down or up (y axis)
noteFont: numeric 1 for normal, 2 for bold, 3 for italics, 4 for bold-italics. See notes
leftNoteFont: numeric 1 for normal, 2 for bold, 3 for italics, 4 for bold-italics. See leftNotes
leftNoteFontUp: numeric 1 for normal, 2 for bold, 3 for italics, 4 for bold-italics. See leftNotesUp
parseTypes: boolean, parse in notes the Citrus chr. types names. Creates subindex pos. for FL. Defaults to TRUE
parseStr2lang: bolean, parse string in notes with function str2lang(paste0("paste(",note,")") ) for ex: "italic('C. sinensis'), ' Author'". See notes, leftNotes,leftNotesUp.
Units
MbThreshold: (10000) numeric. If chrSize > 10000 will be considered Mb. See MbUnit
threshold: (35) This is the max. value allowed for the main two significative digits, otherwise scale will shrink. For example, after 35 μm (Default), apparent size will be 3.5 (not 35) and scale interval will change. See ceilingFactor: you may have to use -1 for it. Introduced in 1.13
MbUnit: (Mb) character, text of units of title when MbThreshold met and OTU not in specialOTUNames. Introduced in 1.13. See specialyTitle
yTitle: (μm) character, units for common title.
specialyTitle: character, title of ruler if OTU is in specialOTUNames. Will not apply if MbThreshold met. In that case use MbUnit
specialOTUNames: character vector, normally title of ruler is μm or Mb (big numbers). Use this param. to be able to put a different unit in ruler title. See specialyTitle
classMbName: character, name of “chromosome” when in Mbp. Defaults to "Pm". See MbUnit
classcMName: character, name of “chromosome” when OTU in specialOTUNames. Defaults to "L.G."
classChrName: character, name of “chromosome” when in micrometers (apparently). Defaults to "Chr.". See specialOTUnames, classMbName, classcMName
classChrNameUp: character, name of “chromosome” for col. "chrNameUp". Defaults to "Type"
classGroupName: character, name of groups. Defaults to ""
OTU names
addOTUName: (TRUE) If TRUE adds name of species (OTU) under karyotype
OTUTextSize: (1) font size of OTU names, except when OTUasNote=TRUE see notesTextSize
OTUfont: numeric, 1 for normal, 2 for bold, 3 for italics, 4 for bold-italics
OTUfamily: character, font family for OTU name.
OTUasNote: (FALSE) See also notes. If TRUE OTU name is written to the right, as notes.
Chromosomes
chrNameUp: boolean, when TRUE adds secondary chromosome name from col. chrNameUp over chrs. Defaults to FALSE
orderBySize: deprecated
roundness: deprecated, See squareness
orderChr: ("size") size sorts chromosomes from the largest to the smallest. Other options: original, name, group (requires group column)
chrId: ("original") If you want to rename chromosomes from 1 to n use chrId = "simple". For original names use chrId = "original". For no names use chrId = ""
chrIdPatternRem character, regex pattern to remove from chr. names
indexIdTextSize: (1) font size of chr. and kar. indices and chromosome name
distTextChr: (1) Vertical distance from name (text) of chromosome to the chromosome.
chrWidth: (0.5) Determines the width of chromosomes
chrSpacing: (0.5) Determines the horizontal spacing among chromosomes
chrColor: ("gray") Determines the color of chromosomes
squareness: (4) Make squared or rounded vertices for chromosomes. Smaller numbers = more rounded
lwd.chr: (0.5) thickness of border of chr., marks; ruler. Also thick of cM marks when lwd.cM absent
Groups
groupSepar: numeric, factor for affecting chr. spacing chrSpacing among groups. Defaults to 0.5
groupUp: boolean, when TRUE, when groups present, they appear over the chr. name. Defaults to FALSE
groupName boolean, when TRUE (default), shows group names. When FALSE only line
Centromeres
centromereSize: Apparent size of centromeres. Automatic when absent.
cenColor: Determines the color of centromeres. if GISH use NULL. Defaults to chrColor
fixCenBorder: boolean, when TRUE uses chrColor as centromere (and cen. mark) border color. See also cenColor, chrColor, colorBorderMark, borderOfWhiteMarks. No default value.
Chromatids
chromatids: boolean, when TRUE shows separated chromatids. Defaults to TRUE
arrowsBothChrt: boolean, when TRUE (default) (for chromatids=TRUE) shows upArrow, downArrow styles of marks in both chromatids when arrowsToSide=TRUE.
holocenNotAsChromatids: boolean, when TRUE and chromatids=TRUE does not plot holocen kar. with chromatids. Defaults to FALSE. A value of TRUE modifies excHoloFrArrToSide to TRUE always.
xModifier: numeric, for chromatids=TRUE, separation among chromatids
xModMonoHoloRate: numeric, factor to shrink xModifier for holocen. 5 means 5 times smaller (quotient).
Marks
dfMarkPos: pass to this argument the name of the data.frame of positions of marks. Currently includes GISH and centromeric marks (cen). See previous chapters. columns: OTU (opt), chrName, markName (name of site), chrRegion (for monocen. and opt for whole arm (w) in holocen.), markDistCen (for monocen.), markPos (for holocen.), markSize; column chrRegion: use p for short arm, q for long arm, cen for centromeric mark and w for whole chr. mark; column markDistCen: use distance from centromere to mark, not necessary for cen. marks (cen), w, p, q (when whole arm). See also param. markDistType
dfMarkColor: pass to this argument the name of the data.frame of marks characteristics, see previous chapters. Not mandatory for plotting marks. Specifying colors and style for marks (sites); columns: markName, markColor, style. style accepts: "square","squareLeft", "dots", "cM", "cMLeft","cenStyle", "upArrow", "downArrow". (if column style missing all (except 5S) are plotted as in param. defaultStyleMark). “cM” introduced in 1.13
roundness: Deprecated.
squareness: (4) Squared or rounded vertices when marks of the “square” style (defined in data.frame passed to dfMarkColor). Affects chromosomes also. Smaller numbers = more rounded
dfCenMarks: Only for centromereSize > 0, pass to this argument the name of data.frame of centromeric marks. Currently included in dfMarkPos. See previous chapters.
defaultStyleMark: character, default style of mark, only used when style column of dfMarkColor data.frame is missing or in absence of this data.frame. Use "square" (default),"squareLeft", "dots", "cM", "cMLeft","cenStyle", "upArrow", "downArrow".
markDistType: ("beg") If you measure your marks to the beginning of mark use markDistType = "beg", if to the center of the mark, use "cen".
origin: ("b") If you measure your mark from the bottom of chromosome use origin = "b", or "t" from top. Applies to holocentrics. (monocentrics marks are measured from centromere)
efZero: numeric, internal, numbers below this one will be considered as zero, for comparison purposes. Defaults to 1e-5
cMBeginCenter: boolean, start position of cM and cMLeft marks. If TRUE, starts in the center (width) of chr. . Defaults to FALSE
protruding: (0.2) numeric, when style of mark is “cM”, “upArrow”, “downArrow” (inline), fraction of chrWidth to stretch marker.
dotRoundCorr: numeric, to be deprecated, requires useXYfactor=TRUE corrects roundness of dots and vertices of chromosomes. When style of sites = dots, an increase in this, makes the horizontal radius of the dot smaller. Use asp=1 instead
useXYfactor : boolean, for backwards compatibility, for using dotRoundCorr. Defaults to FALSE
useOneDot: boolean, use one dot instead of two in style of marks dots. Defaults to FALSE
dotsAsOval: boolean, use oval instead of two dots in style of marks dots. Defaults to FALSE. See useOneDot. Not useful for chromatids=TRUE or circularPlot=TRUE
Color
mycolors: optional, character vector with colors’ names, which are associated automatically with marks according to their order in the data.frame of position of marks. See this ordering with unique(dfMarkPos$markName). Argument example: mycolors = c("red","chartreuse3","dodgerblue"). Not mandatory for plotting marks, package has default colors.
defCenStyleCol: character, color of outer part of cenStyle marks. Defaults to white
Borders
gishCenBorder: boolean, when TRUE, cen. mark border color is the same as mark color, ignoring colorBorderMark. No default.
hideCenLines: numeric, factor to multiply line width (lwd) used for covering cen. border, when chrColor is white or when gishCenBorder=TRUE
borderOfWhiteMarks: (TRUE) boolean, when TRUE uses black border for white marks. See dfMarkColor. Does not apply to marks with cenStyle
colorBorderMark: character, without default, pass a name of a color to use as border of marks. See borderOfWhiteMarks
fixCenBorder: boolean, when TRUE uses chrColor as centromere (and cen. mark) border color. See also cenColor, chrColor, colorBorderMark, borderOfWhiteMarks. No default value.
lwd.chr: (2) width of border lines for chr. and marks when related param. absent.
lwd.mimicCen: thickness of lines of cenStyle marks; affects only lateral borders. Defaults to lwd.chr
lwd.marks: thickness of most marks. Except cM marks and centr. related marks. See lwd.chr, lwd.cM
lwd.cM: thickness of cM marks. Defaults to lwd.chr
Arrows
excHoloFrArrToSide: boolean, when arrowsToSide=TRUE, excludes holocen. from this behaviour, plotting a centered arrow only.
arrowhead numeric, proportion of head of arrow (mark styles: upArrow,downArrow). Defaults to 0.3
shrinkArrow numeric, proportion, shrinks body of arrow. Defaults to 0.3333
arrowheadWidthShrink numeric, proportion, shrinks head of arrow. Defaults to 0.1
arrowsToSide boolean, when FALSE use a centered arrow, instead of an arrow next to chr. margins. Defaults to TRUE. See arrowsBothChrt
arrowsBothChrt: boolean, when TRUE (default) (for chromatids=TRUE) shows upArrow, downArrow styles of marks in both chromatids when arrowsToSide=TRUE.
cMBeginCenter: boolean, start position of cM and cMLeft marks. If TRUE, starts in the center (width) of chr. . Defaults to FALSE
protruding: (0.2) numeric, when style of mark is “cM”, “upArrow”, “downArrow” (inline), fraction of chrWidth to stretch marker.
Labels
This parameters have to do with the legends
pattern: ("") REGEX pattern to eliminate from the marks name when plotting. See human karyotype chapter for example.
legend: ("aside") If you wanto to plot the names of marks near each chromosome use legend = "inline", to the right of karyotypes use legend = "aside", otherwise use legend = "" for no legend. See markLabelSpacer
remSimiMarkLeg: boolean, when legend="aside", if you use pattern, you can have several marks with same name. When TRUE this remove this pseudoduplicates from legend. Be sure that this pseudoduplicates have the same color, otherwise you should use FALSE (default).
bannedMarkName: character, character string or vector with mark names to be removed from plot. Not the marks but the labels. See bannedMarkNameAside
bannedMarkNameAside: boolean, when TRUE and legend="inline", shows marks in bannedMarkName as legend="aside" would do. See bannedMarkName
forbiddenMark: character, character string or vector with mark names to be removed from plot. Not the marks but the labels.
legendWidth: (1.7) numeric, factor to modify the width of the square and dots of legend. For legend="aside".
legendHeight: (NA) numeric, factor to modify the height of the square and dots of legend. For legend="aside".
markLabelSize: (1) Determines the size of text of the legend.
markLabelSpacer: (1) When legend = "aside" determines the separation of legends from the karyotype right side
legendYcoord: numeric, modify Y position of legend when legend="aside"
markNewLine: character, character to split mark Names into different lines. Applies to square marks. Defaults to NA
mylheight: numeric, for markNewLine!=NA; is equivalent to lheight of par: “The line height multiplier. The height of a line of text (used to vertically space multi-line text) is found by multiplying the character height both by the current character expansion and by the line height multiplier.” Defaults to 0.7.
Rulers
ruler: (TRUE) When TRUE displays ruler to the left of karyotype, when FALSE shows no ruler
rulerPos: (-0.5) Absolute position of ruler, corresponds to “pos” argument of the function axis of R plots
rulerPosMod: Deprecated
ruler.tck: (-0.02) tick size of ruler, corresponds to “tck” argument of axis function
rulerNumberPos: (0.5) numeric, Modify position of numbers of ruler
rulerNumberSize: (1) Size of number’s font in ruler
rulerInterval: numeric, intervals in ruler. No default, automatic. Introduced in 1.13
rulerIntervalcM: numeric, intervals in ruler of OTU in specialOTUNames. No default. Introduced in 1.13
rulerIntervalMb: numeric, intervals in ruler of OTU with data in Mb (>MbThreshold) and absent from specialOTUNames. No default. Introduced in 1.13
ceilingFactor: (0) numeric, affects number of decimals for ceiling. Affects max. value of ruler. When threshold is greater than 35 this may have to be negative. Introduced in 1.13
xPosRulerTitle: (2.6) Modifies the horizontal position of the title of rulers (Mb, etc). Moves to left from 1st chr. in chrSpacing times
yPosRulerTitle: numeric, affects vertical position of ruler title. Defaults to 0
rulerTitleSize: Font size of units (title).
useMinorTicks: boolean, display minor ticks between labeled ticks in ruler. See miniTickFactor. Defaults to FALSE. (ticks without label)
miniTickFactor: numeric, number of minor ticks for each labeled tick. See useMinorTicks. Defaults to 10
Margins
You can establish margins with par as in any R plot, and also with this parameters. These works as a quick fix to increase desired size of plot when some elements are outside of margins:
xlimLeftMod: (1) modifies xlim left (first) component of the plot as in any “R-plot”
xlimRightMod: (2) xlim (right) modification by adding space to the right of idiograms
ylimBotMod: (0.2) modify ylim bottom component of plot adding more space
ylimTopMod: (0.2) modify ylim top component of plot adding more space.
callPlot: boolean, create new plot in your device. Defaults to TRUE
asp: numeric, y x aspect of plot. Defautls to 1
… accepts other arguments for the plot. See ?plot
Circular plot
circularPlot: boolean, if TRUE chromosomes are plotted in concentric circles. Defaults to FALSE. See verticalPlot
shrinkFactor: numeric, for circularPlot=TRUE percentage of usage of circle. Defaults to 0.9
separFactor: numeric, for circularPlot=TRUE modify separation of concentric karyotypes. Defaults to 1.5
labelSpacing: numeric, for circularPlot=TRUE. Spacing of mark labels. Defaults to 0.7
labelOutwards: boolean, inline labels projected outwards
chrLabelSpacing: numeric, for circularPlot=TRUE. Spacing of chr. labels. Defaults to 0.5
radius: numeric, for circularPlot=TRUE. Affects radius of karyotypes. Defaults to 0.5
rotation: numeric, anti-clockwise rotation, defaults to 0.5 which rotates first chr. from top to -90 degrees. (-0.5*π = 9 o’clock)
circleCenter: numeric, for circularPlot=TRUE. Affects coordinates of center of circles. Affects legend="aside" position.
circleCenterY: numeric, for circularPlot=TRUE. Affects coordinates of center of circles. Affects legend="aside" position.
10.2 Function robert
chr1: name of chr. See ?robert
chr2: name of chr. ?robert
arm1: arm of chr1 to be included ?robert
arm2: arm of chr2 to be included ?robert
10.3 Function genBankReadIF
filename.gb: name of file to read, downloaded from genBank, or name of genbank object produced with rentrez::entrez_fetch(db="nuccore", id="theID", rettype="gbwithparts", retmode = "text")
10.4 Function namesToColumns
marksDf: data.frame with columns: markName,style,markPos
dfChrSize: data.frame, size of chr. Same of plot.
markType: (c("downArrow","upArrow","cMLeft","cM")), character, mark to arrange in columns
amountofSpaces: (13) numeric, number of characters for each column
colNumber: (2) numeric, number of columns
protruding: (0.5) numeric, same as plot, minimal protruding for arrow marks, equivalent to cM protruding
protrudingInt: (0.5) numeric, spacing of columns in terms of width of chr. percent 1 = 100%. Defaults to 0.5
circularPlot: (TRUE) boolean, use TRUE for circular plots. Use FALSE otherwise
rotation: (0.5) numeric, same as plot, anti-clockwise rotation, defaults to 0.5 which rotates chr. from top to -90 degrees. (-0.5*π )
defaultStyleMark: ("square") character, if some data in column style missing fill with this one. Defaults to “square”
orderBySize: Deprecated
orderChr: (size) character, use same as plot.
halfModDown: (NA) numeric, for circ. plots, when plotting several chromosomes in a circular plot, using a small value 0.05 corrects for alignment problems of downArrows, cMLeft labels. Defaults to NA
halfModUp: (NA) numeric, for circ. plots, when plotting several chromosomes in a circular plot, using a small value 0.05 corrects for alignment problems of upArrows, cM labels. Defaults to NA
rotatMod: (0) numeric, for circ. plots, when rotation != 0 (diff.), corrects alignment of labels. Defaults to 0
10.5 Function citrusSize
A: number of A to calculate
B: number of B to calculate
C: number of C to calculate
D: number of D to calculate
E: number of E to calculate
F: number of F to calculate
FL: number of FL+ to calculate
FL0: number of FL0 to calculate
G: number of G to calculate
shortArm: for A to G (not FL)
longArm: for A to G (not FL)
shortArmFL: for FL
longArmFL: for FL
OTU: name of species
10.6 Function citrusMarkPos
chrSizeDf: data.frame created with citrusSize function
mSizePter: numeric, default size for P(short) ter (terminal) bands. 0.25 (default)
mSizeQter: numeric, default size for Q(long) ter (terminal) bands. 0.35 (default)
mSizePprox: numeric, default size for P prox (proximal) bands. 0.35 (default)
mOther: numeric, default size for other bands. 0.25 (default)
markName: character, default name of mark “CMA”, or “45S”, respectively. (citrusMarkPos,markOverCMA)
10.7 Function markOverCMA
markName: character, default name of mark “CMA”, or “45S”, respectively.
citrusMarkPosDF: data.frame, with CMA marks (markOverCMA)
chrType: character, defaults to “B”, chr. type to duplicate mark (markOverCMA)
chrName: character, defaults to “B”, chr. name to duplicate mark (markOverCMA)
chrRegion: character, arm, defaults to “p”. for mark duplication (markOverCMA)
10.8 Other functions
Use ?function
armRatioCI(dfChrSize)
swapChrRegionDfSizeAndMarks(dfChrSize, dfMarkPos, chrNamesToSwap)
asymmetry(dfChrSize)
asymmetryA2(dfChrSize)
11 Datasets
11.1 Chr. basic data Holo.
dfChrSizeHolo: Example data for holocentrics for 1 species
bigdfChrSizeHolo: Example data for holocentrics for several species, OTU
parentalAndHybHoloChrSize: Example data for holocentrics for several species, OTU
bigdfOfChrSize3Mb: Example data in Mb without chr. arms for three species, OTU
Format
data.frame with columns:
OTU grouping OTU (species), optional if only one OTU
chrName name of chromosome
chrSize size of chromosome, micrometers or Mb
group chromosome group, optional
chrNameUp optional name over kar.
Mbp optional name to show size in Mbp under kar., use only when chrSize is not in Mbp. To be used with chrSizeMbp=TRUE
11.2 Chr. basic data Monocen.
dfOfChrSize: Example data for monocentrics
bigdfOfChrSize: Example data for monocentrics for several species, OTU
humChr: Data for human karyotype, measured from Adler (1994)
allChrSizeSample: Example data for monocentrics for several species, OTU
parentalAndHybChrSize: Example data for monocentrics for GISH
traspadf: Example data for Tradescantia (Rhoeo) spathacea (Golczyk et al., 2005)
Format
data.frame with columns:
OTU species, optional if only one OTU (species)
chrName name of chromosome
shortArmSize size of short arm, micrometers
longArmSize size of long arm, micrometers
group chr group, optional
chrNameUp optional name over kar.
Mbp optional name to show size in Mbp, use only when shortArmSize is not in Mbp
11.3 Mark characteristics
Source: R/dfMarkStyle.R
style column does not apply to cen. marks, only color.
dfMarkColor: Example General data for marks NOT position
humMarkColor: human bands’ characteristics, from Adler (1994)
mydfMaColor: mark characteristics used in vignette of phylogeny
Format
dfMarkColor a data.frame with columns:
markName name of mark
markColor use R colors
style character, use square or dots, optional
protruding numeric, modifies aspect of cM/cMLeft marks, see parameter protruding in plotIdiograms, optional
11.4 Mark Positional data - Holocen.
Source: R/markdataholo.R
bigdfMarkPosHolo: Example data for mark position of holocentrics with column OTU
dfMarkPosHolo: Example data for mark position of holocentrics
dfAlloParentMarksHolo: Example data for mark position of GISH
bigdfOfMarks3Mb: Example data for mark position in Mb
Format
data.frame with columns:
OTU OTU, species, optional
chrName name of chromosome
markName name of mark
markPos position from bottom or top (see parameter origin in plotIdiograms)
markSize size of mark in micrometers or Mb
11.5 Mark Positional data - monocentrics
Source: R/markposDFs.R
bigdfOfMarks: Example data for mark position with column OTU
dfOfMarks: Example data for marks’ position
dfOfMarks2: Marks’ position including cen. marks
humMarkPos: human karyotype bands’ (marks) positions, measured from Adler (1994)
allMarksSample: Example data for marks’ position
dfAlloParentMarks: Example data for mark position of GISH of monocen.
traspaMarks: T. spathacea (Rhoeo) marks’ positions, from Golczyk et al. (2005)
Format
bigdfOfMarks a data.frame with columns:
OTU OTU, species, mandatory if in dfChrSize
chrName name of chromosome
markName name of mark
chrRegion use p for short arm, q for long arm, and cen for centromeric
markDistCen distance of mark to centromere (not for cen)
markSize size of mark (not for cen)
11.6 File eightSpIqtree.treefile
See chapter phylogeny (Nguyen et al., 2015)
11.7 File revBayesTutorial.tree
See chapter phylogeny (Höhna et al., 2017)
News
idiogramFISH 1.16.6
16-09-2020
- Support for F+ chr. types in citrus functions
- Horizontal arrange introduced
verticalPlot=FALSE - Horizontal anchor for karyotypes in
karAnchorLeft - Move all karyotypes
moveAllKarValueY,moveAllKarValueHor - Introducing more notes, over kar.,
leftNotesUp dotsAsOvalconvert dots style to one oval. not for circ. plots.useOneDotnow for regular plots (non-circular) also.- better plotting of white chr. in circular plots
- Fixed bug of dots size in circular plots
- Fixed bug of ruler of long arm.
- Fixed bug when chr. name FL
- Fixed bug when calculating mark size when NA - GISH
- Better plotting of white chr.
- square marks name splitting
param:
verticalPlot: boolean, whenTRUEkaryotypes are plotted vertically, otherwise, horizontally. Defaults toTRUEkarSpaceHor: numeric, separation among horizontal karyotypes. WhenverticalPlot=FALSE. Defaults to0karAnchorLeft: character, OTUs’ names of karyotypes to the right of your desired anchor. ForverticalPlot=FALSEmoveAllKarValueHor: numeric, similar tomkhValue, but affects all karyotypes.moveAllKarValueY: numeric, similar tomoveAllKarValueHor, but affects y axis.leftNotesUp: data.frame, (to the left), similar toleftNotes, but intended for placement over kar.leftNotesPosX: (0.5) numeric, moves left notes in the x axisnotesPosX: (0.5) numeric, moves right notes in the x axisnoteFont: numeric1for normal,2for bold,3for italics,4for bold-italics. SeenotesleftNoteFont: numeric1for normal,2for bold,3for italics,4for bold-italics. SeeleftNotesleftNoteFontUp: numeric1for normal,2for bold,3for italics,4for bold-italics. SeeleftNotesUpparseTypes: boolean, parse innotesthe Citrus chr. types names. Creates subindex pos. for FL.parseStr2lang: bolean, parse string innoteswith functionstr2lang(paste0("paste(",note,")") )for ex:"italic('C. sinensis'), ' Author'". Seenotes,leftNotes,leftNotesUp.gishCenBorder: boolean, whenTRUE, cen. mark border color is the same as mark color, ignoringcolorBorderMark. No default.hideCenLines: numeric, factor to multiply line width (lwd) used for covering cen. border, whenchrColoriswhiteor whengishCenBorder=TRUEmarkNewLine, character, character to split mark Names into different text lines. Applies tosquaremarks. Defaults toNAmylheight, numeric, formarkNewLine!=NA; is equivalent tolheightofpar: “The line height multiplier. The height of a line of text (used to vertically space multi-line text) is found by multiplying the character height both by the current character expansion and by the line height multiplier.” Defaults to0.7.bannedMarkNameAside: boolean, whenTRUEandlegend="inline", shows marks inbannedMarkNameaslegend="aside"would do. SeebannedMarkNameforbiddenMark: character, character string or vector with mark names to be removed from plot. Not the marks but the labels.lwd.marks: thickness of most marks. ExceptcMmarks and centr. related marks. Seelwd.chr,lwd.cMdotsAsOval: boolean, use oval instead of two dots in style of marksdots. Defaults toFALSE. SeeuseOneDot. Not useful forchromatids=TRUEorcircularPlot=TRUE
idiogramFISH 1.16.1
29-07-2020
squareLeftnew style of mark. assquarebut with legend to the left when inline.- minor ticks possible
- add mark % of chr. and position to plot.
- additional column
chrNameUpfor name over kar. - show chr. sizes in μm and Mbp under kar.
- when
OTUfont=3(italics), var. name present inside'is not shown in italics - added anchor structure for progenies, see GISH
notesLeftdeprecated pass data.frame toleftNotes- Better separation of groups
- FL+ chr. name now corrected in plot, previously FLNA
ylablinerenamed toxPosRulerTitle
param:
groupSepar: numeric, factor for affecting chr. spacingchrSpacingamong groups. Defaults to0.5useMinorTicks: boolean, display minor ticks between labeled ticks in ruler. SeeminiTickFactor. Defaults toFALSE. (ticks without label)miniTickFactor: numeric, number of minor ticks for each labeled tick. SeeuseMinorTicks. Defaults to10xPosRulerTitle: (2.6) Modifies the horizontal position of the title of rulers (Mb, etc). Moves to left from 1st chr. inchrSpacingtimesyPosRulerTitle: numeric, affects vertical position of ruler title. Defaults to0markPer: character, name of mark to calculate % of mark in chr. and add it to plot. SeeperAsFractionperAsFraction: boolean, whenTRUE% is shown as fraction. Defaults toFALSE. SeemarkPershowMarkPos: boolean, adds position of marks under karyotype (fraction 0-1) whenTRUE. Defaults toFALSEbToRemove: character, bands to remove from calc. of pos.chrSizeshow chr. size under karyo.chrNameUpuse col. of the same name to add secondary name over kar.classMbName“chromosome” name when in MbpclasscMName“chromosome” name when in cMclassChrName“chromosome” name when in μmclassChrNameUp“chromosome” namechrNameUpclassGroupNamename of title of groupsnsmalldigits for rounding ofchrSizechrSizeMbpshow chr. size Mbp requires col.MbpgroupName, hide or show group nameleftNotes, similar to notesleftNotesPosX, xleftNotesPosY, ymoveKarHor, move kar. to rightmkhValue, amount to move to rightanchor, display anchor for moveKarHor OTUsanchorVsizeFfactor to modify vertical size of anchormoveAnchorV, move anchor vertical portionmoveAnchorH, move anchor horizontal portionpchAnchor, symbol in anchorrulerPosModdeprecated
idiogramFISH 1.15.3
01-07-2020
main changes:
- Better plotting of GISH with chromatids
- change in messages when missing data
- chr. in groups are closer
- parsing of citrus names of chromosomes FL+ and FL0 automatic
- helper functions for plotting Citrus karyotypes:
citrusSize,citrusMarkPos,markOverCMA
param: (plotIdiograms)
efZerothreshold for checking if != 0orderChr, order of chr. ReplacesorderBySize- deprecated. Values =size,original,name,grouporderBySize- deprecatednotesLeftnote position to the left whenTRUEnotesPosYy axis modify notes positionchrIdPatternRemregex pattern to remove from chr. names
idiogramFISH 1.15.1
02-06-2020
- introducing ‘chromatids’
- new rounded style of centromere added (default).
- better naming of
wposition marks wheninline - changed logic of
cenStylecoloring
param:
chromatidsshow separated chromatidsholocenNotAsChromatidsdo not use chromatids in holocen.arrowsBothChrtprints arrow marks in both chromatidsexcHoloFrArrToSideexcludes holocentrics from arrowsToSide config.xModifierseparation among chromatidsxModMonoHoloRateshrink holocen. separ among chromatids with this quotient.remSimiMarkLegremove “duplicated” name of labels when presence of pseudoduplicates arising frompatternbannedMarkNameremove this mark name from labels (legends)defCenStyleColcolor for external part of marks withcenStyleroundedCenrounded centromerelwd.mimicCenline width forcenStylemarkssquarenessnew name forroundness(deprecated)
idiogramFISH 1.14.11
23-04-2020
genBankReadIFfunction, now allows duplicated field namescMLeftstyle of mark addedcMandcMLeftstyles are used asinlinetype oflegendfor arrows (upArrow,downArrow)- A new column
protrudingcan be added todfMarkColordata.frame to define aspect ofcMmarks namesToColumnsnew function to avoid overlap of mark names, for holoc. and monoc.
params (namesToColumns):
marksDfdata.frame of marksdfChrSizedata.frame, size of chr. same as plot.markTypeof type “downArrow”,“upArrow”,“cM”,“cMLeft”amountofSpacesnumeric, number of spaces for each columncolNumbernumeric, number of columnsprotrudingnumeric, same as plot, equivalent to cM protrudingprotrudingIntnumeric, spacing of columns in terms of width of chr. percent 1 = 100%.circularPlotsame as plotrotationsame as plotdefaultStyleMarkif some data in column style missing fill with this oneorderBySizesame as in plot.halfModUpwhen plotting several chromosomes in a circular plot, corrects for alignment problems of “upArrows”, “cM” labels.halfModDownwhen plotting several chromosomes in a circular plot, corrects for alignment problems of “downArrows”, “cMLeft” labels.rotatModfor circ. plots, when rotation diff. from0, corrects alignment of labels.
params:
cMBeginCentermodifies start position ofcMandcMLeftmarksarrowsToSidearrows are plotted near chr. margin
idiogramFISH 1.14.7
27-03-2020
- Compatibility with
rentrezdownloaded data - Better reading of
joinfrom genBank data - new styles of mark:
cenStyleto add constrictions anywhere;upArrow(clockwise in circular plot);downArrow(anti-clockwise in circular plot) - fixed bug when
legend="inline"in circular plots
params:
rulerTitleSize: Font size of units (title)arrowhead: proportion of head of arrow - lengthshrinkArrow: proportion to shrink body of arrow - widtharrowheadWidthShrink: proportion to shrink arrowhead - width
idiogramFISH 1.14.2
26-02-2020
- Introducing circular plots
circularPlot=TRUEand other params. for circular plot - function
genBankReadIFto read plasmid or prokaryote data. Uses tidyr.
- function
swapChrRegionDfSizeAndMarksto swap arm size and marks - tolerance when column
markSizeabsent
params:
legendYcoord: modify mark legend Y pos (for common plot also)callPlot: call plot.new or use your device (when FALSE)
params: (circularPlot=TRUE)
shrinkFactor: size of chr. in fraction of circleseparFactor: separ among kar.labelSpacing: among label and chr.chrLabelSpacing: chr. label spaceOTUlabelSpacing: OTU name spaceradius: radiusOTUsrt: angle of OTU name textOTUplacing: add number and legend instead of OTU nameuseOneDot: one dot instead of twocircleCenter: X coordinatecircleCenterY: Y coordinateOTULabelSpacerx: modify OTU name pos.OTULabelSpacery: modify OTU name pos.OTUcentered: OTU name centeredOTUjustif: OTU name justif.OTUlegendHeight: separ. of OTU names whenOTUplacing
idiogramFISH 1.13.8
05-02-2020
- Fixed bug when plotting several OTU with groups
- cen. marks allowed also when
centromereSize = 0 - improvement in automatic scale of ruler.
- Added the “cM” style of mark, with custom
protruding centromereSizeis automatic (when absent), as well asrulerInterval
params:
lwd.cM: thickness of cM marksOTUfont: style of font of OTU nameOTUfamily: font family for OTU nameslwd.chr: affects ruler too.defaultFontFamily: modify font of texts.- Custom default style of mark with
defaultStyleMark fixCenBorderaffects cen. marks also.chrBorderColorfor adding optionally chr. border color.cenColordefaults tochrColornow.colorBorderMarkforces custom color in border of marks.borderOfWhiteMarks, ifTRUE, when mark is white, its border is black.ceilingFactornumber of significative digits to consider when rounding ruler max. value.MbThresholdcreated (substitutesMbThresholds)- added option to modify ruler intervals for Mb, and cM independently with params:
rulerIntervalMb,rulerIntervalcM - other added parameters:
defaultStyleMark,protruding,ceilingFactor,rulerInterval,threshold,MbUnit,specialChrWidth,specialChrSpacing,specialOTUNames,specialyTitle - OTUs passed to
specialOTUNames, can have special:specialChrWidth,specialChrSpacing, andspecialyTitle. Useful for e.g. cM. - Allowed customization of ruler (
ceilingFactor,rulerInterval) - Allowed custom ruler title
MbUnit,specialyTitle,yTitle.yTitleis the common (micrometers).specialyTitleis for OTUs inspecialOTUNames(e.g. “cM”), andMbUnitwhen data in millions and OTU is not inspecialOTUNames
idiogramFISH 1.12.1
06-01-2020
- Fixed bug of absence of chr. indices when monocen. and holocen. together
- Added functionality to print each index separately
- Added functionality to print groups below chr. name
- DOI added
- minor vignette corrections
idiogramFISH 1.11.1
12 12 2019
- Added functionality for fixing y x aspect ratio (roundness proportion) using
asp = 1only - Use of
dotRoundCorrdiscouraged, requiresuseXYfactor = TRUE - Fixed misplacement of marks when
origin="t"ormarkDistType = "cen" - Added functionality for plotting karyotypes in micrometers and bases together, see monocen. vignette
idiogramFISH 1.9.1
29 11 2019
- Fixed bug when centromere=0 when several karyotypes
- Added rounded vertices for
centromere > 0 - Added functionality for plotting GISH.
idiogramFISH 1.8.3
14 11 2019
- Fixed dependencies
- Fixed size of dots of legend
idiogramFISH 1.8.1
29 10 2019
- Added parameters for adding notes to the right of karyotype.
- Improvement in messages when plotting.
idiogramFISH 1.7.1
20 10 2019
- Cen. marks don’t need another data.frame. Can be present in main marks data.frame
- Allowed dup. names for not ordered chr. names (and no marks)
idiogramFISH 1.6.3
13 10 2019
- More tolerance when allowing duplicated chr. names when no marks.
- Documentation changes, new examples.
idiogramFISH 1.6.1
02 10 2019
- Added support to plot monocen. and holocen. together
- Function
plotIdiogramsHolodeprecated
idiogramFISH 1.5.1
27 09 2019
- Added support to plot alongside phylogenies
- Allow some karyotypes to appear without indexes when error in long / short classif.
- Fixed bug in naming of OTUs.
- Vignettes corrections
- Fix references of packages in vignettes when package not installed.
- Added support for vignettes in devel. in R-32 bits
idiogramFISH 1.2.1
17 09 2019
- Fixed bug in armRatioCI that impacts all other functions.
- Added support for groups
- Added human karyotype
- Added rounded vertices when
centromereSize =0 - You don’t have to use dfMarkColor data.frame, is not mandatory now.
- You can use (optionally) a character vector to pass colors.
- Package has default colors now.
References
Adler D. 1994. Idiogram album. http://www.pathology.washington.edu/research/cytopages/idiograms/human/
Carvalho R, Soares Filho WS, Brasileiro-Vidal AC, Guerra M. 2005. The relationships among lemons, limes and citron: A chromosomal comparison Cytogenetic and Genome Research, 109(1-3): 276–282. https://doi.org/10.1159/000082410
da-Costa-Silva S, Mendes S, Régis T, Sampaio-Passos O, dos-Santos-Soares-Filho W, Pedrosa-Harand A. 2019. Cytogenetic Map of Pummelo and Chromosome Evolution of True Citrus Species and the Hybrid Sweet Orange Journal of Agricultural Science, 11(14): 148. https://doi.org/10.5539/jas.v11n14p148
da Costa Silva S, Mendes S, Soares Filho W dos S, Pedrosa-Harand A. 2015. Chromosome homologies between Citrus and Poncirus—the comparative cytogenetic map of mandarin (Citrus reticulata) Tree Genetics & Genomes, 11(1): 811. https://doi.org/10.1007/s11295-014-0811-4. http://link.springer.com/10.1007/s11295-014-0811-4
Golczyk H, Hasterok R, Joachimiak AJ. 2005. FISH-aimed karyotyping and characterization of Renner complexes in permanent heterozygote Rhoeo spathacea Genome, 48(1): 145–153. https://doi.org/10.1139/g04-093
Guerra M. 1986. Reviewing the chromosome nomenclature of Levan et al. Brazilian Journal of Genetics, 9(4): 741–743
Höhna S, Landis MJ, Heath TA. 2017. Phylogenetic inference using RevBayes Current Protocols in Bioinformatics, 2017(March): 6.16.1–6.16.34. https://doi.org/10.1002/cpbi.22
Levan A, Fredga K, Sandberg AA. 1964. Nomenclature for centromeric position on chromosomes Hereditas, 52(2): 201–220. https://doi.org/10.1111/j.1601-5223.1964.tb01953.x. https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1601-5223.1964.tb01953.x
Mendes S. 2016. Variabilidade Cariotípica da laranja-azeda (Citrus aurantium L.) e a origem do seu cariótipo heteromórfico In: Mapeamento citogenético em citrus: Análises evolutivas e integração com dados genômicos
Nguyen L-T, Schmidt HA, Haeseler A von, Minh BQ. 2015. IQ-TREE: a fast and effective stochastic algorithm for estimating maximum-likelihood phylogenies Molecular biology and evolution, 32(1): 268–274. https://doi.org/10.1093/molbev/msu300. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4271533/
Robertson WRB. 1916. Chromosome studies. I. Taxonomic relationships shown in the chromosomes of tettigidae and acrididae: V-shaped chromosomes and their significance in acrididae, locustidae, and gryllidae: Chromosomes and variation Journal of Morphology, 27(2): 179–331. https://onlinelibrary.wiley.com/doi/abs/10.1002/jmor.1050270202
Romero-Zarco C. 1986. A new method for estimating karyotype asymmetry Taxon, 35(3): 526–530. https://onlinelibrary.wiley.com/doi/abs/10.2307/1221906
Watanabe K, Yahara T, Denda T, Kosuge K. 1999. Chromosomal evolution in the genus Brachyscome (Asteraceae, Astereae): statistical tests regarding correlation between changes in karyotype and habit using phylogenetic information Journal of Plant Research, 112: 145–161. https://link.springer.com/article/10.1007/PL00013869
Yasuda K, Yahata M, Shigyo M, Matsumoto R, Yabuya T, Kunitake H. 2010. Identification of parental chromosomes in sexual intergeneric hybrid progenies between citrus cultivar ’Nanpu’ tangor and Citropsis schweinfurthii in the subfamily aurantioideae Journal of the Japanese Society for Horticultural Science, 79(2): 129–134. https://doi.org/10.2503/jjshs1.79.129
Yi KU, Kim HB, Song KJ. 2018. Karyotype diversity of Korean landrace mandarins by CMA banding pattern and rDNA loci Scientia Horticulturae, 228(July 2017): 26–32. https://doi.org/10.1016/j.scienta.2017.10.001. http://dx.doi.org/10.1016/j.scienta.2017.10.001
R-packages
Csárdi G. 2017. Crayon: Colored terminal output. R package version 1.3.4. https://CRAN.R-project.org/package=crayon
Kassambara A. 2019. Ggpubr: ’Ggplot2’ based publication ready plots. R package version 0.2.3. https://CRAN.R-project.org/package=ggpubr
R Core Team. 2019. R: A language and environment for statistical computing R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
Revell LJ. 2012. Phytools: An r package for phylogenetic comparative biology (and other things). Methods in Ecology and Evolution, 3: 217–223. https://besjournals.onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2011.00169.x
Roa F, PC Telles M. 2020. idiogramFISH: Idiograms with marks and karyotype indices Universidade Federal de Goiás, UFG, Goiânia. R-package. version 1.12.1. https://doi.org/10.5281/zenodo.3579417. https://ferroao.gitlab.io/manualidiogramfish/
Wickham H. 2011. The split-apply-combine strategy for data analysis Journal of Statistical Software, 40(1): 1–29. https://www.jstatsoft.org/article/view/v040i01
Wickham H. 2016. Ggplot2: Elegant graphics for data analysis Springer-Verlag New York. https://ggplot2.tidyverse.org
Wickham H, François R, Henry L, Müller K. 2019a. Dplyr: A grammar of data manipulation. R package version 0.8.3. https://CRAN.R-project.org/package=dplyr
Wickham H, Henry L. 2020. Tidyr: Tidy messy data. R package version 1.0.2. https://CRAN.R-project.org/package=tidyr
Wickham H, Hester J, Chang W. 2019b. Devtools: Tools to make developing r packages easier. R package version 2.2.1. https://CRAN.R-project.org/package=devtools
Winter DJ. 2017. rentrez: An r package for the ncbi eUtils api The R Journal, 9(2): 520–526
Yu G, Lam TT-Y, Zhu H, Guan Y. 2018. Two methods for mapping and visualizing associated data on phylogeny using ggtree. Molecular Biology and Evolution, 35(2): 3041–3043. https://doi.org/10.1093/molbev/msy194. https://academic.oup.com/mbe/article/35/12/3041/5142656
Documentation
Barnier J. 2020. Rmdformats: HTML output formats and templates for ’rmarkdown’ documents. R package version 0.3.7. https://CRAN.R-project.org/package=rmdformats
Temple Lang D, CRAN team. 2019. RCurl: General network (http/ftp/...) client interface for r. R package version 1.95-4.12. https://CRAN.R-project.org/package=RCurl
Wickham H, Bryan J. 2019. Usethis: Automate package and project setup. R package version 1.5.1. https://CRAN.R-project.org/package=usethis
Wickham H, Danenberg P, Eugster M. 2018. Roxygen2: In-line documentation for r. R package version 6.1.1. https://CRAN.R-project.org/package=roxygen2
Wickham H, Hesselberth J. 2019. Pkgdown: Make static html documentation for a package. R package version 1.4.1. https://CRAN.R-project.org/package=pkgdown
Xie Y. 2015. Dynamic documents with R and knitr Chapman; Hall/CRC, Boca Raton, Florida. ISBN 978-1498716963. https://yihui.org/knitr/
Xie Y. 2016. Bookdown: Authoring books and technical documents with R markdown Chapman; Hall/CRC, Boca Raton, Florida. ISBN 978-1138700109. https://github.com/rstudio/bookdown
Xie Y, Allaire JJ, Grolemund G. 2018. R markdown: The definitive guide Chapman; Hall/CRC, Boca Raton, Florida. ISBN 9781138359338. https://bookdown.org/yihui/rmarkdown
Yu G. 2019a. Rvcheck: R/package version check. R package version 0.1.6. https://CRAN.R-project.org/package=rvcheck
Yu G. 2019b. Badger: Badge for r package. R package version 0.0.6. https://CRAN.R-project.org/package=badger
Zhu H. 2019. KableExtra: Construct complex table with ’kable’ and pipe syntax. R package version 1.1.0. https://CRAN.R-project.org/package=kableExtra