Title: | Graphics in the Context of Analyzing High-Throughput Data |
---|---|
Description: | Additional options for making graphics in the context of analyzing high-throughput data are available here. This includes automatic segmenting of the current device (eg window) to accommodate multiple new plots, automatic checking for optimal location of legends in plots, small histograms to insert as legends, histograms re-transforming axis labels to linear when plotting log2-transformed data, a violin-plot <doi:10.1080/00031305.1998.10480559> function for a wide variety of input-formats, principal components analysis (PCA) <doi:10.1080/14786440109462720> with bag-plots <doi:10.1080/00031305.1999.10474494> to highlight and compare the center areas for groups of samples, generic MA-plots (differential- versus average-value plots) <doi:10.1093/nar/30.4.e15>, staggered count plots and generation of mouse-over interactive html pages. |
Authors: | Wolfgang Raffelsberger [aut, cre] |
Maintainer: | Wolfgang Raffelsberger <[email protected]> |
License: | GPL-3 |
Version: | 1.3.8 |
Built: | 2024-11-25 17:46:24 UTC |
Source: | CRAN |
This function allows to add custom text as lables to points on standard xy-plot.
.addTextToPoints( x, paramLst = NULL, labels = NULL, cex = NULL, col = NULL, adj = "auto", callFrom = NULL, silent = FALSE, debug = FALSE )
.addTextToPoints( x, paramLst = NULL, labels = NULL, cex = NULL, col = NULL, adj = "auto", callFrom = NULL, silent = FALSE, debug = FALSE )
x |
(matrix, data.frame) coordinated of ponts on plot |
paramLst |
(list) additional parameters for plotting (priority over separate cex or col), otherwise names displayed will be taken from 'labels' or rownames of coordinates 'x' |
labels |
(character) the text to be displayed (has not priority over 'paramLst'), if nothing valid found numbers will be displayed |
cex |
(character) (numeric) size of text, as expansion factor (see also |
col |
(character or integer) use custom colors |
adj |
(character) values other than 0,0.5 or 1 will lead to 'auto' where text is displayed only to left of sufficient space available |
callFrom |
(character) allow easier tracking of messages produced |
silent |
(logical) suppress messages |
debug |
(logical) display additional messages for debugging |
This function make a plot and may retiurn an optional matrix of outlyer-data (depending on argument getOutL
)
prcomp
(used here for the PCA underneith) , princomp
, see the package FactoMineR for multiple plotting options or ways of combining categorical and numeric data
set.seed(2019); dat1 <- matrix(round(runif(30),2), ncol=2) plot(dat1) # traditional plot .addTextToPoints(dat1, labels=letters[1:nrow(dat1)])
set.seed(2019); dat1 <- matrix(round(runif(30),2), ncol=2) plot(dat1) # traditional plot .addTextToPoints(dat1, labels=letters[1:nrow(dat1)])
Search best corner of plot for placing for legend
This function aims to find best corner for plotting a legend.
.bestLegendLoc( dat, txtLen, txtHi, displayPlotSearch = FALSE, silent = TRUE, debug = FALSE, callFrom = NULL )
.bestLegendLoc( dat, txtLen, txtHi, displayPlotSearch = FALSE, silent = TRUE, debug = FALSE, callFrom = NULL )
dat |
(matrix, list or data.frame) main data of plot |
txtLen |
(numeric, length=1) |
txtHi |
(numeric, length=1) text height from graphics::strheight() (including inter-line) |
displayPlotSearch |
(logical) decide if lines to mark area where data is searched for legend should be drawn |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allows easier tracking of messages produced |
numeric vector with counts of umber of points expected to enter legend-location for each corner (ie legend-localization)
dat1 <- matrix(c(1:5,1,1:5,5), ncol=2) (legLoc <- .bestLegendLoc(dat1, txtLen=0.4, txtHi=28))
dat1 <- matrix(c(1:5,1,1:5,5), ncol=2) (legLoc <- .bestLegendLoc(dat1, txtLen=0.4, txtHi=28))
This function helps defining color-gradient based on p-Values. This fuction requires package RColorBrewer being installed
.colorByPvalue( x, br = NULL, col = NULL, asIndex = FALSE, silent = FALSE, debug = FALSE, callFrom = NULL )
.colorByPvalue( x, br = NULL, col = NULL, asIndex = FALSE, silent = FALSE, debug = FALSE, callFrom = NULL )
x |
(numeric) p-values (main input) |
br |
(numeric) custom breaks (used with cut) |
col |
custom colors (must be of length(br) -1) |
asIndex |
(logical) custom breaks (used with cut) |
silent |
(logical) suppress messages |
debug |
(logical) supplemental messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
This function retruns a color-gradient based on p-Values
(for PCA) plotPCAw
)
.colorByPvalue((1:10)/10)
.colorByPvalue((1:10)/10)
This function allows estimating size/distance of margin to edge of image (png) in pixel and return numeric vector.
.determFigMargPix(marg, res, callFrom = NULL, silent = FALSE, debug = FALSE)
.determFigMargPix(marg, res, callFrom = NULL, silent = FALSE, debug = FALSE)
marg |
(numeric) distance of margin in inch (as given in |
res |
(numeric, length=1) resolution of image (png) |
callFrom |
(character) allows easier tracking of messages produced |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
This function returns a numeric vetctor matrix with (estimated) distance to figure margins in pixels
convertPlotCoordPix
, mouseOverHtmlFile
.determFigMargPix(c(5,4,4,2),100)
.determFigMargPix(c(5,4,4,2),100)
This function transforms levels into index. This function has been depreciated, please use wrMisc::levIndex() insted.
.levIndex(dat, asSortedLevNa = FALSE)
.levIndex(dat, asSortedLevNa = FALSE)
dat |
(numeric) initial levels (main input) |
asSortedLevNa |
(logical) |
This function retruns a color-gradient based on p-Values
(for PCA) plotPCAw
)
library(wrMisc)
library(wrMisc)
This function allows predicting the pixel location of points of current plot. Note: may be imprecise in case of x or y with all same values.
.predPointsPix( x, y, dimPng, res, marg, fromTop = TRUE, scExt = 0.04, displ = FALSE, callFrom = NULL, silent = FALSE, debug = FALSE )
.predPointsPix( x, y, dimPng, res, marg, fromTop = TRUE, scExt = 0.04, displ = FALSE, callFrom = NULL, silent = FALSE, debug = FALSE )
x |
(numeric) initial coordinates for plot |
y |
(numeric) initial coordinates for plot |
dimPng |
(numeric, length=2) width and hight of png |
res |
(numeric, length=1) resultion of png |
marg |
(numeric, length=4) margins in inches (as given by |
fromTop |
(logical) default counting in html is from top |
scExt |
(numeric, length=1) extending scale (default at 0.04 ie 4 %) |
displ |
(logical) optional plot |
callFrom |
(character) allows easier tracking of messages produced |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
This function returns a numeric matrix with 2 columns 'xPix' and 'yPix' (with length(x) rows); and optionally a plot (if argument displ=TRUE
)
convertPlotCoordPix
, mouseOverHtmlFile
.predPointsPix(x=c(1,100), y=c(1,100), dimPng=c(700,600), res=200, marg=c(5,4,4,2))
.predPointsPix(x=c(1,100), y=c(1,100), dimPng=c(700,600), res=200, marg=c(5,4,4,2))
This function helps locating sample index from index or name of pair-wise comparisons
.sampNoDeMArrayLM( MArrayObj, useComp, groupSep = "-", lstMeans = "means", lstP = "BH", silent = FALSE, debug = FALSE, callFrom = NULL )
.sampNoDeMArrayLM( MArrayObj, useComp, groupSep = "-", lstMeans = "means", lstP = "BH", silent = FALSE, debug = FALSE, callFrom = NULL )
MArrayObj |
(MArray type objct) main input |
useComp |
(matrix) types of pair-wise comparisons to be performed |
groupSep |
(character) separator used with pair-wise grouping |
lstMeans |
(character) type of summarization, default is 'means' |
lstP |
(character) type of multiple testing correction data to choose from |
silent |
(logical) suppress messages |
debug |
(logical) supplemental messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
This function returns a integer vector of indexes
(for PCA) plotPCAw
)
aa <- 1:5
aa <- 1:5
Search Column Name
This function provides help when seraching column names
.serachColName( x, searchColNa, plusLowerCaps = TRUE, returnList = TRUE, silent = FALSE, debug = FALSE, callFrom = NULL )
.serachColName( x, searchColNa, plusLowerCaps = TRUE, returnList = TRUE, silent = FALSE, debug = FALSE, callFrom = NULL )
x |
(matrix or data.frame) main input |
searchColNa |
(character) |
plusLowerCaps |
(logical) add lower caps to search |
returnList |
(logical) |
silent |
(logical) suppress messages |
debug |
(logical) additional messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
integer vector with index of colnames found or list with $foundNa and $remainNa
convertPlotCoordPix
; use htmlSpecCharConv
to convert special characters for proper html display
mat1 <- matrix(1:6, ncol=3, dimnames=list(NULL, LETTERS[1:3])) .serachColName(mat1, c("C","F","A"))
mat1 <- matrix(1:6, ncol=3, dimnames=list(NULL, LETTERS[1:3])) .serachColName(mat1, c("C","F","A"))
This function adds a bagplot on an existing (scatter-)plot allowing to highlight the central area of the data.
Briefly, a bagplot is a bivariate boxplot, see Bagplot, following the basic idea of a boxplot in two dimensions.
Of course, multimodal distributions - if not separated first - may likely lead to mis-interpretation, similarly as it is known for interpreting boxplots.
If a group of data consists only of 2 data-points, they will be conected using a straight line.
It is recommended using transparent colors to highlight the core part of a group (if only 2 points are available, they will be conected using a straight line),
in addition, one could use the option to re-plot all (non-outlyer) points (arguments reCol
, rePch
and reCex
must be used).
addBagPlot( x, lev1 = 0.5, outCoef = 2, bagCol = NULL, bagCont = bagCol, bagLwd = 1.5, nCore = 4, outlCol = 2, outlPch = NULL, outlCex = 0.6, reCol = NULL, rePch = NULL, reCex = NULL, ctrPch = NULL, ctrCol = NULL, ctrCex = NULL, addSubTi = TRUE, returnOutL = FALSE, silent = TRUE, callFrom = NULL, debug = FALSE )
addBagPlot( x, lev1 = 0.5, outCoef = 2, bagCol = NULL, bagCont = bagCol, bagLwd = 1.5, nCore = 4, outlCol = 2, outlPch = NULL, outlCex = 0.6, reCol = NULL, rePch = NULL, reCex = NULL, ctrPch = NULL, ctrCol = NULL, ctrCex = NULL, addSubTi = TRUE, returnOutL = FALSE, silent = TRUE, callFrom = NULL, debug = FALSE )
x |
(matrix, list or data.frame) main numeric input of data/points to plot |
lev1 |
(numeric) min content of data for central area (default 0.5 for 50 percent) |
outCoef |
(numeric) parameter for defining outliers (equivalent to |
bagCol |
(character or integer) color for filling center part of bagplot (default light transparent grey); Note: It is highly suggested to use transparency, otherwise points underneith will be covered |
bagCont |
(character) color for inner and outer contours of bagplot |
bagLwd |
(numeric) line width for outer contour, set to |
nCore |
(integer) decide when center should be determined by median or mean: if number of points reach |
outlCol |
(character or integer) color for highlighting outlyers (for text and replottig outlyers points), set to |
outlPch |
(integer) symbol replotting highlighted outlyers (for text and replottig outlyers points), set to |
outlCex |
(numeric) cex type expansion factor for labels of highlighted outlyers, set to |
reCol |
(character or integer) color for replotting (non-outlyer) points, default set to |
rePch |
(integer) symbol for replotting (non-outlyer) points, default set to |
reCex |
(numeric) cex type expansion factor for lfor replotting (non-outlyer) points, default set to |
ctrPch |
(integer) symbol for showing group center (see also |
ctrCol |
(character or integer) color for group center symbol |
ctrCex |
(numeric) cex type expansion factor for size of group center (see also |
addSubTi |
(logical) decide if subtitle (stating that potential outlyers were displayed separatetly) should be added in plot |
returnOutL |
(logical) decide if rownames of (potential) outlyer values should be returned when running the function |
silent |
(logical) suppress messages |
callFrom |
(character) allow easier tracking of messages produced |
debug |
(logical) display additional messages for debugging |
The outlyer detection works similar to the one used in boxplot
: The distance of a given point is compared to the median distance of all points to their respective group-center plus
the 25 - 75 quantile-distance (of all points) times the multiplicative factor of argument outCoef
.
This function returns primarily a plot, optionally it may return of matrix with outlyers (if argument returnOutL=TRUE
)
set.seed(2020); dat1 <- matrix(round(rnorm(2000),3),ncol=2); rownames(dat1) <- 1:nrow(dat1) dat1 <- dat1 + 5*matrix(rep(c(0,1,1,0,0,0,1,1),nrow(dat1)/4), byrow=TRUE, ncol=2) col1 <- rgb(red=c(153,90,203,255), green=c(143,195,211,125), blue=c(204,186,78,115), alpha=90, maxColorValue=255) ## suppose we know the repartition into 4 subgroups which we would like to highlight them grp1 <- rep(1:4, nrow(dat1)/4) plot(dat1, col=grey(0.8), xlab="x", ylab="y", las=1, pch=grp1) for(i in 1:4) addBagPlot(dat1[which(grp1==i),], bagCol=col1[i]) ## slightly improved library(wrMisc) col2 <- convColorToTransp(col1, 255) plot(dat1, col=grey(0.8), xlab="x", ylab="y", las=1, pch=grp1) for(i in 1:4) addBagPlot(dat1[which(grp1==i),], bagCol=col1[i], outlPch=i, outlCol=col2[i], bagLwd=3)
set.seed(2020); dat1 <- matrix(round(rnorm(2000),3),ncol=2); rownames(dat1) <- 1:nrow(dat1) dat1 <- dat1 + 5*matrix(rep(c(0,1,1,0,0,0,1,1),nrow(dat1)/4), byrow=TRUE, ncol=2) col1 <- rgb(red=c(153,90,203,255), green=c(143,195,211,125), blue=c(204,186,78,115), alpha=90, maxColorValue=255) ## suppose we know the repartition into 4 subgroups which we would like to highlight them grp1 <- rep(1:4, nrow(dat1)/4) plot(dat1, col=grey(0.8), xlab="x", ylab="y", las=1, pch=grp1) for(i in 1:4) addBagPlot(dat1[which(grp1==i),], bagCol=col1[i]) ## slightly improved library(wrMisc) col2 <- convColorToTransp(col1, 255) plot(dat1, col=grey(0.8), xlab="x", ylab="y", las=1, pch=grp1) for(i in 1:4) addBagPlot(dat1[which(grp1==i),], bagCol=col1[i], outlPch=i, outlCol=col2[i], bagLwd=3)
This function tries to find the best location for placing a legend of a bivariate plot, ie scatter-plot.
All 4 corners of the data to plot are inspected for the least occupation by data plotted while displaying the content of sampleGrp
.
Alternatively, by setting the argument showLegend
the user-defined legend will be returned
checkForLegLoc( matr, sampleGrp = NULL, showLegend = TRUE, suplSpace = 4, testCorner = 1:4, silent = TRUE, debug = FALSE, callFrom = NULL )
checkForLegLoc( matr, sampleGrp = NULL, showLegend = TRUE, suplSpace = 4, testCorner = 1:4, silent = TRUE, debug = FALSE, callFrom = NULL )
matr |
(matrix, list or data.frame) main data of plot |
sampleGrp |
(character or factor) with this option the text to be displayed in the legend may be taken into consideration for its length |
showLegend |
(logical or character) decide if |
suplSpace |
(numeric) allows to consider extra room taken in legend by symbol and surrounding space, interpreted as n additional characters |
testCorner |
(integer) which corners should be considered (1=left-top, 2=right-top, right-bottom, left-bottom) |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allows easier tracking of messages produced |
list with $showL indicating if legend is desired and $loc for the proposition of the best location, $nConflicts gives the counts of conflicts
dat1 <- matrix(c(1:5,1,1:5,5), ncol=2) grp <- c("abc","efghijk") (legLoc <- checkForLegLoc(dat1, grp)) plot(dat1, cex=3) legend(legLoc$loc, legend=grp, text.col=2:3, pch=1, cex=0.8)
dat1 <- matrix(c(1:5,1,1:5,5), ncol=2) grp <- c("abc","efghijk") (legLoc <- checkForLegLoc(dat1, grp)) plot(dat1, cex=3) legend(legLoc$loc, legend=grp, text.col=2:3, pch=1, cex=0.8)
This function allows conversion the plotting positions ('x' and 'y' coordinates) of points in a given plot into coordinates in pixels (of the entire plotting region).
It was designed to be used as coordinates in an html file for mouse-over interactivity (display of names of points and links).
Of course, the size of the plotting region is crucial and may not be changed afterwards (if the plot is not written to file using png
etc).
In turn the function mouseOverHtmlFile
will use the pixel-coordinates, allowing to annotate given points of a plot for mouse-over interactive html.
convertPlotCoordPix( x, y, useMar = c(6.2, 4, 4, 2), plotDim = c(1400, 800), plotRes = 100, fromTop = TRUE, callFrom = NULL, silent = FALSE, debug = FALSE )
convertPlotCoordPix( x, y, useMar = c(6.2, 4, 4, 2), plotDim = c(1400, 800), plotRes = 100, fromTop = TRUE, callFrom = NULL, silent = FALSE, debug = FALSE )
x |
(numeric) initial plotting coordinates on x-axis, names of vector - if available- will be used as IDs |
y |
(numeric) initial plotting coordinates on y-axis |
useMar |
(numeric,length=4) margins defined with plot, see also |
plotDim |
(integer, length=2) dimension of the plotting device in pixels, see also |
plotRes |
(integer) resoltion of plotting device, see also |
fromTop |
(logical) toggle if poordinates should start from top |
callFrom |
(character) allows easier tracking of messages produced |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
matrix with x- and y-coordinates in pixels
df1 <- data.frame(id=letters[1:10], x=1:10, y=rep(5,10),mou=paste("point",letters[1:10]), link=file.path(tempdir(),paste0(LETTERS[1:10],".html")), stringsAsFactors=FALSE) ## Typically one wants to get pixel-coordinates for plots written to file. ## Here we'll use R's tempdir, later you may want to choose other locations pngFile <- file.path(tempdir(),"test01.png") png(pngFile, width=800, height=600, res=72) ## here we'll just plot a set of horiontal points at default parameters ... plot(df1[,2:3], las=1, main="test01") dev.off() ## Note: Special characters should be converted for proper display in html during mouse-over library(wrMisc) df1$mou <- htmlSpecCharConv(df1$mou) ## Let's add the x- and y-coordiates of the points in pixels to the data.frame df1 <- cbind(df1,convertPlotCoordPix(x=df1[,2], y=df1[,3], plotD=c(800,600),plotRes=72)) head(df1) ## using mouseOverHtmlFile() one could now make an html document with interactive ## display of names and clockable links to the coordinates we determined here ...
df1 <- data.frame(id=letters[1:10], x=1:10, y=rep(5,10),mou=paste("point",letters[1:10]), link=file.path(tempdir(),paste0(LETTERS[1:10],".html")), stringsAsFactors=FALSE) ## Typically one wants to get pixel-coordinates for plots written to file. ## Here we'll use R's tempdir, later you may want to choose other locations pngFile <- file.path(tempdir(),"test01.png") png(pngFile, width=800, height=600, res=72) ## here we'll just plot a set of horiontal points at default parameters ... plot(df1[,2:3], las=1, main="test01") dev.off() ## Note: Special characters should be converted for proper display in html during mouse-over library(wrMisc) df1$mou <- htmlSpecCharConv(df1$mou) ## Let's add the x- and y-coordiates of the points in pixels to the data.frame df1 <- cbind(df1,convertPlotCoordPix(x=df1[,2], y=df1[,3], plotD=c(800,600),plotRes=72)) head(df1) ## using mouseOverHtmlFile() one could now make an html document with interactive ## display of names and clockable links to the coordinates we determined here ...
Display data as sorted or cumulative frequency plot. This type of plot represents an alternative to plotting data as histograms.
Histograms are very universal and which are very intuitive. However,fine-tuning the bandwith (ie width of the bars) may be very delicate,
fine resultion details may often remain hidden.
One of the advanges of directly displaying all data-points is that subtile differences may be revealed easier, compared to calssical histograms.
Furthermore, the plot prensented her offeres more options to display multiple series of data simultaneaously.
Thus, this type of plot may be useful to compare eg results of data normalization.
Of course, with very large data-sets (eg > 3000 values) this gain of 'details' will be less important (compared to histograms) and will penalize speed.
In such cases the argument thisResol
will get useful as it allows to reduce the resultion and introduce binning.
Alternatively for very large data-sets one may looking into density-plots or vioplots (eg vioplotW
).
The argument CVlimit
allows optionally excluding extreme values.
If numeric (& > 2 columns), its value will be used exclExtrValues
to identify series with column-median > 'CVlimit'.
Of course, exclusion of extreme values should be done with great care, important features of the data may get lost.
cumFrqPlot( dat, cumSum = FALSE, exclCol = NULL, colNames = NULL, displColNa = TRUE, tit = NULL, xLim = NULL, yLim = NULL, xLab = NULL, yLab = NULL, col = NULL, CVlimit = NULL, thisResol = NULL, supTxtAdj = 0, supTxtYOffs = 0, useLog = "", silent = FALSE, debug = FALSE, callFrom = NULL )
cumFrqPlot( dat, cumSum = FALSE, exclCol = NULL, colNames = NULL, displColNa = TRUE, tit = NULL, xLim = NULL, yLim = NULL, xLab = NULL, yLab = NULL, col = NULL, CVlimit = NULL, thisResol = NULL, supTxtAdj = 0, supTxtYOffs = 0, useLog = "", silent = FALSE, debug = FALSE, callFrom = NULL )
dat |
(matrix or data.frame) data to plot/inspect |
cumSum |
(logical) for either plotting cumulates Sums (then |
exclCol |
(integer) columlns to exclude |
colNames |
(character) for alternative column/series names in display, as long as |
displColNa |
(logical) display column-names |
tit |
(character) custom title |
xLim |
(numeric) custom limit for x-axis (see also |
yLim |
(numeric) custom limit for y-axis (see also |
xLab |
(character) custom x-axis label |
yLab |
(character) custom y-axis label |
col |
(integer or character) custom colors |
CVlimit |
(numeric) for the tag 'outlier column' (uses |
thisResol |
(integer) resolution |
supTxtAdj |
(numeric) parameter |
supTxtYOffs |
(numeric) supplemental offset for text on y axis |
useLog |
(character) default="", otherwise for setting axis in log-scale "x", "y" or "xy" |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allows easier tracking of messages produced |
This function plots to the current garphical device
layout
, exclExtrValues
for decision of potential outliers; hist
, vioplotW
set.seed(2017); dat0 <- matrix(rnorm(500), ncol=5, dimnames=list(NULL,1:5)) cumFrqPlot(dat0, tit="Sorted values") cumFrqPlot(dat0, cumSum=TRUE, tit="Sum of sorted values")
set.seed(2017); dat0 <- matrix(rnorm(500), ncol=5, dimnames=list(NULL,1:5)) cumFrqPlot(dat0, tit="Sorted values") cumFrqPlot(dat0, cumSum=TRUE, tit="Sum of sorted values")
This function allows adding an arrow indicating a fold-change to MA- or Volcano-plots. When comparing mutiple concentratios of standards in benchmark-tests it may be useful to indicate the expected ratio in a pair-wise comparison. In case of main input as list or MArrayLM-object (as generated from limma), the colum-names of multiple pairwise comparisons can be used for extracting a numeric content (supposed as concentrations in sample-names) which will be used to determine the expected ratio used for plotting. Optionally the ratio used for plotting can be returned as numeric value.
foldChangeArrow( FC, useComp = 1, isLin = TRUE, asX = TRUE, col = 2, arr = c(0.005, 0.15), lwd = NULL, addText = c(line = -0.9, cex = 0.7, txt = "expected", loc = "toright"), returnRatio = FALSE, silent = FALSE, debug = FALSE, callFrom = NULL )
foldChangeArrow( FC, useComp = 1, isLin = TRUE, asX = TRUE, col = 2, arr = c(0.005, 0.15), lwd = NULL, addText = c(line = -0.9, cex = 0.7, txt = "expected", loc = "toright"), returnRatio = FALSE, silent = FALSE, debug = FALSE, callFrom = NULL )
FC |
(numeric, list or MArrayLM-object) main information for drawing arrow : either numeric value for fold-change/log2-ratio of object to search for colnames of statistical testing for extracting numeric part |
useComp |
(integer) only used in case FC is list or MArrayLM-object an has multiple pairwise-comparisons |
isLin |
(logical) inidicate if |
asX |
(logical) indicate if arrow should be on x-axis |
col |
(integer or character) custom color |
arr |
(numeric, length=2) start- and end-points of arrow (as relative to entire plot) |
lwd |
(numeric) line-width of arrow |
addText |
(logical or named vector) indicate if text explaining arrow should be displayed, use |
returnRatio |
(logical) return ratio |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allows easier tracking of messages produced |
#' @details The argument addText
also allows specifying a fixed position when using addText=c(loc="bottomleft")
, also bottomright, topleft, topright, toleft and toright may be used.
In this case the elemts side
and adjust
will be redefined to accomodate the text in the corner specified.
This function plots only an arrow onto current plotting device (and some explicative text), if returnRatio=TRUE
also returns numeric value for extracted ratio
plot(rnorm(20,1.5,0.1), 1:20) foldChangeArrow(FC=1.5)
plot(rnorm(20,1.5,0.1), 1:20) foldChangeArrow(FC=1.5)
This function proposes a few special tweaks to the general hist
function :
In a number of settings data are treated and plotted as log-data. This function allows feeding directly log2-data and displaying the x-axis
(re-translated) in linear scale (see argument isLog
).
The default settings allow making (very) small histograms ('low resolution'), which may be used as a rough overview of bandwidth and distribution of values in dat
.
Similar to hist
, by changing the parameters nBars
and/or breaks
very 'high resolution' histograms can be produced.
By default it displays n per set of data (on the top of the figure).
Note that the argument for (costom) title main
is now called tit
.
histW( dat, fileName = "histW", output = "screen", nBars = 8, breaks = NULL, tit = NULL, subTi = NULL, xLab = NULL, yLab = NULL, las = NULL, xcex = 0.7, imgxSize = 900, useCol = NULL, useBord = NULL, isLog = TRUE, cexSubTi = NULL, cropHist = TRUE, parDefault = TRUE, silent = FALSE, debug = FALSE, callFrom = NULL )
histW( dat, fileName = "histW", output = "screen", nBars = 8, breaks = NULL, tit = NULL, subTi = NULL, xLab = NULL, yLab = NULL, las = NULL, xcex = 0.7, imgxSize = 900, useCol = NULL, useBord = NULL, isLog = TRUE, cexSubTi = NULL, cropHist = TRUE, parDefault = TRUE, silent = FALSE, debug = FALSE, callFrom = NULL )
dat |
(matrix, list or data.frame) data to plot |
fileName |
(character) name of file for saving graphics |
output |
(character, length=1) options for output on 'screen' or saving image in various formats (set to 'jpg','png' or 'tif') |
nBars |
(integer) number of bars in histogram (default for 'low resolution' plot to give rough overview) |
breaks |
(integer) for (partial) compatibility with hist() : use only for number of breaks (or 'FD'), gets priority over 'nBars' |
tit |
(character) custom title |
subTi |
(character) may be |
xLab |
(character) custom x-axes label |
yLab |
(character) custom y-axes label |
las |
(integer) optional fixed text orientation of x-axis numbers : use 1 for horizontal and 2 for perpendicular, see also |
xcex |
(numeric) cex-type expansion factor for x-axis numbers, see also |
imgxSize |
(integer) width of image when saving to file, see also |
useCol |
(character or integer) custom colors, see also |
useBord |
(character) custom histogram elements border color, see also |
isLog |
(logical) for lin scale signal intensity values where repesentation needs log, assume log2 if |
cexSubTi |
(numerical) subtitle size (expansion factor cex), see also |
cropHist |
(logical) -not implemented yet- designed for cutting off bars with very low ('insignificant') values |
parDefault |
(logical) to automatic adjusting par(marg=,cex.axis=0.8), see also |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
This function produces a histogram type graphic (to the ccurrent graphical device)
set.seed(2016); dat1 <- round(c(rnorm(200,6,0.5),rlnorm(300,2,0.5),rnorm(100,17)),2) dat1 <- dat1[which(dat1 <50 & dat1 > 0.2)] histW(dat1, br="FD", isLog=FALSE) histW(log2(dat1), br="FD", isLog=TRUE) ## quick overview of distributions layout(partitionPlot(4)) for(i in 1:4) histW(iris[,i], isLog=FALSE, tit=colnames(iris)[i])
set.seed(2016); dat1 <- round(c(rnorm(200,6,0.5),rlnorm(300,2,0.5),rnorm(100,17)),2) dat1 <- dat1[which(dat1 <50 & dat1 > 0.2)] histW(dat1, br="FD", isLog=FALSE) histW(log2(dat1), br="FD", isLog=TRUE) ## quick overview of distributions layout(partitionPlot(4)) for(i in 1:4) histW(iris[,i], isLog=FALSE, tit=colnames(iris)[i])
To get a quick overview of the spatial distribution of smaller data-sets it may be useful to display numeric values as colored boxes.
Such an output may also be referred to as heatmap (note that the term 'heatmap' is frequently associated with graphical display of hierarchcal clustering results).
The function image
provides the basic support to do so (ie heatmap without rearranging rows and columns by clustering).
To do this more conveniently, the function imageW
offers additional options for displaying row- and column-names or displaying NA-values as custom-color.
imageW( data, latticeVersion = FALSE, transp = TRUE, NAcol = "grey95", tit = NULL, rowNa = NULL, colNa = NULL, xLab = NULL, yLab = NULL, xLabVal = NULL, yLabVal = NULL, las = 2, col = NULL, nColor = 9, balanceCol = TRUE, gridCol = "grey75", gridLty = 1, centColShift = 0, cexDispl = NULL, panel.background.col = "white", supLat = list(), rotXlab = 0, rotYlab = 0, cexTit = 1.6, cexAxs = NULL, cexXlab = 0.7, cexYlab = 0.9, showValues = FALSE, Xtck = 0, Ytck = 0, silent = FALSE, debug = FALSE, callFrom = NULL )
imageW( data, latticeVersion = FALSE, transp = TRUE, NAcol = "grey95", tit = NULL, rowNa = NULL, colNa = NULL, xLab = NULL, yLab = NULL, xLabVal = NULL, yLabVal = NULL, las = 2, col = NULL, nColor = 9, balanceCol = TRUE, gridCol = "grey75", gridLty = 1, centColShift = 0, cexDispl = NULL, panel.background.col = "white", supLat = list(), rotXlab = 0, rotYlab = 0, cexTit = 1.6, cexAxs = NULL, cexXlab = 0.7, cexYlab = 0.9, showValues = FALSE, Xtck = 0, Ytck = 0, silent = FALSE, debug = FALSE, callFrom = NULL )
data |
(matrix or data.frame) main input |
latticeVersion |
(logical) use lattice for plotting (this will include a color-legend) |
transp |
(logical) decide if data should get transposed (if |
NAcol |
(character or integer) custom color for NA-values, default is light grey |
tit |
(character) custom figure title |
rowNa |
(character) optional custom rownames |
colNa |
(character) optional custom colnames |
xLab |
(character, length=1) optional custom text for x-axis label (so far fixed color & fontsiez) |
yLab |
(character, length=1) optional custom text for y-axis label |
xLabVal |
(character) optional custom text for x-axis 'values' (multiple values/names instead of counters, replaces argument |
yLabVal |
(character) optional custom text for y-axis 'values' (multiple values/names instead of counters, replaces argument |
las |
(numeric) style of axis labels (see also |
col |
(character or integer) colors; in lattice version 2 or 3 color-names to define central- and end-points of gradient (starting with color for lowest values, optional central color and color for highest values), default is 60 shades 'RdYlBu' RColorBrewer, if 'heat.colors' use heat.colors in min 15 shades |
nColor |
(integer, only used in lattice version) number of color-blocks in color gradient (made based on central- and end-points from |
balanceCol |
(logical, only used in lattice version) if |
gridCol |
(character, only used in lattice version) define color of grid |
gridLty |
(integer, only used in lattice version) define line-type of grid (see also lty |
centColShift |
(integer, only used in lattice version) shift central (default grey) color element for negative scale up or down (ie increase or reduce number of color-blocks for negatve values), used for correcting automatic scaling rounding issues to ensure the central elements captures 0 |
cexDispl |
(numeric, length=1, only used in lattice version) define cex size for displaying (rounded) values in plot, set to |
panel.background.col |
(character, only used in lattice version) |
supLat |
(list, only used in lattice version) additional arguments/parameters passed to |
rotXlab |
(numeric, 0 - 360, lattice version only) control rotation of x-axis values |
rotYlab |
(numeric, 0 - 360, lattice version only) control rotation of y-axis values |
cexTit |
(numeric) cex-like expansion factor for title (see also |
cexAxs |
(numeric) cex-like expansion factor for x- and y-axis text/labels (see also |
cexXlab |
(numeric) cex-like expansion factor for x-axis labels (see also |
cexYlab |
(numeric) cex-like expansion factor for y-axis labels (see also |
showValues |
(logical or numeric) optional display of values from data, if contains eg |
Xtck |
(numeric or logical) expansion factor for length of tick-marks on x-axis (default=0 for no tick-marks) |
Ytck |
(numeric or logical) expansion factor for length of tick-marks on y-axis |
silent |
(logical) suppress messages |
debug |
(logical) additional messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
This function allows two modes of operation : 1) plotting using standard R -graphics or 2) using the framework of grid- and lattice-graphics (since version 1.2.6).
The latter version allows integrating a legend for the color-scale and adding grid-lines, rotation of axis-labels or removing tick-marks.
Please note that sometimes the center-color segment may not end up directly with the center of the scale, in this case you may adjust using the argument centColShift=-1
This function plots in image (to the current graphical device) as image
does
image
, for the lattice version levelplot
, heatmaps including hierarchical clustering heatmap
or heatmap.2
from package gplots
imageW(iris[1:40,1:4], transp=FALSE, tit="Iris (head)") imageW(iris[1:20,1:4], latticeVersion=TRUE, col=c("blue","red"), rotXlab=45, yLab="Observation no", tit="Iris (head)")
imageW(iris[1:40,1:4], transp=FALSE, tit="Iris (head)") imageW(iris[1:20,1:4], latticeVersion=TRUE, col=c("blue","red"), rotXlab=45, yLab="Observation no", tit="Iris (head)")
Add histogram at pleace of legend using colors from 'colorRamp'.
legendHist( x, colRamp = NULL, location = "bottomright", legTit = NULL, cex = 0.7, srt = 67, offS = NULL, border = TRUE, silent = FALSE, debug = FALSE, callFrom = NULL )
legendHist( x, colRamp = NULL, location = "bottomright", legTit = NULL, cex = 0.7, srt = 67, offS = NULL, border = TRUE, silent = FALSE, debug = FALSE, callFrom = NULL )
x |
(numeric) main input/component of plot |
colRamp |
(character or integer) set of colors, default is rainbow-like |
location |
(character) for location of histogram inside existing plot (may be 'br','bl','tl','tr','bottomright', 'bottomleft','topleft','topright') |
legTit |
(character, length=1) optional title for histogram-insert |
cex |
(numeric) expansion factor (see also |
srt |
(numeric) angle for histogram text labels (90 will give vertical label) (see also |
offS |
( |
border |
(logical) decide of draw gray rectangle or not around legend |
silent |
(logical) suppress messages |
debug |
(logical) display additional messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
This function produces a histogram on the current plottig device
dat <- rnorm(90); plot(dat) legendHist(dat, col=1:5)
dat <- rnorm(90); plot(dat) legendHist(dat, col=1:5)
This type of plot for display of relative changes versus (mean) absolute abundance is very common in high-throughput biology, see MA-plot.
Basically one compares two independent series of measures (ie gene transcript or protein abundance values) of 2 samples/data-sets or the means of 2 groups of replicates.
And the log-fold-change ('Minus'=M) is plotted againts the absolute mean value ('Average'=A).
Furthermore, output from statistical testing by moderTest2grp
or moderTestXgrp
can be directly read to produce MA plots for diagnostic purpose.
Please note, that plotting a very high number of points in transparency (eg >10000) may take several seconds.
MAplotW( Mvalue, Avalue = NULL, useComp = 1, filtFin = NULL, ProjNa = NULL, FCthrs = NULL, subTxt = NULL, grayIncrem = TRUE, col = NULL, pch = 16, compNa = NULL, batchFig = FALSE, cexMa = 1.8, cexLa = 1.1, limM = NULL, limA = NULL, annotColumn = c("SpecType", "GeneName", "EntryName", "Accession", "Species", "Contam"), annColor = NULL, cexPt = NULL, cexSub = NULL, cexTxLab = 0.7, namesNBest = NULL, NbestCol = 1, NaSpecTypeAsContam = TRUE, useMar = c(6.2, 4, 4, 2), returnData = FALSE, callFrom = NULL, silent = FALSE, debug = FALSE )
MAplotW( Mvalue, Avalue = NULL, useComp = 1, filtFin = NULL, ProjNa = NULL, FCthrs = NULL, subTxt = NULL, grayIncrem = TRUE, col = NULL, pch = 16, compNa = NULL, batchFig = FALSE, cexMa = 1.8, cexLa = 1.1, limM = NULL, limA = NULL, annotColumn = c("SpecType", "GeneName", "EntryName", "Accession", "Species", "Contam"), annColor = NULL, cexPt = NULL, cexSub = NULL, cexTxLab = 0.7, namesNBest = NULL, NbestCol = 1, NaSpecTypeAsContam = TRUE, useMar = c(6.2, 4, 4, 2), returnData = FALSE, callFrom = NULL, silent = FALSE, debug = FALSE )
Mvalue |
(numeric, list or MArrayLM-object) main data to plot; if numeric, the content will be used as M-values (and A-values must be provided separateley);
if list or MArrayLM-object, it must conatin list-elements named |
Avalue |
(numeric, list or data.frame) if |
useComp |
(integer) choice of one of multiple comparisons present in |
filtFin |
(matrix or logical) The data may get filtered before plotting: If |
ProjNa |
(character) custom title |
FCthrs |
(numeric) Fold-Change threshold (display as line) give as Fold-change and NOT log2(FC) |
subTxt |
(character) custom sub-title |
grayIncrem |
(logical) if |
col |
(character) custom color(s) for points of plot (see also |
pch |
(integer) type of symbol(s) to plot (default=16) (see also |
compNa |
depreciated, please use |
batchFig |
(logical) if |
cexMa |
(numeric) font-size of title, as expansion factor (see also |
cexLa |
(numeric) size of axis-labels, as expansion factor (see also |
limM |
(numeric, length=2) range of axis M-values |
limA |
(numeric, length=2) range of axis A-values |
annotColumn |
(character) column names of annotation to be extracted (only if |
annColor |
(character or integer) colors for specific groups of annotation (only if |
cexPt |
(numeric) size of points, as expansion factor (see also |
cexSub |
(numeric) size of subtitle, as expansion factor (see also |
cexTxLab |
(numeric) size of text-labels for points, as expansion factor (see also |
namesNBest |
(integer or character, length=1) number of best points to add names in figure; if 'passThr' all points passing FC-filter will be selected;
if the initial object |
NbestCol |
(character or integer) colors for text-labels of best points |
NaSpecTypeAsContam |
(logical) consider lines/proteins with |
useMar |
(numeric,length=4) custom margings (see also |
returnData |
(logical) optional returning data.frame with (ID, Mvalue, Avalue, FDRvalue, passFilt) |
callFrom |
(character) allow easier tracking of messages produced |
silent |
(logical) suppress messages |
debug |
(logical) additional messages for debugging |
This function plots an MA-plot (to the current graphical device); if returnData=TRUE
, a data.frame with ($ID, $Mvalue, $Avalue, $FDRvalue, $passFilt) gets returned
(for PCA) plotPCAw
library(wrMisc) set.seed(2005); mat <- matrix(round(runif(600),2), ncol=6) rownames(mat) <- c(rep(letters[1:25],each=3), letters[2:26]) MAplotW(mat[,2] -mat[,1], A=rowMeans(mat)) ## assume 2 groups with 3 samples each matMeans <- rowGrpMeans(mat, gr=gl(2,3,labels=LETTERS[3:4])) MAplotW(M=matMeans[,2] -matMeans[,1], A=matMeans) ## assume 2 groups with 3 samples each and run moderated t-test (from package 'limma') tRes <- moderTest2grp(mat, gl(2,3)) MAplotW(tRes$Mval, tRes$Amean) MAplotW(M=tRes$Mval, A=tRes$means, FCth=1.3) MAplotW(tRes) MAplotW(tRes, limM=c(-2,2), FCth=1.3)
library(wrMisc) set.seed(2005); mat <- matrix(round(runif(600),2), ncol=6) rownames(mat) <- c(rep(letters[1:25],each=3), letters[2:26]) MAplotW(mat[,2] -mat[,1], A=rowMeans(mat)) ## assume 2 groups with 3 samples each matMeans <- rowGrpMeans(mat, gr=gl(2,3,labels=LETTERS[3:4])) MAplotW(M=matMeans[,2] -matMeans[,1], A=matMeans) ## assume 2 groups with 3 samples each and run moderated t-test (from package 'limma') tRes <- moderTest2grp(mat, gl(2,3)) MAplotW(tRes$Mval, tRes$Amean) MAplotW(M=tRes$Mval, A=tRes$means, FCth=1.3) MAplotW(tRes) MAplotW(tRes, limM=c(-2,2), FCth=1.3)
This function allows generating html pages with interactive mouse-over to display information for the points of the plot and www-links when clicking based on embedded png file.
Basically, an html page will be generated which contains a call to display to an image file specified in pngFileNa
and in the body below pixel-coordinated will be
given for disply of information at mouse-over and embedded links.
mouseOverHtmlFile( myCoor, pngFileNa, HtmFileNa = NULL, mouseOverTxt = NULL, displSi = c(800, 600), colNa = NULL, tit = "", myHtmTit = "", myComment = NULL, textAtStart = NULL, textAtEnd = NULL, pxDiam = 5, addLinks = NULL, linkExt = NULL, htmlExt = "htm", callFrom = NULL, silent = FALSE, debug = FALSE )
mouseOverHtmlFile( myCoor, pngFileNa, HtmFileNa = NULL, mouseOverTxt = NULL, displSi = c(800, 600), colNa = NULL, tit = "", myHtmTit = "", myComment = NULL, textAtStart = NULL, textAtEnd = NULL, pxDiam = 5, addLinks = NULL, linkExt = NULL, htmlExt = "htm", callFrom = NULL, silent = FALSE, debug = FALSE )
myCoor |
(matrix or data.frame) with initial x&y coordinates of points for plot; with IDs (1st column !!) & coordinates (2nd & 3rd col), data for mouse-over & link (4th & 5th); NOTE : if 'colNa' NOT given, colnames of 'myCoor' will be inspected & filtered (columns of non-conform names may get lost) !!! Associated with (already existing) figure file 'pngFileNa' and make html page where points may be indicated by mouse-over |
pngFileNa |
(character, length=1) filename for complementary png figure (must already exist) |
HtmFileNa |
(character, length=1) filename for html file produced |
mouseOverTxt |
(character, length=1) text for interactive mouse-over in html, if |
displSi |
(integer, length=2) size of image ('pngFileNa') at display in html (width,height), see also |
colNa |
(character) if not |
tit |
(character) title to be displayed on top of figure |
myHtmTit |
(character) title of Html page; 'htmlExt' .. checking and correcting filename-extension (only main Html page) |
myComment |
(character) modify comment embedded in html-document |
textAtStart |
(character) text in html before figure |
textAtEnd |
(character) text in html after figure |
pxDiam |
(integer, length=1) diameter for mouse-over tip to appear (single val or vector), simpler version/solution than with 'Tooltip' package |
addLinks |
(character) for clickable links, either 1) vector of links or 2) single character-chain to be used for pasting to rownames (eg https://www.uniprot.org/uniprot/)
or 3) |
linkExt |
(character) if specified : links will get specified ending, define as |
htmlExt |
(character, length=1) extension used when making html files |
callFrom |
(character) allow easier tracking of messages produced |
silent |
(logical) suppress messages |
debug |
(logical) additional messages for debugging |
Basically theer are two options for defining the path to the image embedded : 1) Absolute path : I turn you can moove the html to different locations, as long as it still can see the png-file the image can be displayed. However, this may not be any more the case when the html file is sent to another person. If the png-file is accessible as url, it should be easily visible. 2) Relative path : The simplest case would be to give only the file-name with no path at all, thus the png-file is supposed to be in the same directory as the html-file. This option is very 'transportable'. Basically the same applies to the clickable links which may be provided. In high-throughput biology one typically points here to data-bases accessible over the internet where urls to specific pages. With UniProt such links can easily be constructed when using protein identifiers as rownames.
plot
convertPlotCoordPix
; use htmlSpecCharConv
to convert special characters for proper html display
## Note, this example writes files to R's tempdir, ## Otherwise, if you simply work in the current directory without spcifying paths you'll ## get an html with relatove paths, which simply needs the png file in the same path df1 <- data.frame(id=letters[1:10], x=1:10, y=rep(5,10), mou=paste("point",letters[1:10]), link=file.path(tempdir(),paste0(LETTERS[1:10],".html")), stringsAsFactors=FALSE) ## here we'll use R's tempdir, later you may want to choose other locations pngFile <- file.path(tempdir(),"test01.png") png(pngFile,width=800, height=600,res=72) ## here we'll just plot a set of horiontal points ... plot(df1[,2:3],las=1,main="test01") dev.off() ## Note : Special characters should be converted for display in html pages during mouse-over library(wrMisc) df1$mou <- htmlSpecCharConv(df1$mou) ## Let's add the x- and y-coordiates of the points in pixels to the data.frame df1 <- cbind(df1,convertPlotCoordPix(x=df1[,2],y=df1[,3],plotD=c(800,600),plotRes=72)) head(df1) ## Now make the html-page allowing to display mouse-over to the png made before htmFile <- file.path(tempdir(),"test01.html") mouseOverHtmlFile(df1,pngFile,HtmFileNa=htmFile,pxDiam=15, textAtStart="Points in the figure are interactive to mouse-over ...", textAtEnd="and/or may contain links") ## We still need to make some toy links for(i in 1:nrow(df1)) cat(paste0("point no ",i," : ",df1[i,1]," x=",df1[i,2]," y=", df1[i,3]), file=df1$link[i]) ## Now we are ready to open the html file using any browser ## Not run: browseURL(htmFile) ## End(Not run)
## Note, this example writes files to R's tempdir, ## Otherwise, if you simply work in the current directory without spcifying paths you'll ## get an html with relatove paths, which simply needs the png file in the same path df1 <- data.frame(id=letters[1:10], x=1:10, y=rep(5,10), mou=paste("point",letters[1:10]), link=file.path(tempdir(),paste0(LETTERS[1:10],".html")), stringsAsFactors=FALSE) ## here we'll use R's tempdir, later you may want to choose other locations pngFile <- file.path(tempdir(),"test01.png") png(pngFile,width=800, height=600,res=72) ## here we'll just plot a set of horiontal points ... plot(df1[,2:3],las=1,main="test01") dev.off() ## Note : Special characters should be converted for display in html pages during mouse-over library(wrMisc) df1$mou <- htmlSpecCharConv(df1$mou) ## Let's add the x- and y-coordiates of the points in pixels to the data.frame df1 <- cbind(df1,convertPlotCoordPix(x=df1[,2],y=df1[,3],plotD=c(800,600),plotRes=72)) head(df1) ## Now make the html-page allowing to display mouse-over to the png made before htmFile <- file.path(tempdir(),"test01.html") mouseOverHtmlFile(df1,pngFile,HtmFileNa=htmFile,pxDiam=15, textAtStart="Points in the figure are interactive to mouse-over ...", textAtEnd="and/or may contain links") ## We still need to make some toy links for(i in 1:nrow(df1)) cat(paste0("point no ",i," : ",df1[i,1]," x=",df1[i,2]," y=", df1[i,3]), file=df1$link[i]) ## Now we are ready to open the html file using any browser ## Not run: browseURL(htmFile) ## End(Not run)
This function proposes a matrix for use with layout
to arrange given number of plots to be placed on a page/plotting area.
In certain instances the proposed layout may accomodate slightly more plots, eg nFig=5
can not be arranged in 2 or 3 columns without an empty last spot.
Portrait (vertival) or lanscape (horizontal) layout proportions can be chosen. The user can also impose a given number of columns.
partitionPlot( nFig, returnMatr = TRUE, horiz = TRUE, figNcol = NULL, byrow = TRUE, silent = TRUE, debug = FALSE, callFrom = NULL )
partitionPlot( nFig, returnMatr = TRUE, horiz = TRUE, figNcol = NULL, byrow = TRUE, silent = TRUE, debug = FALSE, callFrom = NULL )
nFig |
(integer) number of figures to be arrages on single plotting surface (ie window or plotting device) |
returnMatr |
(logical) will return matrix ready for use by |
horiz |
(logical) will priviledge horizontal layout if |
figNcol |
(integer) optional number of columns |
byrow |
(logical) toggle if output is in order of rows or columns (equivament to |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allows easier tracking of messages produced |
matrix for use with layout
or (if returnMatr=FALSE
numeric vector with number of segements in x- an y-axis)
partitionPlot(5); partitionPlot(14,horiz=TRUE)
partitionPlot(5); partitionPlot(14,horiz=TRUE)
Plot series of data as membership of 2 different grouping vectors (eg by grp=patient and grp2=age-group).
plotBy2Groups( dat, grp, grp2 = NULL, col = NULL, pch = NULL, tit = NULL, cex = 2, lwd = 0.5, lty = 2, yLab = NULL, cexLab = NULL, sepLines = FALSE, silent = FALSE, debug = FALSE, callFrom = NULL )
plotBy2Groups( dat, grp, grp2 = NULL, col = NULL, pch = NULL, tit = NULL, cex = 2, lwd = 0.5, lty = 2, yLab = NULL, cexLab = NULL, sepLines = FALSE, silent = FALSE, debug = FALSE, callFrom = NULL )
dat |
(numeric) main data (may contain |
grp |
(character or factor) grouping of columns of 'dat', eg replicate association |
grp2 |
(character or factor) aadditional/secondary grouping of columns of 'dat' |
col |
(character or integer) use custom colors, see also |
pch |
(integer) symbol to mark group-center (see also |
tit |
(character) custom title |
cex |
(numeric) expansion factor for text (see also |
lwd |
(integer) line-width (see also |
lty |
(integer) line-type (see also |
yLab |
(character) custom y-axis label |
cexLab |
(numeric) expansion factor for labels: 1st value for main groups ( |
sepLines |
(logical) optional drawing of horizontal lines aiming to separate groups (in analogy to support vectors) |
silent |
(logical) suppress messages |
debug |
(logical) additional messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
list with $annot
, $abund
for initial/raw abundance values and $quant
with final normalized quantitations, or returns data.frame with annot and quant if separateAnnot=FALSE
set.seed(2020); rand1 <- round(runif(12),2) +rep(1:3,each=4) plotBy2Groups(rand1, gl(2,6,labels=LETTERS[5:6]), gl(4,3,labels=letters[1:4]))
set.seed(2020); rand1 <- round(runif(12),2) +rep(1:3,each=4) plotBy2Groups(rand1, gl(2,6,labels=LETTERS[5:6]), gl(4,3,labels=letters[1:4]))
This function provides help to display a series of bivariate points given in 'dat' (multiple data formats possible), to model a linear regression and plot the results. Furthermore, a confidence interval to the regression may be added to the plot, regression parameters get be displayed.
plotLinReg( dat, indepVarLst = NULL, dependVar = NULL, cusTxt = NULL, regrLty = 1, regrLwd = 1, regrCol = 1, confInt = 0.95, confCol = NULL, xLab = NULL, yLab = NULL, xLim = NULL, yLim = NULL, tit = NULL, nSignif = 3, col = 1, pch = 1, silent = FALSE, debug = FALSE, callFrom = NULL )
plotLinReg( dat, indepVarLst = NULL, dependVar = NULL, cusTxt = NULL, regrLty = 1, regrLwd = 1, regrCol = 1, confInt = 0.95, confCol = NULL, xLab = NULL, yLab = NULL, xLim = NULL, yLim = NULL, tit = NULL, nSignif = 3, col = 1, pch = 1, silent = FALSE, debug = FALSE, callFrom = NULL )
dat |
(numeric, data.frame or list) main data to plot/inspect. If numeric 'dat' will be used as dependent variable (y-data)
together with numeric 'indepVarLst' (independent variable); if list, then list-elments |
indepVarLst |
(character) if 'dat' is list, this designes the list element with the explanatory or independent variable (ie the variable used for explaining, typically x-data) |
dependVar |
(character) if 'dat' is list, this designes the list element with dependent variable (ie the variable to be explained, typically y-data) to test |
cusTxt |
(character) optional custom text to display in subtitle (instead of p-value to H0: slope.regression=0) |
regrLty |
(integer) line type for regression |
regrLwd |
(integer) line width for regression |
regrCol |
(integer) color of regression-line |
confInt |
(numeric, between 0 and 1) the probabiity alpha for the regression interval, if |
confCol |
(character) (background) color for confidence-interval |
xLab |
(character) optional custom x-label |
yLab |
(character) optional custom y-label |
xLim |
(numeric) custom limit for x-axis (see also |
yLim |
(numeric) custom limit for y-axis (see also |
tit |
(character) optional title |
nSignif |
(integer) number of significant digits for regression parameters in subtitle of plot |
col |
(integer or character) custom color for points (choose |
pch |
(integer or character) type of symbol for points (see also |
silent |
(logical) suppress messages |
debug |
(logical) additional messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
This functions simply plots (to the current graphical devce); an invisible list containing $data, $linRegr, $confInterval (if calculated) may be returned, too
exclExtrValues
for decision of potential outliers; hist
, vioplotW
set.seed(2020); dat1 <- rep(1:6,each=2) +runif(12,0,1) plotLinReg(dat1, gl(6,2)) ## extract elements out of list : li2 <- list(aa=gl(5,2), bb=dat1[1:10]) plotLinReg(li2, indepVarLst="aa", dependVar="bb")
set.seed(2020); dat1 <- rep(1:6,each=2) +runif(12,0,1) plotLinReg(dat1, gl(6,2)) ## extract elements out of list : li2 <- list(aa=gl(5,2), bb=dat1[1:10]) plotLinReg(li2, indepVarLst="aa", dependVar="bb")
This function allows to plot principal components analysis (PCA), with options to show center and potential outliers for each of the groups (columns of data). The main points of this implementation consist in offering bagplots to highlight groups of columns/samples and support to (object-oriented) output from limma and wrProteo.
plotPCAw( dat, sampleGrp, tit = NULL, useSymb = c(21:25, 9:12, 3:4), center = TRUE, scale. = TRUE, colBase = NULL, useSymb2 = NULL, cexTxt = 1, cexSub = 0.6, displBagPl = TRUE, outCoef = 2, getOutL = FALSE, showLegend = TRUE, nGrpForMedian = 6, pointLabelPar = NULL, rowTyName = "genes", rotatePC = NULL, suplFig = TRUE, callFrom = NULL, silent = FALSE, debug = FALSE )
plotPCAw( dat, sampleGrp, tit = NULL, useSymb = c(21:25, 9:12, 3:4), center = TRUE, scale. = TRUE, colBase = NULL, useSymb2 = NULL, cexTxt = 1, cexSub = 0.6, displBagPl = TRUE, outCoef = 2, getOutL = FALSE, showLegend = TRUE, nGrpForMedian = 6, pointLabelPar = NULL, rowTyName = "genes", rotatePC = NULL, suplFig = TRUE, callFrom = NULL, silent = FALSE, debug = FALSE )
dat |
(matrix, data.frame, MArrayLM-object or list) data to plot. Note: |
sampleGrp |
(character or factor) should be factor describing groups of replicates, NAs are not supported |
tit |
(character) custom title |
useSymb |
(integer) symbols to use (see also |
center |
(logical or numeric) decide if variables should be shifted to be zero centered, argument passed to |
scale. |
(logical or numeric) decide if scaling to obtain unit variance, argument passed to |
colBase |
(character or integer) use custom colors |
useSymb2 |
(integer) symbol to mark group-center (no mark of group-center if default NULL) (equivalent to |
cexTxt |
(integer) expansion factor for text (see also |
cexSub |
(integer) expansion factor for subtitle line text (see also |
displBagPl |
(logical) if |
outCoef |
(numeric) parameter for defining outliers, see |
getOutL |
(logical) return outlyer samples/values |
showLegend |
(logical or character) toggle to display legend, if character it designes the location within the plot to display the legend ('bottomleft','topright', etc..) |
nGrpForMedian |
(integer) decide if group center should be displayed via its average or median value: If group has less than 'nGrpForMedian' values, the average will be used, otherwise the median; if |
pointLabelPar |
(character) define formatting for optional labels next to points in main figure (ie PC1 vs PC2); may be |
rowTyName |
(character) for subtitle : specify nature of rows (genes, proteins, probesets,...) |
rotatePC |
(integer) optional rotation (by -1) for fig&ure of the principal components specified by index |
suplFig |
(logical) to include plots vs 3rd principal component (PC) and Screeplot |
callFrom |
(character) allow easier tracking of messages produced |
silent |
(logical) suppress messages |
debug |
(logical) display additional messages for debugging |
One motivation for this implementation of plotting PCA was to provide a convenient way for doing so with of MArrayLM-objects or lists as created by limma and wrProteo.
Another motivation for this implementation come from integrating the idea of bag-plots to better visualize different groups of points (if they can be organized so beforehand as distinct groups) : The main body of data is shown as 'bag-plots' (a bivariate boxplot, see Bagplot) with different transparent colors to highlight the core part of different groups (if they contain more than 2 values per group). Furthermore, group centers are shown as average or median (see 'nGrpForMedian') with stars & index-number (if <25 groups).
Layout is automatically set to 2 or 4 subplots (if plotting more than 2 principal components makes sense).
Note : This function uses prcomp
for calculating Eigenvectors and principal components, with default center=TRUE
and scale.=FALSE
(different to princomp()
. which standardizes by default).
This way the user has to option to intervene on arguments center
and scale.
. However, this should be done with care.
Note: NA
-values cannot (by definition) be processed by (any) PCA - all lines with any non-finite values/content (eg NA
) will be omitted !
Note : Package RColorBrewer may be used if available.
For more options with PCA (and related methods) you may also see also the package FactoMineR which provides a very wide spectrum of possibiities, in particular for combined numeric and categorical data.
This function make a plot and may retiurn an optional matrix of outlyer-data (depending on argument getOutL
)
prcomp
(used here for the PCA underneith) , princomp
, see the package FactoMineR for multiple plotting options or ways of combining categorical and numeric data
set.seed(2019); dat1 <- matrix(round(c(rnorm(1000), runif(1000,-0.9,0.9)),2), ncol=20, byrow=TRUE) + matrix(rep(rep(1:5,6:2), each=100), ncol=20) biplot(prcomp(dat1)) # traditional plot (grp = factor(rep(LETTERS[5:1],6:2))) plotPCAw(dat1, grp)
set.seed(2019); dat1 <- matrix(round(c(rnorm(1000), runif(1000,-0.9,0.9)),2), ncol=20, byrow=TRUE) + matrix(rep(rep(1:5,6:2), each=100), ncol=20) biplot(prcomp(dat1)) # traditional plot (grp = factor(rep(LETTERS[5:1],6:2))) plotPCAw(dat1, grp)
This is a modified version of plot
for 2-dimensional data,
allowing to choose symbols and colors of points according to two additional columns of dat
.
plotW2Leg( dat, useCol = c("logp", "slope", "medAbund", "startFr"), tit = NULL, subTi = NULL, subCex = 0.9, pch = 21:25, xlim = NULL, ylim = NULL, xlab = NULL, ylab = NULL, ablines = NULL, legendloc = "topright", txtLegend = NULL, histLoc = "bottomleft", legHiTi = NULL, silent = TRUE, debug = FALSE, callFrom = NULL )
plotW2Leg( dat, useCol = c("logp", "slope", "medAbund", "startFr"), tit = NULL, subTi = NULL, subCex = 0.9, pch = 21:25, xlim = NULL, ylim = NULL, xlab = NULL, ylab = NULL, ablines = NULL, legendloc = "topright", txtLegend = NULL, histLoc = "bottomleft", legHiTi = NULL, silent = TRUE, debug = FALSE, callFrom = NULL )
dat |
(matrix or data.frame) main input |
useCol |
(character or integer) columns form |
tit |
(character) optional custom title |
subTi |
(character) optional custom subtitle |
subCex |
(numeric) cex-like expansion factor for subtitle (see also |
pch |
(integer) symbols to use for plotting (see also |
xlim |
(numeric, length=2) x- axis limits (see also |
ylim |
(numeric, length=2) y- axis limits (see also |
xlab |
(character) custom x-axis label |
ylab |
(character) custom x-axis label |
ablines |
(list) optional horzontal and/or vertical gray dashed guide-lines |
legendloc |
(character) location of legend (of symbols) |
txtLegend |
(character) optional label for legend (of symbols) |
histLoc |
(character) location of histomgram-legend (of 3rd column of |
legHiTi |
(character) optional title for histomgram-legend |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allows easier tracking of messages produced |
graphical output only
(standard plots) plot
from the package base
x1 <- cbind(x=c(2,1:7), y=8:1 +runif(8), grade=rep(1:4,2)) plotW2Leg(x1,useCol=c("x","y","y","grade"))
x1 <- cbind(x=c(2,1:7), y=8:1 +runif(8), grade=rep(1:4,2)) plotW2Leg(x1,useCol=c("x","y","y","grade"))
This function was made for visualuzing the result of clustering of a numeric vector or clustering along multiple columns of a matrix.
The data will be plotted like a reglar scatter-plot, but some extra space is added to separate clusters and dashed lines highlight cluster-borders.
If no mean/representative value is spacified, a geometric mean will be calculated along all columns of dat
.
In case dat
has multiple columns, a legend and a representative (default geometric mean) dashed grey line will be displayed.
profileAsClu( dat, clu, meanD = NULL, tit = NULL, col = NULL, pch = NULL, xlab = NULL, ylab = NULL, meCol = "grey", meLty = 1, meLwd = 1, cex = NULL, cexTit = NULL, legLoc = "bottomleft", silent = TRUE, debug = FALSE, callFrom = NULL )
profileAsClu( dat, clu, meanD = NULL, tit = NULL, col = NULL, pch = NULL, xlab = NULL, ylab = NULL, meCol = "grey", meLty = 1, meLwd = 1, cex = NULL, cexTit = NULL, legLoc = "bottomleft", silent = TRUE, debug = FALSE, callFrom = NULL )
dat |
(matrix or data.frame) main input with data to plot as points |
clu |
(numeric or character) clustering results; if length=1 and character this term will be understood as colum-name with cluster-numbers from |
meanD |
(numeric) mean/representative of multiple series for display as lines; if length=1 and character this term will be understood as columname with cluster-numbers from |
tit |
(character) optional custom title |
col |
(character) custom colors |
pch |
(integer) custom plotting symbols (see also |
xlab |
(character) custom x-axis label |
ylab |
(character) custom y-axis label |
meCol |
(character) color for (dashed) line of mean/representative values |
meLty |
(integer) line-type line of mean/representative values (see also |
meLwd |
(numeric) line-width line of mean/representative values (see also |
cex |
(numeric) cex-like expansion factor (see also |
cexTit |
(numeric) cex-like expansion factor for title (see also |
legLoc |
(character) legend location |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allows easier tracking of messages produced |
This functin returns a plot only
set.seed(2020); dat1 <- runif(12)/2 + rep(6:8, each=4) dat1Cl <- stats::kmeans(dat1, 3)$cluster dat1Cl <- 5- dat1Cl # bring cluster-numbers in ascending form dat1Cl[which(dat1Cl >3)] <- 1 # bring cluster-numbers in ascending form profileAsClu(dat1, clu=dat1Cl)
set.seed(2020); dat1 <- runif(12)/2 + rep(6:8, each=4) dat1Cl <- stats::kmeans(dat1, 3)$cluster dat1Cl <- 5- dat1Cl # bring cluster-numbers in ascending form dat1Cl[which(dat1Cl >3)] <- 1 # bring cluster-numbers in ascending form profileAsClu(dat1, clu=dat1Cl)
The basic idea of this plot is to show how counts data change while shifting a threshold-criterium.
At each given threshold the counts are plotted like a staggered bar-chart (or staggered histogram) but without vertical lines to illustrated the almost continuous change
from preceedig or following threshold-value.
Initially this plot was designed for showing the absolute count-data used when constructing roc-curves (eg using
the function summarizeForROC
of package wrProteo ).
The main input should furnish the panel of threshold as one column and the coresponding counts data as min 2 columns.
The threshold coumns gets specified using the argument threColumn
, the counts-data may either be specified using argument countsCol
or be searched using grep
using column-names containing the text given in argument varCountNa
with may be combined with
a fixed preceeding part given as argument fixedCountPat
.
staggerdCountsPlot( roc, threColumn = 1, countsCol = NULL, fixedCountPat = "n.pos.", varCountNa = NULL, sortAscending = TRUE, vertLine = NULL, col = NULL, tit = NULL, logScale = FALSE, las.alph = 2, displMaxSpec = TRUE, silent = FALSE, debug = FALSE, callFrom = NULL )
staggerdCountsPlot( roc, threColumn = 1, countsCol = NULL, fixedCountPat = "n.pos.", varCountNa = NULL, sortAscending = TRUE, vertLine = NULL, col = NULL, tit = NULL, logScale = FALSE, las.alph = 2, displMaxSpec = TRUE, silent = FALSE, debug = FALSE, callFrom = NULL )
roc |
(numeric matrix or data.frame) main input: one column with thresholds and multiple columns of assoicated count data |
threColumn |
(integer or character) to specify the column with threshold-data, in typica proteomics benchmark studies this would be 'alph' (for the statistical test threshold) |
countsCol |
(character of integer, min length=2) choice of column(s) with count-data in 'roc' to be used for display, if not |
fixedCountPat |
(character) optional pattern to help identifying counts-data: if not |
varCountNa |
(character) alternative way to select the columns from 'roc': searched using |
sortAscending |
(logical) decide if data should be sorted ascending or descending |
vertLine |
(numeric) for optional vertical line, typically used to highlight alpha 0.05 |
col |
(character) custom colors, see also |
tit |
(character) cutom title |
logScale |
(logical) display threshld values (x-axis) on log-scale |
las.alph |
(numeric) orientation of label of alpha-cutoff, see also |
displMaxSpec |
(logical) display on right side of figure max count value of contributing group species |
silent |
(logical) suppress messages |
debug |
(logical) additonal messages for debugging |
callFrom |
(character) allows easier tracking of messages produced |
Investigate count data prepared for plotting ROC curves : cumulative counts plot by species (along different statistical test thresholds). Note : Package wrProteo may be used to prepare input (matrix of ROC data).
plot only
ecdf
, for preparing input to ROC: function summarizeForROC
in package wrProteo
set.seed(2019); test1 <- cbind(a=sample.int(n=7,size=50,repl=TRUE), b=sample.int(n=11,size=50,repl=TRUE),c=sample.int(n=18,size=50,repl=TRUE)) test1 <- cbind(alph=seq(0,1,length.out=50),a=cumsum(test1[,1]),b=cumsum(test1[,2]), c=cumsum(test1[,3])) staggerdCountsPlot(test1,countsCol=c("a","b","c")) ## example below requires the package wrProteo
set.seed(2019); test1 <- cbind(a=sample.int(n=7,size=50,repl=TRUE), b=sample.int(n=11,size=50,repl=TRUE),c=sample.int(n=18,size=50,repl=TRUE)) test1 <- cbind(alph=seq(0,1,length.out=50),a=cumsum(test1[,1]),b=cumsum(test1[,2]), c=cumsum(test1[,3])) staggerdCountsPlot(test1,countsCol=c("a","b","c")) ## example below requires the package wrProteo
This function allows generating Violin plots) using a variety of input formats and offers additional options for colors.
Main input may be multiple vectors, a matrix or list of multiple data-elements (entries may be of variable length),
individual colors for different sets of data or color-gradients can be specified, and the display of n per set of data was integtated
(based on an inspiration from the discussion 'Removing-NAs-from-dataframe-for-use-in-Vioplot' on the forum Nabble).
It is also possible to plot pairwise half-violins for easier pairwise-comparisons (using halfViolin="pairwise"
).
Many arguments are kept similar to vioplot (here, the package vioplot
is not required/used).
vioplotW( x, ..., finiteOnly = TRUE, removeEmpty = FALSE, halfViolin = FALSE, boxCol = "def", hh = NULL, xlim = NULL, ylim = NULL, nameSer = NULL, cexNameSer = NULL, horizontal = FALSE, col = "rainbow", border = "black", xlab = NULL, ylab = NULL, cexLab = NULL, cexAxis = NULL, lty = 1, pointCol = NULL, cexPt = NULL, tit = NULL, las = 1, lwd = 1, rectCol = "black", at = 0, add = FALSE, wex = NULL, silent = FALSE, debug = FALSE, callFrom = NULL )
vioplotW( x, ..., finiteOnly = TRUE, removeEmpty = FALSE, halfViolin = FALSE, boxCol = "def", hh = NULL, xlim = NULL, ylim = NULL, nameSer = NULL, cexNameSer = NULL, horizontal = FALSE, col = "rainbow", border = "black", xlab = NULL, ylab = NULL, cexLab = NULL, cexAxis = NULL, lty = 1, pointCol = NULL, cexPt = NULL, tit = NULL, las = 1, lwd = 1, rectCol = "black", at = 0, add = FALSE, wex = NULL, silent = FALSE, debug = FALSE, callFrom = NULL )
x |
(matrix, list or data.frame) data to plot, or first series of data |
... |
(numeric) additional sets of data to plot |
finiteOnly |
(logical) eliminate non-finite elements to avoid potential errors (eg when encountering |
removeEmpty |
(logical) omit empty series (or less than 4 finite numeric entries) of data from plot |
halfViolin |
(logical or character) decide with |
boxCol |
(character) decide if boxplot should be adde inside the violin, use "def" for default transparent grey |
hh |
(numeric, length <4) smoothing parameter (standard deviation to kernel function, if omited anormal optimal smoothing parameter is used); equivalent to argument |
xlim |
( |
ylim |
( |
nameSer |
(character) custom label for data-sets or columns (length must match number of data-sets) |
cexNameSer |
(numeric) size of individual data-series labels as cex-expansion factor (see also |
horizontal |
(logical) orientation of plot |
col |
(character or integer) custom colors or gradients like 'rainbow', 'grayscale', 'heat.colors', 'topo.colors', 'Spectral' or 'Paired', or you may use colors made by the package colorRamps |
border |
(character) custom color for figure border |
xlab |
(character) custom x-axis label |
ylab |
(character) custom y-axis label |
cexLab |
(numeric) size of axis labels as cex-expansion factor (see also |
cexAxis |
(numeric) size of numeric y-axis labels as cex-expansion factor (see also |
lty |
(integer) line-type for linear regression line (see also |
pointCol |
(character or numeric) display of median: color (defauly white) |
cexPt |
(numeric) display of median : size of point as cex-expansion factor (see also |
tit |
(character) custom title to figure |
las |
(integer) orientation of axis labels (see also |
lwd |
(integer) width of line(s) (see also |
rectCol |
(character) color of rectangle |
at |
(numeric) custom locoation of data-series names, ie the points at which tick-marks are to be drawn, will be passed to |
add |
(logical) add to existing plot if |
wex |
(integer) relative expansion factor of the violin |
silent |
(logical) suppress messages |
debug |
(logical) additional messages for debugging |
callFrom |
(character) allow easier tracking of messages produced |
The (relative) width of the density-profiles ('Violins') may be manually adjusted using the parameter wex
which applies to all profiles drawn.
Note : Arguments have to be given with full names, lazy evaluation of arguments will not work properly with this function (since '...' is used to capture additional data-sets). Note : vioplot offers better options for plotting formulas
This function plots a figure (to the current graphical device)
the package vioplot, sm
is used for the density estimation
set.seed(2013) dat6 <- matrix(round(rnorm(300) +3, 1), ncol=6, dimnames=list(paste0("li",1:50), letters[19:24])) vioplotW(dat6) ## variable number of elements (each n is displayed) dat6b <- apply(dat6, 2, function(x) x[which(x < 5)]) dat6b[[4]] <- dat6b[[4]][dat6b[[4]] < 4] vioplotW(dat6b, col="Spectral") vioplotW(dat6b, col="Spectral" ,halfViolin="pairwise", horizontal=TRUE) vioplotW(dat6b, col="Spectral", halfViolin="pairwise", horizontal=FALSE)
set.seed(2013) dat6 <- matrix(round(rnorm(300) +3, 1), ncol=6, dimnames=list(paste0("li",1:50), letters[19:24])) vioplotW(dat6) ## variable number of elements (each n is displayed) dat6b <- apply(dat6, 2, function(x) x[which(x < 5)]) dat6b[[4]] <- dat6b[[4]][dat6b[[4]] < 4] vioplotW(dat6b, col="Spectral") vioplotW(dat6b, col="Spectral" ,halfViolin="pairwise", horizontal=TRUE) vioplotW(dat6b, col="Spectral", halfViolin="pairwise", horizontal=FALSE)
This type of plot is very common in high-throughput biology, see Volcano-plot. Basically, this plot allows comparing the outcome of a statistical test to the relative change (ie log fold-change, M-value).
VolcanoPlotW( Mvalue, pValue = NULL, useComp = 1, filtFin = NULL, ProjNa = NULL, FCthrs = NULL, FdrList = NULL, FdrThrs = NULL, FdrType = NULL, subTxt = NULL, grayIncrem = TRUE, col = NULL, pch = 16, compNa = NULL, batchFig = FALSE, cexMa = 1.8, cexLa = 1.1, limM = NULL, limp = NULL, annotColumn = c("SpecType", "GeneName", "EntryName", "Accession", "Species", "Contam"), annColor = NULL, expFCarrow = FALSE, cexPt = NULL, cexSub = NULL, cexTxLab = 0.7, namesNBest = NULL, NbestCol = 1, sortLeg = "descend", NaSpecTypeAsContam = TRUE, useMar = c(6.2, 4, 4, 2), returnData = FALSE, callFrom = NULL, silent = FALSE, debug = FALSE )
VolcanoPlotW( Mvalue, pValue = NULL, useComp = 1, filtFin = NULL, ProjNa = NULL, FCthrs = NULL, FdrList = NULL, FdrThrs = NULL, FdrType = NULL, subTxt = NULL, grayIncrem = TRUE, col = NULL, pch = 16, compNa = NULL, batchFig = FALSE, cexMa = 1.8, cexLa = 1.1, limM = NULL, limp = NULL, annotColumn = c("SpecType", "GeneName", "EntryName", "Accession", "Species", "Contam"), annColor = NULL, expFCarrow = FALSE, cexPt = NULL, cexSub = NULL, cexTxLab = 0.7, namesNBest = NULL, NbestCol = 1, sortLeg = "descend", NaSpecTypeAsContam = TRUE, useMar = c(6.2, 4, 4, 2), returnData = FALSE, callFrom = NULL, silent = FALSE, debug = FALSE )
Mvalue |
(MArrayLM-object, numeric or matrix) data to plot; M-values are typically calculated as difference of log2-abundance values and 'pValue' the mean of log2-abundance values;
M-values and p-values may be given as 2 columsn of a matrix, in this case the argument |
pValue |
(numeric, list or data.frame) if |
useComp |
(integer, length=1) choice of which of multiple comparisons to present in |
filtFin |
(matrix or logical) The data may get filtered before plotting: If |
ProjNa |
(character) custom title |
FCthrs |
(numeric) Fold-Change threshold (display as line) give as Fold-change and NOT log2(FC), default at 1.5, set to |
FdrList |
(numeric) FDR data or name of list-element |
FdrThrs |
(numeric) FDR threshold (display as line), default at 0.05, set to |
FdrType |
(character) FDR-type to extract if |
subTxt |
(character) custom sub-title |
grayIncrem |
(logical) if |
col |
(character) custom color(s) for points of plot (see also |
pch |
(integer) type of symbol(s) to plot (default=16) (see also |
compNa |
(character) names of groups compared |
batchFig |
(logical) if |
cexMa |
(numeric) font-size of title, as expansion factor (see also |
cexLa |
(numeric) size of axis-labels, as expansion factor (see also |
limM |
(numeric, length=2) range of axis M-values |
limp |
(numeric, length=2) range of axis FDR / p-values |
annotColumn |
(character) column names of annotation to be extracted (only if |
annColor |
(character or integer) colors for specific groups of annotation (only if |
expFCarrow |
(logical, character or numeric) optional adding arrow for expected fold-change; if |
cexPt |
(numeric) size of points, as expansion factor (see also |
cexSub |
(numeric) size of subtitle, as expansion factor (see also |
cexTxLab |
(numeric) size of text-labels for points, as expansion factor (see also |
namesNBest |
(integer or character) for display of labels to points in figure: if 'pass','passThr' or 'signif' all points passing thresholds; if numeric (length=1) this number of best points will get labels
if the initial object |
NbestCol |
(character or integer) colors for text-labels of best points, also used for arrow |
sortLeg |
(character) sorting of 'SpecType' annotation either ascending ('ascend') or descending ('descend'), no sorting if |
NaSpecTypeAsContam |
(logical) consider lines/proteins with |
useMar |
(numeric,length=4) custom margings (see also |
returnData |
(logical) optional returning data.frame with (ID, Mvalue, pValue, FDRvalue, passFilt) |
callFrom |
(character) allow easier tracking of messages produced |
silent |
(logical) suppress messages |
debug |
(logical) additional messages for debugging |
In high-throughput biology data are typically already transformed to log2 and thus, the 'M'-values (obtained by subtrating two group means) represent a relative change.
Output from statistical testing by moderTest2grp
or moderTestXgrp
can be directly read to produce Volcano plots for diagnostic reasons.
Please note, that plotting a very high number of points (eg >10000) in transparency may take several seconds.
This function simply plots an MA-plot (to the current graphical device), if returnData=TRUE
an optional data.frame with (ID, Mvalue, pValue, FDRvalue, passFilt) can be returned
(for PCA) plotPCAw
)
library(wrMisc) set.seed(2005); mat <- matrix(round(runif(900),2), ncol=9) rownames(mat) <- paste0(rep(letters[1:25], each=4), rep(letters[2:26],4)) mat[1:50,4:6] <- mat[1:50,4:6] + rep(c(-1,1)*0.1,25) mat[3:7,4:9] <- mat[3:7,4:9] + 0.7 mat[11:15,1:6] <- mat[11:15,1:6] - 0.7 ## assume 2 groups with 3 samples each gr3 <- gl(3, 3, labels=c("C","A","B")) tRes2 <- moderTest2grp(mat[,1:6], gl(2,3), addResults = c("FDR","means")) # Note: due to the small number of lines only FDR chosen to calculate VolcanoPlotW(tRes2) ## Add names of points passing custom filters VolcanoPlotW(tRes2, FCth=1.3, FdrThrs=0.2, namesNBest="passThr") ## assume 3 groups with 3 samples each tRes <- moderTestXgrp(mat, gr3, addResults = c("FDR","means")) # Note: due to the small number of lines only FDR chosen to calculate VolcanoPlotW(tRes) VolcanoPlotW(tRes, FCth=1.3, FdrThrs=0.2) VolcanoPlotW(tRes, FCth=1.3, FdrThrs=0.2, useComp=2)
library(wrMisc) set.seed(2005); mat <- matrix(round(runif(900),2), ncol=9) rownames(mat) <- paste0(rep(letters[1:25], each=4), rep(letters[2:26],4)) mat[1:50,4:6] <- mat[1:50,4:6] + rep(c(-1,1)*0.1,25) mat[3:7,4:9] <- mat[3:7,4:9] + 0.7 mat[11:15,1:6] <- mat[11:15,1:6] - 0.7 ## assume 2 groups with 3 samples each gr3 <- gl(3, 3, labels=c("C","A","B")) tRes2 <- moderTest2grp(mat[,1:6], gl(2,3), addResults = c("FDR","means")) # Note: due to the small number of lines only FDR chosen to calculate VolcanoPlotW(tRes2) ## Add names of points passing custom filters VolcanoPlotW(tRes2, FCth=1.3, FdrThrs=0.2, namesNBest="passThr") ## assume 3 groups with 3 samples each tRes <- moderTestXgrp(mat, gr3, addResults = c("FDR","means")) # Note: due to the small number of lines only FDR chosen to calculate VolcanoPlotW(tRes) VolcanoPlotW(tRes, FCth=1.3, FdrThrs=0.2) VolcanoPlotW(tRes, FCth=1.3, FdrThrs=0.2, useComp=2)