The goal of idiogramFISH functions or shiny-app is to plot
karyotypes, plasmids and circular chr. having a set of data.frames for
chromosome data and optionally marks’ data (Roa
and PC Telles, 2021). Karyotypes can also be plotted in concentric
circles.
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).
Six styles of marks are
available: square (squareLeft), dots, cM (cMLeft), cenStyle, upArrow
(downArrow), exProtein (inProtein) (column style
in
dfMarkColor
data.frame); its legend (label) (parameter
legend
) can be drawn inline or to the right of karyotypes.
Three styles of centromere are available: rounded, triangle and
inProtein (cenFormat
parameter). Chromosome regions (column
chrRegion
in dfMarkPos
data.frame) for
monocentrics are p
, q
, cen
,
pcen
, qcen
. The last three cannot accommodate
most mark styles, but can be colored. The region w
can be
used both in monocentrics and holocentrics.
IdiogramFISH was written in R (R Core Team, 2019) and also uses crayon (Csárdi, 2017), tidyr (Wickham and Henry, 2020), plyr (Wickham, 2011) and dplyr packages (Wickham et al., 2019). 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), phytools (Revell, 2012), ggtree (Yu et al., 2018), ggplot2 (Wickham, 2016) and ggpubr (Kassambara, 2019) were used.
In addition, the shiny app runBoard()
uses shiny (Chang et al., 2021), shinydashboard (Chang and Borges Ribeiro, 2018),
rhandsontable (Owen, 2018), gtools
(Warnes et al., 2020) and
rclipboard (Bihorel, 2021).
docker pull fercyto/idiogramfish
# Run the image
docker run -d -p 8080:8080 fercyto/idiogramfish
In your internet browser go to localhost:8080
# Stop the container
docker ps
docker stop {container id}
install.packages("idiogramFISH")
Windows users: To avoid installation of packages in OneDrive
.libPaths("D:R/lib") # for example
.libPaths() # set or read libraries
To do that permanently: Search (magnifier) “environment variables”
and set R_LIBS_USER to D:\R\lib
(example)
Online:
Launch vignettes from R for the installed version:
library(idiogramFISH)
packageVersion("idiogramFISH")
browseVignettes("idiogramFISH")
To cite idiogramFISH in publications, please use:
Roa F, Telles M. idiogramFISH: Shiny app. Idiograms with Marks and Karyotype Indices. doi: 10.5281/zenodo.3579417
To write citation to file:
sink("idiogramFISH.bib")
toBibtex(citation("idiogramFISH"))
sink()
Fernando
Roa
Mariana PC
Telles
Each chapter has a jupyter
version. A jupyter notebook
seems an interactive vignette.
They are hosted in github
They can be accessed with google colab
to work
online.
Chapters can be accessed locally in your jupyter-lab
or
jupyter notebook
After installing jupyter, you can install the R kernel with:
install.packages("IRkernel")
::installspec() IRkernel
Attention windows users, might require the last R version to plot correctly.
library(idiogramFISH)
runBoard()
Shiny App in the cloud availability:
shinyapps.io
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.)
which(dfOfMarks2$markName == "5S"), ]$markSize <- 0.8 # modif. of mark size
dfOfMarks2[
# column Mbp not for plotting purposes
$Mbp <- (dfOfChrSize$shortArmSize + dfOfChrSize$longArmSize) * 100
dfOfChrSize
<- par(no.readonly = TRUE) # make a copy of current settings if you want to restore them later
opar # par(opar) # recover par
par(mar = rep(0, 4))
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 # ruler units (title) pos.
,
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()
dfOfChrSize
chrName | shortArmSize | longArmSize | Mbp |
---|---|---|---|
1 | 3 | 4 | 700 |
2 | 4 | 5 | 900 |
3 | 2 | 3 | 500 |
X | 1 | 2 | 300 |
dfMarkColor
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
.
dfOfMarks2
chrName | markName | chrRegion | markSize | markDistCen |
---|---|---|---|---|
1 | 5S | p | 0.8 | 0.5 |
1 | 45S | q | 1.0 | 0.5 |
X | 45S | p | NA | NA |
3 | DAPI | q | 1.0 | 1.0 |
1 | DAPI | cen | NA | NA |
X | CMA | cen | NA | NA |
library(idiogramFISH)
# column Mbp not for plotting purposes
$Mbp <- dfChrSizeHolo$chrSize * 100
dfChrSizeHolo
# 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 = -.4, # position of ruler
rulerNumberPos = .9, # position of numbers of rulers
xPosRulerTitle = 4.5 # ruler units (title) horizon. pos.
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 = 20 # separ. among chromatids
, )
# dev.off() # close svg()
dfChrSizeHolo
chrName | chrSize | Mbp |
---|---|---|
1 | 3 | 300 |
2 | 4 | 400 |
3 | 2 | 200 |
4 | 5 | 500 |
dfMarkColor
markName | markColor | style |
---|---|---|
5S | red | dots |
45S | chartreuse3 | square |
DAPI | blue | square |
CMA | darkgoldenrod1 | square |
dfMarkPosHolo
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 |
See vignettes for a circular version.
Merge data.frames with plyr (Wickham, 2011)
# chromsome data, if only 1 species, column OTU is optional
require(plyr)
$OTU <- "Species mono"
dfOfChrSize$OTU <- "Species holo"
dfChrSizeHolo
<- plyr::rbind.fill(dfOfChrSize, dfChrSizeHolo)
monoholoCS
$OTU <- "Species mono"
dfOfMarks2$OTU <- "Species holo"
dfMarkPosHolo
<- plyr::rbind.fill(dfOfMarks2, dfMarkPosHolo)
monoholoMarks which(monoholoMarks$markName == "5S"), ]$markSize <- .25
monoholoMarks[
monoholoMarks
chrName markName chrRegion markSize markDistCen OTU markPos1 1 5S p 0.25 0.5 Species mono NA
2 1 45S q 1.00 0.5 Species mono NA
3 X 45S p NA NA Species mono NA
4 3 DAPI q 1.00 1.0 Species mono NA
5 1 DAPI cen NA NA Species mono NA
6 X CMA cen NA NA Species mono NA
7 3 5S <NA> 0.25 NA Species holo 1.0
8 3 DAPI <NA> 0.50 NA Species holo 1.5
9 1 45S <NA> 0.50 NA Species holo 2.0
10 2 DAPI <NA> 0.50 NA Species holo 2.0
11 4 CMA <NA> 0.50 NA Species holo 2.0
12 4 5S <NA> 0.25 NA Species holo 0.5
library(idiogramFISH)
# svg("testing.svg",width=10,height=6 )
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
addOTUName = TRUE, # add OTU names
OTUTextSize = .7, # font size of OTU
distTextChr = 0.7, # 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 = 4, # ruler units (title) pos.
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 = TRUE # do not show separ. chromatids
, autoCenSize = FALSE,
, centromereSize = 0.5
# for Circular Plot, add:
# ,useOneDot=FALSE # two dots
# ,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 = -0.6 # modify position of OTU label, when OTUplacing="number" or "simple"
# ,OTUlegendHeight = 1.5 # space among OTU names when in legend - OTUplacing
# ,separFactor = 0.75 # alter separ. of kar.
)
# dev.off() # close svg()