--- title: "LinkageMapView Examples" author: "Lisa A. Ouellette" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{LinkageMapView Examples} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, echo = FALSE} knitr::opts_chunk$set(collapse=TRUE,comment="#>") ``` ## Introduction The **LinkageMapView** package produces linkage group maps and QTL maps from a variety of inputs. The output is a portable document format (PDF) and publication ready. There are many options for customizing the maps which will be reviewed in this vignette. ## Input ### Linkage group positions and loci names The first argument, **mapthis**, can be one of the following: - a file name. The file can be a text file or a comma delimited file. The first three columns should be in this order: - linkage group name - character - position - numeric - locus name at this position - character - a data frame with columns as described above. - a cross object from the **qtl** package. A data frame example: ```{r} library(LinkageMapView) data(carrot) head(carrot) ``` A cross object from the **qtl** package example: ```{r} library(qtl) data(hyper) class(hyper) summary(hyper) ``` The **mapthese** parameter is a vector of linkage groups from the input that you wish to print. The default prints all linkage groups in the input. You can print linkage groups in any order and you can print linkage groups more than once. ## PDF options The following PDF options can be specified and will be passed through to the PDF device. - **pdf.family** - the font family for all text. Default is "Helvetica". - **pdf.fg** - the foreground color (lines and text). Default is "black". - **pdf.bg** - the background color. Default is "transparent". - **pdf.pointsize** - default is 12. - **pdf.title** - the title for a PDF ONLY appears in the metadata and does not appear in the output itself. See main. - **pdf.width** - width of the output file in inches. - **pdf.height** - height of the output file in inches. Note that **pdf.width** and **pdf.height** will be calculated automatically if they are not specified. Continuing with the hyper cross object loaded above from the **qtl** package: ```{r} outfile = file.path(tempdir(), "hyper.pdf") lmv.linkage.plot(hyper,outfile,mapthese=c(1,4,6,15)) ``` ```{r, out.width = "680px",echo=FALSE} knitr::include_graphics("hyper.png") ``` ## Position and Locus Format Options If more than one locus name appears at the same position, the label is indented slightly to catch your eye. The parameter **maxcolsfordups** determines how many loci names will print on one line before going to subsequent lines. The default is 3. When multiple lines are required for all the labels at the same position, the labels are joined by a vertical line. The **roundpos** parameter, which defaults to 1, specifies how many positions after the decimal point should be printed for the locus position. Another parameter for handling multiple loci at the same position, is **dupnbr**. If TRUE, only the first locus name at a position will print with, "## more" afterwards, indicating the number of duplicate locus names at that position: ```{r} outfile = file.path(tempdir(), "hyper_dupnbr.pdf") lmv.linkage.plot(hyper,outfile,mapthese=c(1,4,6,15),dupnbr = TRUE) ``` ```{r, out.width = "680px",echo=FALSE} knitr::include_graphics("hyper_dupnbr.png") ``` There is another parameter, **showonly**, which can be used to specify the locus names to be printed. All other locus names and positions will not be printed. The next example will demonstrate the use of the **showonly** parameter along with loci and position formatting options. By default the positions print to the left of the linkage group and so the position format options begin with an 'l'. And by default the loci print to the right of the linkage group and so the loci format options begin with an 'r': - lcex - Default is par("cex") - lcol - Default is par("col") - lfont - Default is par("font") - rcex - Default is par("cex") - rcol - Default is par("col") - rfont - Default is par("font") See help for par, `?par`, for a full description of these defaults. In this example we will show only one locus per linkage group. The positions and locus will be printed at twice the normal magnification (**lcex**=2 and **rcex**=2), the positions will be green, the loci red, and the position font will be bold (2) and the loci font will be italic (3). ```{r} outfile = file.path(tempdir(), "hyper_showonly.pdf") lmv.linkage.plot(hyper,outfile,mapthese=c(1,4,6,15),lcol="green",lcex=2,lfont=2, rcol="red",rcex=2,rfont=3, showonly=c("D1Mit123","D4Mit80","D6Mit135","D15Mit156")) ``` ```{r, out.width = "680px",echo=FALSE} knitr::include_graphics("hyper_showonly.png") ``` Lines are still drawn across the linkage group to indicate all locus positions even though the labels are not shown. Note that the color of the line across the linkage group and to the loci name defaults to the color of the loci name. This default can be changed with **rsegcol**=FALSE which indicates the line across the linkage group and to the loci name should be the **pdf.fg** color instead. ## Main Title and Linkage Group Titles The **main** parameter is used for a title for the entire drawing and defaults to NULL. By default, each linkage group name is printed above the linkage group. To turn off linkage group names printing use **prtlgtitles=FALSE**. You can override the linkage group names to be printed by using the **lgtitles** parameter. The magnification, font and color of the linkage group titles and the main title can be adjusted with the following parameters: - **cex.lgtitle** - Default is par("cex.main") - **cex.main** - Default is par("cex.main") - **col.lgitle** - Default is par("col.main") - **col.main** - Default is par("col.main") - **font.lgtitle** - Default is par("font.main") - **font.main** - Default is par("font.main") ```{r} outfile = file.path(tempdir(), "hyper_titles.pdf") lmv.linkage.plot(hyper,outfile,mapthese=c(1,4,6,15),col.lgtitle = "blue",cex.lgtitle=2, col.main = "red",main="Overall Title for the Output Map") ``` ```{r, out.width = "680px",echo=FALSE} knitr::include_graphics("hyper_titles.png") ``` ## Quantitative Trait Loci (QTL) input There are two different ways to input QTL. 1. **qtldf** = a data frame containing these columns: - chr - Linkage group name for QTL. - qtl - Name (label) for QTL. - so - Start of outer interval. Numeric. - si - Start of inner interval. Numeric. - ei - End of inner interval. Numeric. - eo - End of outer interval. Numeric. - col - Color for QTL. 2. **qtlscanone** = scanone object from package r/qtl. If provided, all QTLs in the data frame will be drawn by calculating their start and end with the r/qtl function bayesint with defaults. The next example demonstrates several features in addition to **qtldf**. If you wish to use different colors or formats for different loci labels you can do so with the **markerformatlist** parameter, providing a list of loci and their desired format options. If you specify **ruler**=TRUE the positions will not be printed. Instead a vertical axis, or ruler, will be drawn on the left side of the page. You may also reverse the positions on a linkage group. Specify a vector of linkage group names using the **revthese** parameter. The 'chromosome' has various format options as well: - **lg.col** - color for the inside of the chromosome. The default is **pdf.bg**. - **lgw** - width of chromosome in inches. Default is 0.25 inches. - **lg.lwd** - linkage group line width. The width of the line around the chromosome. Defaults to par("lwd"). ```{r} ## plot a carrot comparative linkage map ## kindly provided by Massimo Iorizzo: ## Cavagnaro et al. BMC Genomics 2014, 15:1118 data(carrot) # make a df to pass qtl info qtldf <- data.frame( chr = character(), qtl = character(), so = numeric(), si = numeric(), ei = numeric(), eo = numeric(), col = character(), stringsAsFactors = FALSE ) qtldf <- rbind(qtldf, data.frame( chr = "70349LG3", qtl = "RTPE-Q1", so = 36.6, si = 37, ei = 37, eo = 38, col="red" )) # make a list to pass label options flist <- list() locus <- c("BSSR-094", "K0149", "K0627", "K2161", "ESSR-087", "ESSR-057") font <- c(2) #bold flist[[1]] <- list(locus = locus, font = font) locus <- c("F3H", "FLS1") font <- c(4) #bold italic flist[[2]] <- list(locus = locus, font = font) locus <- c("P3", "P1", "Raa1") font <- c(3) #italic col <- c("red") flist[[3]] <- list(locus = locus, font = font, col = col) outfile = file.path(tempdir(), "carrot.pdf") lmv.linkage.plot( carrot, outfile = outfile, ruler = TRUE, lgtitle = c("2170", "70349", "10117"), maxnbrcolsfordups = 2, markerformatlist = flist, lg.col = "lightblue1", pdf.height = 16, pdf.width = 10, revthese = c("70349LG3"), qtldf=qtldf ) ``` ```{r, out.width = "500px",echo=FALSE} knitr::include_graphics("carrot.png") ``` ## Density Maps and Ruler Customization The last example will illustrate producing a density map. There is a helper function, `?lmvdencolor` which you may use to provide your own color palette, window size and color bias. In this example the defaults are accepted and the **denmap**=TRUE parameter is specified. In addition, this example customizes the ruler (y axis). ```{r} ## do a density map with default colors and customize the axis data(oat) ## draw tickmarks at each cM from 0 to largest position of linkage groups to be drawn maxpos <- floor(max(oat$Position[oat$Group == "Mrg01" | oat$Group == "Mrg02"])) at.axis <- seq(0, maxpos) ## put labels on ruler at every 10 cM axlab <- vector() for (lab in 0:maxpos) { if (!lab %% 10) { axlab <- c(axlab, lab) } else { axlab <- c(axlab, NA) } } outfile = file.path(tempdir(), "oat_denmap.pdf") lmv.linkage.plot(oat,outfile,mapthese=c("Mrg01","Mrg02"),denmap=TRUE, cex.axis = 1, at.axis = at.axis, labels.axis = axlab) ``` ```{r, out.width = "120px",echo=FALSE} knitr::include_graphics("oat_denmap.png") ```