7 GISH

Jupyter interactive version:

7.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
1 Parental 1 1 3.2 4
2 Parental 1 4 1.5 2
3 Parental 1 5 4.8 6
4 Parental 1 6 6.1 7
8 Allopolyploid 1 3.2 4
9 Allopolyploid 2 4.5 5
10 Allopolyploid 3 2.0 3
11 Allopolyploid 4 1.5 2
12 Allopolyploid 5 4.8 6
13 Allopolyploid 6 6.1 7
5 Parental 2 1 3.2 4
6 Parental 2 2 4.5 5
7 Parental 2 3 2.0 3

Marks’ positions data

dfAlloParentMarks
OTU chrName markName chrRegion
1 Allopolyploid 1 Parental 2 qcen
17 Allopolyploid 1 Parental 1 pcen
16 Allopolyploid 1 Parental 1 p
2 Allopolyploid 1 Parental 2 q
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 1 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

We will use column note to add a note to the right of the karyotype of the OTU (column)

notesdf2<-read.table(text=
"           OTU                note
\"Parental 1\"     \"Parental One\"  
\"Parental 2\"     \"Parental Two\"  
\"Allopolyploid\"  Allopolyploid  ", header = TRUE, stringsAsFactors = FALSE, fill = TRUE)

7.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,
  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()

7.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 = 100            # separ. among chromatids
)
# dev.off()

7.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(citrusnanpu, citrusschwein)

  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 = TRUE,
    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 = FALSE       # do not add OTU names

    , lwd.chr = 1.6            # border width
    , lwd.marks = 1            # border width marks
    , gishCenBorder = TRUE     # 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

    , leftNotesTextSize = 1.3     # font size of notes
    , leftNotesUpTextSize = 1.3   # font size of notes

    , leftNotesPosX = 0      # horizontal pos. of left notes
    , leftNotesPosY = 0      # vertical pos. of left down notes

    , leftNotesUpPosX = 0    # horizontal pos. of left up notes
    , leftNotesUpPosY = 2    # vertical pos. of left up 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 = FALSE       # 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
    , leftNotesUpTextSize = 1.3   # font size of notes

    , leftNotesPosX = 0      # horizontal pos. of notes
    , leftNotesUpPosY = 2    # vertical pos. left up 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 = TRUE     # 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
  )
} # hybrid