
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.
 Github
 Github  
 Raw
3 Minimal examples 
link
 Raw
4 Plotting chromosomes 
link
 Raw
5 Multiple OTUs
link
 Raw
6 Changing units
link
 Raw
7 GISH
link
 Raw
8 Groups
link
 Raw
9 Circular Plots
link
 Raw
10 Plotting alongside phylogeny 
link
 Raw
11 Citrus
link
 Raw
12 Human Karyotype
link
 Raw
 Raw
3 Minimal examples 
link
 Raw
4 Plotting chromosomes 
link
 Raw
5 Multiple OTUs
link
 Raw
6 Changing units
link
 Raw
7 GISH
link
 Raw
8 Groups
link
 Raw
9 Circular Plots
link
 Raw
10 Plotting alongside phylogeny 
link
 Raw
11 Citrus
link
 Raw
12 Human Karyotype
link
 Raw
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")
IRkernel::installspec()
 
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.)
dfOfMarks2[which(dfOfMarks2$markName == "5S"), ]$markSize <- 0.8 # modif. of mark size
# column Mbp not for plotting purposes
dfOfChrSize$Mbp <- (dfOfChrSize$shortArmSize + dfOfChrSize$longArmSize) * 100
opar <- par(no.readonly = TRUE)      # make a copy of current settings if you want to restore them later
# 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
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 = -.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)
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 <- .25
monoholoMarks
   chrName markName chrRegion markSize markDistCen          OTU markPos
1        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()

Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.