Chapter 7 GISH


Jupyter interactive version:

Colab (online) Github   Raw
7 GISH link Raw


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
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
# We will use column note to add a note to the right of the karyotype of the 
# OTU in column OTU
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         # 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()

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(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 = 0      # vertical pos. of left down 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=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
                  ,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=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
    )
  } # hybrid