gplots/0000755000176200001440000000000013760452612011570 5ustar liggesusersgplots/NAMESPACE0000644000176200001440000000452613731051624013012 0ustar liggesusersexport( angleAxis, balloonplot, bandplot, barplot2, bluered, boxplot2, ci2d, col2hex, colorpanel, greenred, heatmap.2, hist2d, lmplot2, lowess, ooplot, overplot, panel.overplot, plot.venn, plotCI, plotLowess, plotmeans, qqnorm.aov, redblue, redgreen, residplot, rich.colors, sinkplot, smartlegend, space, textplot, venn, wapply, reorder.factor ) importFrom(gtools, invalid) importFrom(gtools, odd) importFrom(gtools, mixedsort) importFrom(stats, reorder) importFrom(stats, na.omit) importFrom(stats, nobs) importFrom(caTools, runsd) importFrom(caTools, runmean) importFrom(KernSmooth, bkde2D) importFrom(KernSmooth, dpik) S3method(balloonplot, default) S3method(balloonplot, table) S3method(bandplot, default) S3method(bandplot, formula) S3method(barplot2, default) S3method(lowess, default) S3method(lowess, formula) S3method(ooplot, default) S3method(plot, lowess) S3method(plot, venn) S3method(print, ci2d) S3method(print, hist2d) S3method(qqnorm, aov) S3method(textplot, character) S3method(textplot, data.frame) S3method(textplot, default) S3method(textplot, matrix) S3method(reorder, factor) # imports recommended by R CMD check importFrom("grDevices", "col2rgb", "contourLines", "dev.flush", "dev.hold", "dev.interactive", "heat.colors", "rgb", "topo.colors") importFrom("graphics", "abline", "arrows", "axTicks", "axis", "barplot", "contour", "filled.contour", "grid", "hist", "identify", "image", "layout", "legend", "lines", "matlines", "matpoints", "mtext", "panel.smooth", "par", "plot", "plot.default", "plot.new", "plot.window", "points", "polygon", "rect", "segments", "strheight", "strwidth", "text", "title", "xinch", "yinch") importFrom("stats", "as.dendrogram", "cooks.distance", "density", "deviance", "df.residual", "dist", "dnorm", "effects", "expand.model.frame", "fitted", "hclust", "is.leaf", "lm.influence", "median", "model.frame", "order.dendrogram", "ppoints", "predict", "qnorm", "qqline", "qqnorm", "qt", "residuals", "sd", "var", "weights") importFrom("utils", "str") gplots/ChangeLog0000644000176200001440000013231112676760017013351 0ustar liggesusers2016-03-30 warnes * [r2122] R/plot.lowess.R: plotLowess() wasn't finding objects in the caller's environment. 2016-03-28 warnes * [r2121] DESCRIPTION, inst/NEWS: Update gplots version to 3.0.0. * [r2120] man/heatmap.2.Rd: The 'layout' element of the list returned from heatmap.2 is a named list, not a named vector. * [r2119] man/gplots-deprecated.Rd: Used wrong comment character. * [r2118] man/gplots-deprecated.Rd: Comment out arguments section to avoid R CMD check warning. 2016-03-25 warnes * [r2112] man/heatmap.2.Rd: Update URL for RColorBrewer * [r2111] DESCRIPTION: Fix typos and quote uncommon words to make R CMD check happy * [r2110] DESCRIPTION, inst/ChangeLog, inst/NEWS: Update files for gplots 2.18.0 * [r2109] NAMESPACE: Add imports recommended by R CMD check on WinBuilder * [r2108] man/heatmap.2.Rd: Add trailing slash to make R CMD check's URL testing happy. * [r2107] tests/heatmap2Test.Rout.save: Update test output to match corrected messages * [r2106] R/plot.venn.R: Warning message didn't have spaces between words. Minor code reformatting. * [r2105] R/lowess.R: Remove obsolete function to add '...' to argument list for stats::lowess(). * [r2104] man/lowess.Rd, man/venn.Rd: Fix errors identified by R CMD check * [r2103] R/heatmap.2.R: Fix error when Rowv=FALSE or Colv=FALSE * [r2102] man/gplots-defunct.Rd, man/gplots-deprecated.Rd: Fix documenation issues identified by 'R CMD check' * [r2101] man/venn.Rd: Correct discrepencies in man page * [r2100] man/venn.Rd: Correct discrepencies in man page * [r2099] man/lowess.Rd: Correct differences between calls on man page and in code * [r2098] R/lmplot2.R: Fix name of replacement functon in defuct message generated by plot.lm2 * [r2097] man/lowess.Rd: Improve lowess() man page * [r2096] NAMESPACE: Add plotLowess() and plot.lowess() to the NAMESPACE * [r2095] R/plot.lowess.R: Ensure lowess plot methods (invisibly) return the lowess object. * [r2094] man/lowess.Rd: Update man page for lowess to reflect new lowess method for plot(). * [r2093] R/plot.lowess.R: Ensure extra arguments are properly passed to the plot call. * [r2092] R/heatmap.2.R: Corrected a bug causing "Error in plot.new() : figure margins too large" to occur when 'key=FALSE'. (Reported and patch provided by Sveinung Gundersen.) 2016-03-24 warnes * [r2091] R/lowess.R, R/plot.lowess.R: Rename plot.lowess to plotLowess to avoid confusions with plot() method for class 'lowess', create a plot() method for class 'lowess' and modify the lowess.default() and lowess.formula() to add the 'lowess' class to the returned object, along with a 'call' list element. * [r2090] R/venn.R, R/vennMembers.R, man/venn.Rd: The 'intersections' attribute returned from venn() has been improved to use set names instead of indicators, and is ordered from simplest to most complex set interactions. * [r2089] R/smartlegend.R, man/gplots-defunct.Rd, man/gplots-deprecated.Rd: The smartlegend() function has been made defunct and is no longer available. * [r2088] R/lmplot2.R: Indentation changes * [r2087] man/heatmap.2.Rd: Update heatmap.2() man page to reflect addition of to the returned object. * [r2086] R/lowess.R: Remove observations with missing values when lowess is called using the formula interface. * [r2085] R/heatmap.2.R: Add layout infromation to object returned from heatmap.2() (patch provided by Jenny Drnevich). * [r2084] DESCRIPTION: Correct spelling 2016-03-08 warnes * [r2083] R/plot.lowess.R: Add function to plot points and lowess using formula interface. * [r2082] R/lowess.R: Remove old code for S-Plus and modernize formula handling code. * [r2081] R/heatmap.2.R: Set srtCol default if missing and colCol is set 2016-02-26 warnes * [r2080] R/venn.R: venn() now support matrix arguments. * [r2079] R/angleAxis.R, man/angleAxis.Rd: New angleAxis() function to create axis labels with rotated text. * [r2078] R/heatmap.2.R: - heatmap.2() can now be used to plot subsets of a previous heatmap. - Remove stray 'browser()' debuggint statement from heatmap.2() code. - Decrease the granularity of the carpet in heatmap.2()'s color key to avoid visual artifacts. 2015-11-23 warnes * [r2070] R/heatmap.2.R: Remove debugging print() statement. 2015-07-22 warnes * [r2062] DESCRIPTION, R/heatmap.2.R, R/layout_set.R: Renamed 'test' directory to 'tests', commented out tests for lme4 which has a changed API 2015-06-02 warnes * [r2052] R/boxplot2.R: Defunct message for boxplot.n was recommending the wrong function 2015-05-02 warnes * [r2018] Rename 'trunk' to 'pkg' for compatibility with R-forge 2015-05-01 warnes * [r2014] Again... * [r2013] Update ChangeLog (again) * [r2012] Summary: Correct man page name * [r2011] Summary: Forgot to add \alias for smartlegend. * [r2010] Remove leftover alias * [r2009] Commit ChangeLog * [r2008] Update NEWS again. * [r2007] Mark boxplot.n and() plot.lm2() as defunct. * [r2006] Make ballonplot.n() and plot.lm2() 'defunct'. * [r2005] Update NEWS and ChangeLog again. * [r2004] Summary: Punctuation. * [r2003] Correct URLs in man pages. * [r2002] Correct URLs in man pages. * [r2001] Update NEWS again. * [r2000] Improve package description. * [r1999] Mark 'smartlegend' as deprecated * [r1998] Summary: Mark smartlegend() as deprecated. * [r1997] Summary: venn example used 'F' instead of 'FALSE'. * [r1996] Update DESCRIPTION, NEWS, and ChangeLog again for gplots 2.17.0. * [r1995] - heatmap.2: row traces could be plotted in the wrong order. * [r1994] - heatmap.2: column traces could be plotted in the wrong order. - heatmap.2: add support for plotting sub-clusters of the full row and column dendrograms 2015-04-23 warnes * [r1955] Update NEWS and ChangeLog * [r1954] In heatmap.2(), the color key now properly handles color breaks that are not equally spaced. (Issue reported by Tim Richter-Heitmann.) * [r1948] - plotCI() was not properly respecting the 'type=' argument. This has been corrected. * [r1947] - Remove stray browser() call from overplot() * [r1943] Explicitly specify argument to gplots:::reorder.factor to prevent error. * [r1942] - The returned object from venn() now includes a 'interesection' attribution containing a list of which items are in each set intersection. This can be turned off by settting 'intersection=FALSE'. * [r1941] Patch submitted by Ilia Kats: - easily extract and plot subclusters from a big heatmap using the same colorkey, by passing a dendgrogram of the subcluster together with the full data matrix and, optionally, the breaks of the full heatmap in order to obtain the same color scaling. This is useful if one wants to plot several subclusters as different panels in a paper, but maintain consistent color coding. - Improves the behavior of the color key axis labels, as they now honor par("cex") and par("cex.lab"). * [r1940] In heatmap.2() split calls to distfun() and hclustfun() into separate steps to make debugging easier 2015-04-22 warnes * [r1931] Update DESCRIPTION, ChangeLog, and NEWS for gplots 2.17.0 * [r1930] heatmap.2: add new 'colRow' and 'colCol' arguments to control the color of row and column text labels 2015-04-06 warnes * [r1916] Add ChangeLog files to repository 2015-01-02 warnes * [r1913] Update for gplots release 2.16.0. * [r1912] Change default group count lable back to 'n='. * [r1911] - plotmeans: Pass optional graphical arguments captured in '...' axis function used to draw the x axis. - plotmeans: Add an new argument 'text.n.label' to specify the text used for labelingthe number of elements in a group. * [r1910] - Remove S-Plus-specific code - Simplify model frame code 2014-12-03 warnes * [r1909] Update stored test output to account for new startup message from KernSmooth package * [r1908] Fix package title capitalization. 2014-12-02 warnes * [r1907] Add descrioption of node stack overflow issue and work-around. * [r1906] Move '...' argument to bandplot.formula to match man page. * [r1905] plot.dendrogram isn't exported by gplots, so it must be referenced using the ':::' notation. * [r1904] Man page fixes. * [r1903] Add exports of new bandplot methods to NAMESPACE file. * [r1902] Code cleanup. * [r1901] Simplify model.frame code for bandplot.formula. 2014-12-01 warnes * [r1900] Update for 2.15.0 * [r1899] Convert bandplot to S3-method dispatch and add method for class formula. * [r1898] Improve whitespace 2014-09-17 warnes * [r1895] Minor reformatting. * [r1894] Explicitly reset namespace for dendrogram functions copied from stats. * [r1893] Update DESCRIPTION and NEWS for gplots 2.14.2 * [r1892] To work around recursion limit issues triggered by deeply nested dendrograms, (1) create a local *intepreted* copy of stats:::plotNode(), (2) detect recursion limit error message within heatmap.2() and generate a more user-friendly message. * [r1891] Add test case for exceeding recursion limits when plotting deeply nested dendrograms * [r1890] heatmap.2 was not properly handling integer vectors for Rowv and Colv. * [r1889] key.title=NA was not being honored when density.info=NA. 2014-09-16 warnes * [r1888] Add plotNode code to allow modificaiton of algorithm from recursive to iterative for the purpose of avoiding node stack overflow. * [r1887] - Correct statement of default color for 'notecol' argumemt to 'heatmap.2'. - Modify default arguments to 'symbreaks' and 'symkey' to make the logic more evident by replacing min() with any(). (The previous code executed properly, but relied on implicit coercion of logicals to numeric, obscuring the intent.) 2014-06-30 warnes * [r1823] Fix typo in dendrogram size checking code. 2014-06-19 warnes * [r1822] Fix typo 'ColInd' --> 'colInd'. * [r1821] Update for gplots 2.14.0 2014-06-17 warnes * [r1820] - Document new 'key.title', 'key.xlab', 'key.ylab', 'key.xtickfun', 'key.ytickfun', 'key.par' arguments to heatmap.2 (belated commit). - Document new 'reorderfun' argument to heatmap.2. * [r1819] Allow user to specify function used to reorder based on the dendogram via a new 'reorderfun' argument. Suggested by Yuanhua Liu. * [r1818] Fix typo in heatmap.2() reported by Yuanhua Liu. 2014-06-05 warnes * [r1817] Check size of Rowv and Colv dendogram objects to ensure they matches data. 2014-04-17 warnes * [r1812] Add see also to r2d2::freq2d. * [r1811] Add reference to r2d2::conf2d. 2014-04-09 warnes * [r1802] Add padj=0.5 to better align margin labels. 2014-04-05 warnes * [r1781] Update NEWS * [r1780] Add 'extrafun' argument to heatmap.2 to allow the user to perform additional customization by providing a function to be called before heatmap.2 exits. 2014-04-04 warnes * [r1779] Update for gplots 2.13.0 * [r1778] Fix handling of row trace (hline). Bug report and patch provided by Ilia Kats. 2013-10-21 warnes * [r1744] Handle 'ask' argument in lmplot2 function proper, rather than in (depreciated) plot.lm2 wrapper. * [r1743] Correct release number * [r1742] Handle 'ask' argument in lmplot2 function proper, rather than in (depreciated) plot.lm2 wrapper. * [r1741] Fix typo 2013-10-15 warnes * [r1740] Add boxplot2 and lmplot2 to NAMESPACE * [r1739] Update for gplots release 2.12.1 * [r1738] Rename boxplot.n to boxplt2 and plot.lm2 to lmplot2 * [r1737] Make lmplot2 manual page from plot.lm.2 manual page. * [r1736] Make boxplot2 manual page from boxplot.n manual page. * [r1735] Create deprecated man page from boxplot.n man page 2013-10-12 warnes * [r1734] Update NEWS with latest changes * [r1733] Mark one example dontrun to avoid --as-cran warning. 2013-10-11 warnes * [r1732] Allow standard S3 method handling to locate the correct function. * [r1731] Fix error when a subgroup contains no finite values * [r1730] Update test output * [r1729] Move several packages from Depends to Imports, Suggests * [r1728] Use gdata::nobs in example * [r1727] caTools and KernSmooth now have namespaces, so import from them. * [r1726] Update files for gplots 2.12.0 * [r1725] Update files for gplots 2.12.0 * [r1724] Add parameters to control row and column label positioning, rotation, justification, and offset. * [r1723] Fix bug in getVennCounts.data.frame when number of TRUE cases in each variable are equal. 2013-06-28 warnes * [r1680] Update PDF file, including new email addresses 2013-06-27 warnes * [r1679] Update for gplots 2.11.3 * [r1678] Update for release 2.11.3 * [r1677] Update with tests for only 1 row/column separator * [r1676] Fix typo * [r1675] Add test for one row/column separator * [r1674] Add more in-line comments * [r1673] Modify sinkplot to use a local environement to store its information instead of the global environment. 2013-03-24 warnes * [r1647] Update news for release 2.11.2 * [r1646] Add ci.width argument to barplot2() to allow varying the length of the 't' at the end of confidence interval bars. * [r1642] Update for release 2.11.2 * [r1641] Update manual page for lowess.default() to match changed argument list for lowess() in R 3.0.0 2012-12-14 warnes * [r1631] Fix typo: warn() instead of warning(). * [r1630] Fix syntax of VignetteIndexEntry in venn.Rnw. * [r1629] Add generated vignette pdf. * [r1628] Add required VignetteIndexEntry metadata to venn vignette code. * [r1627] Update DESCRIPTION and NEWS for release 2.11.1. * [r1626] Improve venn() to work with PDF and Sweave/pdflatex. Provide a vignette for venn(). * [r1625] Fix error in processing the colsep argument to heatmap.2. * [r1624] Clarify that plotmeans is intended for a *continuous* outcome based on a *factor* grouping level. * [r1623] Replace corrupted BalloonPlot.pdf file and remove svn properties that were causing it to be corrupted. 2012-06-08 warnes * [r1558] Update NEWS for 2.11.0 release. * [r1557] Fix R CMD check warnings. * [r1556] Move incorrectly placed closing brace. 2012-06-07 warnes * [r1555] Object returned by hist2d() has been changed: - $x and $y now contain the n midpoints of the bins in each direction - $x.breaks, $y.breaks now contain the n+1 limits of the bins in each direction The function print.hist2d() has been updated appropriately. * [r1554] Correct error in handling binning: (N+1)x(N+1) bins were being created instead of NxN bins, and the highest row/column in each direction was being omitted from the results and plot. * [r1553] Add default value for lwd argument to plotmeans() 2012-05-31 warnes * [r1533] Properly mark up S3 method. 2011-12-09 warnes * [r1519] Add 'lwd' (linewidth) to arguments handled by plotmeans. 2011-09-02 warnes * [r1505] Update NEWS for release 2.10.1. * [r1504] Increment version counter. * [r1503] Add necessary alias statment to man files for for 'hist2d' and 'ci2d' print methods. * [r1502] Fix naming error * [r1501] Provide print() methods for 'hist2d' and 'ci2d' objects. * [r1498] Correct dependence on R >= 2.10 2011-09-01 warnes * [r1491] - Correct issues in ci2d() man page. * [r1490] - Comment out import from KernSmooth in NAMESPACES, since KernSmooth doesn't provide a namespace. - Update a test output. * [r1489] - Update NEWS file and correct version number * [r1488] - Depend on KernSmooth package. Increment version number. * [r1487] - Depend on KernSmooth package and import 'bkdeD2' and 'dpik'. * [r1486] Improvements to ci2d(): - Add option to utilize KernDensity::bkde2D to estimate the 2-d density (now the default). - Add option to display points for original data on generated plots - Name elements of returned contour list according to the significance level to make it easier to select desired contours. - Improve handling of x and y labels * [r1485] Remove log tag and comments from top of the file. 2011-08-26 warnes * [r1478] Update NEWS for 2.10.0 release * [r1477] Add dependency on R>= 2.10 to handle compressed Rda data file. * [r1476] Compress rtPCR example data set to make distributed package smaller. * [r1475] Remove '1.0' confidence line from ci2d(..,show="contour"). 2011-08-25 warnes * [r1474] - Add 'ci2d()' to compute 2-dimensional emipirical confidence interval. - Fix parse error in help page for 'rich.colors()'. 2011-08-16 warnes * [r1473] Update DESCRIPTION file for 2.8.1. * [r1472] Add 'alpha' argument to rich.colors() to control transparency. * [r1471] Accellerate hist2d by replacing for() loop with tapply(), and allow user to specify summary function applied, per suggestion by Peter Hagedorn (PHA -at- santaris -dot- com). 2011-05-02 arnima * [r1470] Added argument 'alpha' and removed argument 'rgb' in rich.colors() 2010-12-13 warnes * [r1463] Correct error that arises when data includes NA values, identified by Melissa Key 2010-06-11 warnes * [r1446] Fix errors detected by R CMD check * [r1445] Fix errors detected by R CMD check * [r1444] Use 'TRUE' instead of 'T' for true in venn man page * [r1443] Update for gplots 2.8.0 * [r1442] Moved baseOf() into a separate file * [r1441] Update Greg's email address * [r1440] - venn() now returns an object of class venn() and a plot method for this class is provided. - Manual page for venn has been improved, based on contributions by Steffen Moeller 2010-02-17 warnes * [r1420] Improve performance of hist2d thanks to suggestion by Joerg van den Hoff. 2010-01-22 arnima * [r1372] Renamed files rich.color.* to rich.colors.* and renamed rich.colors args 2009-11-16 arnima * [r1367] Minor reformatting only. 2009-11-12 warnes * [r1365] Correct bug reported by Alan Yong: plotmeans() crashed when 'bars=FALSE'. 2009-10-22 warnes * [r1364] Fixed typo in bug fix. * [r1363] Update NEWS and DESCRIPTION for gplots 2.7.3 * [r1362] Fix transposed display of data (but not labels) in heatmap.2 when symm=TRUE 2009-10-12 warnes * [r1361] Update version number to 2.7.2, 2.7.1 was already up but apparently DESCRIPTION wasn't commited with change. 2009-10-10 warnes * [r1360] Various minor changes to remove new R CMD CHECK warnings. * [r1359] Update DESCRIPTION and NEWS file for 2.7.1 * [r1358] Fix bug reported by Ken Lo: col2hex had blue and green components swapped. 2009-05-08 warnes * [r1324] Add test of using a dendrogram created by heatmap() with heatmap.2() * [r1323] heatmap.2: handle NA for RowV or ColV the same way as NULL * [r1322] Fix typo * [r1321] Update NEWS for release 2.7.0 * [r1320] We don't want the Changelog in svn, since it is autogenerated from svn logs! * [r1319] Update Greg's email address to 'greg@random-technologies-llc.com' * [r1318] plotCI now properly handles 'NULL' and 'NA' values for ui, li, uiw, and liw. * [r1317] heatmap.2: Add option to create breakpoints symmetric around 0, provide additional information in the return value * [r1316] Fix Rd syntax error 2009-04-22 warnes * [r1315] VADeaths data set has move to dataset package 2008-08-14 warnes * [r1302] balloonpot() was incorrectly displaying warning about z values below 0 when scale.method="relative". Fixed. 2008-08-07 warnes * [r1301] Update DESCRIPTION NAMESPACE and NEWS for 2.7.0 release 2008-06-16 warnes * [r1296] Add TODO list to gplots 2008-05-20 warnes * [r1274] Update man page to match recent changes to plot.lm2() * [r1273] More work on documentation for venn() * [r1272] Fix code/doc mismatch due to recent changes to bandplot() * [r1271] Add Venn Diagram plot submitted by Steffen Moeller 2008-05-07 warnes * [r1264] Improve performance of bandplot by calculating running standard deviation using caTools::runsd() instead of (ver slow) window() call. In addtion, the standard deviations are now only calculated once, rather than once for each band. * [r1263] Improve performance of plot.lm for large lm objects by using fitted() instead of predict() to get y-hat 2008-05-05 warnes * [r1262] Use caTools's runsd in bandplot for a dramatic speedup for large data * [r1261] Add import of gtools::reorder.factor for ballonplot man page * [r1260] balloonplot: Add option to scale balloons so [min,max]->[0,1] (relative) or so [0,max] <- [0,1] (absolute) 2008-04-07 warnes * [r1254] Fix typo in barplot2() man page * [r1253] Updates for gplots 2.6.0 * [r1252] Add ability to control location of individual heatmap.2 components 2008-03-27 warnes * [r1251] Fix bug in handling rowsep, per suggestion by Steven Paugh 2008-01-04 warnes * [r1238] Fix examples for overplot() 2008-01-02 warnes * [r1237] Update Marc's email address 2007-12-20 warnes * [r1235] Two letter clarification of help text for heatmap.2() * [r1234] Restore plot layout at end of ooplot() example 2007-11-06 warnes * [r1222] Remove extraneous closing brace in the hist2d documentation file 2007-11-05 warnes * [r1221] Fix typo in NEWS: col2hex() is the new function, not col2rgb() which is part of grDevices 2007-11-02 warnes * [r1219] Updates for gplots 2.5.0 * [r1218] Update saved test output due to changes in how R reports warnings * [r1217] Create soft links of gmodels/ChangeLog -> gmodels/inst/ChangeLog, and gmodels/NEWS -> gmodels/inst/NEWS for my convenience * [r1216] Move actual ChangeLog and NEWS files to gmodels/inst so they will be copied into the installed R package area * [r1215] Fix code/doc mismatches * [r1214] Update plot.lm2 to match changes made to bandplot 2007-11-01 warnes * [r1213] in textplot(), convert tab characters to spaces before processing to avoid problems with computing height and width of text including tabs when using pdf() * [r1212] Minor reformatting of overplot code and docs 2007-10-22 warnes * [r1196] Clarify GPL version 2007-08-14 warnes * [r1141] Correct error in balloonplot when z contains NA values. * [r1140] Augment balloonplot() with control of character size and color for text and label items * [r1139] Correct balloonplot.default to properly show specified x and y axis labels when explicitly provided 2007-03-09 ggorjan * [r1073] use of \method in Rd markup - issues a warning with _R_CHECK_RD_STYLE_=TRUE env. variable with R 2.5.0 2007-02-08 warnes * [r1052] Bump version number * [r1051] Update documentation for textplot() * [r1050] Add col2rgb() function to convert color names to rgb hex codes * [r1049] Add paramaeters 'col.data', 'col.rows', and 'col.columns' to textplot.matrix to allow specification of the color of the matrix data, rows, and columns. * [r1048] Add parameters to control line width and line type. 2006-11-14 ggorjan * [r1012] Removed executable property 2006-11-14 warnes * [r1010] Update output file to match (trivial) changes in the test code. * [r1008] Update ChangeLog and NEWS files for release 2.3.2. * [r1007] Update version number * [r1006] Update version number and maintainer * [r1005] Correct problem with labeled correlation matrix example. Thanks to Jean Vidal for reporting the error.. 2006-08-02 warnes * [r977] Update my email address 2006-06-26 nj7w * [r967] Fixed a bug which displayed warnings when Rowv and Colv were specified as dendrograms 2006-03-10 warnes * [r937] Remove code that added a local path 2006-03-09 nj7w * [r935] Added the correct library path where gplots is installed locally and corresponding .save file * [r934] Updated the tests file * [r933] Removed the condition Colv != Rowv as it has already been taken care of * [r932] Deleted rtPCR.rda from the main directory * [r931] Added ChangeLog 2006-03-07 nj7w * [r919] Updated ChangeLog and NEWS * [r918] Added the tests and fixed corrupted files * [r917] Replaced the corrupted rtPCR.rda file in data directory * [r916] Removed the corrputed tests directory * [r915] Replaced the corrupted rtPCR.rda file in data directory 2006-03-03 nj7w * [r914] Updated the code and man page to make sure the Rowv and Colv values are properly handled 2006-03-02 warnes * [r908] Adjust row total placement to adjust for width of the totals * [r907] Row totals in ballonplot were in reverse order. Fixed. 2006-02-23 nj7w * [r899] Add ability to scale the color key using the new 'keysize' argument. * [r898] Add tests for heatmap.2 * [r897] Move heatmap and ballonplot paper source materials to their respective cvs modules * [r896] Moved balloonplot paper materials to BallonPlotPaper cvs module * [r891] Remove heatmap paper files and move them to the HeatmapPaper cvs module. * [r888] Added figures for heatmap2 paper * [r887] Added the .Rda files for the heatmap2 paper * [r886] Added the source - (tex file) of the heatmap paper * [r885] Added the code for the figures of heatmap paper 2006-02-21 nj7w * [r884] Minor updates to heatmap.2 - fixed Rowv, Colv and dendrogram behaviour. Now Rowv=NULL or FALSE both imply no dendrogram computation. 2006-01-12 warnes * [r844] more updates * [r843] Add Biometrica bibliography style file * [r842] A little more. * [r841] Updates to respond to referee. 2006-01-12 nj7w * [r840] Added references 2005-12-13 nj7w * [r811] Fixed Nitin's company name * [r809] Updated NEWS and removed ChangeLog 2005-12-12 nj7w * [r802] Fixed bug in plotmeans - based on Stefano Calza's suggestion 2005-12-07 nj7w * [r787] Updated version number * [r786] Added plot.lm * [r785] Changed the default grey colors to heat colors, if height is matrix * [r784] Changed the default greay colors to heat colors, if height is matrix 2005-12-06 nj7w * [r783] Fixed minor error in documentation of barplot2 2005-12-02 warnes * [r777] Remove .Alias calls, since .Alias is defunct. 2005-12-01 nj7w * [r776] Updated Greg's email address 2005-11-23 nj7w * [r764] Updated Figure 2 colors 2005-11-18 warnes * [r743] Latest version of the pdf files * [r742] Nitin works for the Cambrige Group, not Pfizer. * [r741] Minor text rewording. * [r740] More edits. * [r739] Recent changes to align row totals with the overall total broke how the marginal cumulative fractions were displayed. This patch fixes the problem. * [r737] - Update documentation for balloonplot to match the latest code. - Correct spelling of 'show.zeroes' to 'show.zeros' * [r736] More changes: colorpanel now allows only 2 colors to be specified if no 'middle' color is desired. 2005-11-17 warnes * [r735] Allow user to control removal of duplicate entries in balloonplot. * [r734] Extend colorpanel to handle just two-colors in addition to three. 2005-11-09 nj7w * [r733] Updated the pdf file * [r732] Updated the changes * [r731] Modified figure 4 * [r730] Updated code * [r729] Modified figure 3 * [r728] Modified figure 2 * [r727] Modified figure 1 2005-11-08 nj7w * [r726] Updated Greg's email 2005-11-07 nj7w * [r725] Minor modifications to fit the code properly on pdf 2005-11-07 warnes * [r724] Add R code that generates plots * [r723] Add figures to CVS * [r722] Text changes 2005-11-04 warnes * [r721] Fix some alignment issues. * [r720] Remove Table.pdf since it is no longer needed * [r719] Nitin's Changes * [r718] Add figure plots * [r717] Fix paths 2005-10-20 nj7w * [r705] added the eps version of figures * [r704] Updated BallonPlot.pdf * [r703] Removed Old Figure * [r702] Added the new figure - for total popluation - Balloonplot * [r701] Modified the BallonPlot article * [r700] Added references 2005-10-19 arnima * [r697] The last example now displays the correct heat.colors. Default 'palette' argument is now a single string, not a vector. * [r696] Default 'palette' argument is now a single string, not a vector. 2005-10-14 warnes * [r694] Formatting fixes: - Handle multiple row or column category variables - Separate rows/columns of category labels by lines - Fix handling of 'cumsum' plots on row/column labels - Improve display of row/column sums 2005-10-13 warnes * [r693] Add example using Titanic data that exercises the multi-factor display. 2005-10-11 warnes * [r692] Initial changes to allow multiple x and y factor variables. Yet to be done: 1) remove extra 'boxes'. 2) omit duplicated values 2005-10-04 warnes * [r691] more minor fixes * [r690] fix spacing * [r689] Inlcude Rnews.sty * [r688] Some textual edits. 2005-10-03 nj7w * [r687] Added figures for the R-News Article 2005-09-29 nj7w * [r680] Updated the documentation - added the name of the person who asked the question * [r679] Added R-news article 2005-09-12 nj7w * [r671] Updated Greg's email * [r670] Updated version of balloonplot - by Romain Francois 2005-09-09 nj7w * [r669] Updated the version and ChangeLog * [r668] Changes in ballon plot based on Romain Francois (francoisromain@free.fr) suggestions 2005-09-06 nj7w * [r666] Updated package dependencies * [r665] Added NEWS 2005-09-02 nj7w * [r655] Added ChangeLog 2005-08-31 nj7w * [r644] Added DESCRIPTION file * [r643] removed DESCRIPTION.in 2005-06-09 nj7w * [r625] Updating the version number, and various help files to synchronize splitting of gregmisc bundle in 4 individual components. * [r624] Changes based on Marc Schwartz's suggestions to handel 0's and NA's appropriately. 2005-05-13 nj7w * [r621] 1) Using dQuote.ascii function in read.xls as the new version of dQuote doesn't work proprly with UTF-8 locale. 2) Modified CrossTable.Rd usage in gmodels 3) Modified heatmap.2 usage in gplots. 2005-04-04 warnes * [r603] Explicitly reference package containing lowess.formula in panel.overplot(). This should fix the error reported by Troels Ring . 2005-02-26 nj7w * [r565] *** empty log message *** 2005-02-25 warnes * [r563] Integrate changes submitted by Arni Magnusson * [r559] Add dependency imports from 'stats' package. 2005-02-22 warnes * [r555] Fix problem in passing graphical parameters (xlim,etc).@ 2005-02-08 warnes * [r541] Improve package title. * [r540] Ignore missing values when computing symmetric range. 2005-02-02 warnes * [r530] Add more extensive example. 2005-01-14 warnes * [r516] Code can be simplified because R now supports selecting a fixed width font. 2005-01-12 warnes * [r515] Add dependency on R 1.9.0+ to prevent poeple from installing on old versions of R which don't support namespaces. 2004-11-30 warnes * [r495] 1. Add new parameters for controlling color key: - If `symkey==TRUE', the color key will be made symmetric about 0. - The `densadj' parameter can be used to modify the smoother width (see the `adjust' parameter under `help(density)') for the density plotted in the key. 2. Fix handling of rowsep/colsep. 3. Vector of length 2 giving the width (colsep) or height (rowsep) the separator box drawn by colsep and rowsep as a function of the width (colsep) or height (rowsep) of a cell. 4. Appropriate changes to the corresponding help page, plus some minor formatting changes. 2004-11-03 warnes * [r474] Fix bugs in layout of cell notes. They were being plotted top down rather than bottom up. Further reordering of the x matrix didn't also reorder the notes. Both issues should now be resolved. 2004-09-27 warneg * [r461] Updated to pass R CMD check. 2004-09-03 warneg * [r453] Provide explicit package for call to nobs. * [r452] Fix typos. * [r446] initial bundle checkin 2004-09-02 warneg * [r442] Initial revision 2004-07-29 warnes * [r426] Integrate changes from the version of plotCI maintained by Martin Maechler. 2004-06-30 warnes * [r393] Remove commented-out code. * [r392] Fixed text size calculations 2004-06-28 warnes * [r391] - Default 2-d color set to grey as in (v2.0.0) r-devel - The default (v1.9.1) barplot method now handles vectors and 1-d arrays (e.g., obtained by table()) the same, and uses grey instead of heat color palettes in these cases. (Also fixes PR#6776.) - Updated to reflect the addition of 'offset' argument in base - Fix bug in stacked barplots, which would not be plotted properly 2004-06-24 warnes * [r385] Add ability to specify color of NA cells. 2004-05-27 warnes * [r349] Fix spelling error. 2004-05-26 warnes * [r347] One more fix to get it right. * [r346] Use triple-colon operator ':::' to access plot.formula from the graphics package. * [r344] Replace 'F' by 'FALSE' to pass R CMD check. 2004-05-25 warnes * [r338] Work around bug in R 1.9.X due to plot.formula() not having the same arguments as plot(). * [r336] Add rich.colors() submitted by Arni Magnusson . * [r328] ?? 2004-05-24 warnes * [r324] Modified to use invalid() to check arguments instead of missing(). This fixes some build errors under R-1.9.0-Patched. 2004-04-22 warnes * [r319] Integrate changes from Lodewijk Bonebakker 2004-04-13 warnes * [r318] Add ability to space points along 'y' direction. 2004-04-02 warnes * [r313] Fixed smartlegend() positioning when x and/or y axis are log-scale. 2004-03-30 warnes * [r311] - Fix bug in textplot() reported by Wright, Kevin . 2004-03-26 warnes * [r305] Update to match changes in textplot() code. * [r304] Remove Windows EOL characters. * [r302] - Remove some commented-out code. - Remove cvs log tag. * [r300] Misc changes. 2004-02-17 warnes * [r290] Minor fix to ooplot documentation. * [r289] Integrate ooplot updates provided by Lodewijk Bonebakker 2004-02-02 warnes * [r287] - Add colorpanel function, which generates a smoothly varying band of colors over a three color range (lo, mid, high). 2004-01-21 warnes * [r283] - Correct arguments to halign to match code. * [r281] Track R 1.9.0's move of 'lowess' from the base package to the (new) stats package. * [r279] - Fix sinkplot() example by replacing 'T' with 'TRUE'. * [r278] - Add some more details to the ooplot() documentation. The documentation is *not* complete. * [r277] - Mark sprint() as depreciated. - Replace references to sprint with capture.output() - Use match.arg for halign and valign arguments to textplot.default. - Fix textplot.character so that a vector of characters is properly displayed. Previouslt, character vectors were plotted on top of each other. 2004-01-19 warnes * [r276] New function sinkplot(), as requested on R-devel by Kevin Wright in https://www.stat.math.ethz.ch/pipermail/r-devel/2004-January/028483.html. 2004-01-15 warnes * [r274] Add initial code and docs for ooplot() function submitted by Lodewijk Bonebakker . 2003-12-03 warnes * [r253] - match function argument defaults with 'usage' * [r252] - Fix buglets in heatmap function - Make a slight enhancement to the example code. 2003-12-02 warnes * [r251] Integrated some suggestions from Sean Davis . * [r250] - Make final example use 16 colors instead of 8. This looks nicer. * [r248] - Remove '%' character from example code to avoid errors. * [r247] - Add '...' parameter to call to text to allow user to control size/color/etc. 2003-12-01 warnes * [r246] - updated to match changes to barplot() in base. * [r245] - Renamed rtPCR.Rda to rtPCR.rda so that R will properly load the file when data(rtPCR) is executed. * [r243] - Follow patches applied to barplot() in base. 2003-11-24 warnes * [r242] Fix unbalanced braces. * [r240] Fix errors reported by R CMD check. 2003-11-21 warnes * [r239] Added missing closing brace. * [r238] Initial addition of these files. Used in examples of overplot(). * [r236] Applied my enhancements to the heatmap() code from R 1.8.0, and added documentation of these changes. * [r235] - Discovered that axis(N) does the right thing without needing to be given location for tick marks. This allowed simplification of the code. - Minor other changes for distribution - Addition of overplot.Rd documentation. * [r231] - Integrated my extensions into the R 1.8.0 version of heatmap. - Add Rd documentation. 2003-11-19 warnes * [r228] Remove extranious NULL that confused R CMD check. 2003-11-18 warnes * [r226] - Tiny fix to remove R CMD check error. * [r225] - Added missing closing brace. * [r224] - Convert from MS-Dos to Unix line endings. - Reformat to 80 columns. 2003-11-10 warnes * [r220] - Add files contributed by Arni Magnusson . As well as some of my own. 2003-08-19 warnes * [r219] - Copy of local changes. * [r218] - Checkin before re-integrating local changes. 2003-06-19 warnes * [r201] - Added enhanced heatmap function. 2003-06-09 warnes * [r200] - Add help text for smartlegend. * [r199] - New function smartlegend(). 2003-04-22 warnes * [r191] - Fixeed warning messing caused when 'connect' is a vector. * [r187] Update from Marc Schwartz, modified by Gregory Warnes: - Modified dim() checks for 'ci.l' and 'ci.u' against 'height' to remove R v1.7.0 if() based error msgs for vector conditions. 2003-04-04 warnes * [r182] - Change occurences of 'T' to 'TRUE' * [r179] - Updated to match changes in textplot function: - Added textplot.character - Renamed arguments "col.margin" and "row.margin" to "cmar", and "rmar" so that specifying "col='red'" is possible. - Fixed R CMD check errors - Improve comments in example - Add textplot.matrix example * [r178] - Added textplot.character to handle character strings. - Moved test for vector and matrix arguments to textplot.default. - Renamed arguments "col.margin" and "row.margin" to "cmar", and "rmar" so that specifying "col='red'" is possible. 2003-04-02 warnes * [r175] - Added textplot function and friends, as well as documentation. 2003-03-08 warnes * [r171] - Forgot to update arglist in \usage section. * [r169] - Added parameters for rotation of and amount of space allocated for the row and column labels. 2003-03-07 warnes * [r168] - Minor changes to code to allow the package to be provided as an S-Plus chapter. * [r167] - Add 'NULL' as the last element of if statement that defines lowess.default so that when the file is sourced, S-Plus doesn't display the function definition. * [r166] - Specify where the defualt lowess function should be found. - Use getFunction in S-Plus instead of 'get' 2003-01-30 warnes * [r159] - Added argument 'add' to allow for the addition of a barplot to an existing graphic. Default is FALSE 2003-01-20 warnes * [r156] - Updated balloonplot help page. * [r155] - Updated wapply.R to allow specification of evaluation points when method is 'width' or 'range' using the 'pts' argument. - Updated wapply.Rd to add 'pts' argument - Fixed typos, spelling errors, gramatical errors and lack of clarity in wapply.Rd help text. 2003-01-03 warnes * [r154] - Initial checkin of balloonplot functions and documentation. * [r153] - Added reference to and comparison example of sunflowerplot. - Added code to put example plots on same plot window using par(mfrow=...). 2003-01-02 warnes * [r150] - Changed assignment statements that used "=" to "<-" to avoid syntax errors in older versions of the S language. * [r149] - Added wrapper code so that R-specific fiddling won't be executed under S-Plus. * [r147] - Renamed first parameter to match qqnorm generic. * [r146] Added additional help text from Kjeitl. 2002-12-31 warnes * [r145] Initial checkin of qqnorm.aov function and documentation submitted by Kjetil Halvorsen . 2002-11-04 warnes * [r143] Updates from Marc Schwartz: - Updated underlying code to be based upon the new barplot() in R v1.6.1 - This now uses the 'axis.lty' and 'border' arguments - In R v1.6.0, R Core introduced a new function called axTicks(). This is an R equivalent of the C code for CreateAtVector in plot.c. This now enables me to get the axis tick mark positions consistently when the 'height' related axis is either linear or log. Thus, I can now have consistent tick marks and can plot grid lines in either situation. If 'plot.grid = TRUE' and 'grid.inc' is specified, then I still use pretty() to determine the tick marks and lines. - This code now depends on R 1.6.0 or later. 2002-10-30 warnes * [r139] - Commented out plot.lm() code since recent changes in R have broken it. 2002-10-11 warnes * [r131] - Fixed log scale errors in legend() call 2002-10-01 warnes * [r130] - Added examples of using 'contour' and 'filled.contour' for display. 2002-09-24 warnes * [r121] - Changed digits=options("digits") which produces a list of length 1 to digits=getOption("digits") which returns a vector of length one. The former was causing an error when passed to round(). 2002-09-23 warnes * [r119] - Fixed syntax errors in barplot2.Rd and CrossTable.Rd - Fixed incorrect translation of 'F' (distribution) to 'FALSE' in glh.test.Rd * [r117] - Modified all files to include CVS Id and Log tags. * [r116] - Added CrossTable() and barplot2() code and docs contributed by Marc Schwartz. - Permit combinations() to be used when r>n provided repeat.allowed=TRUE - Bumped up version number 2002-08-01 warnes * [r114] - Corrected documentation mismatch for ci, ci.default. - Replaced all occurences of '_' for assignment with '<-'. - Replaced all occurences of 'T' or 'F' for 'TRUE' and 'FALSE' with the spelled out version. - Updaded version number and date. 2002-04-09 warneg * [r109] Checkin for version 0.5.3 2002-03-27 warneg * [r107] Added "..." argument to lowess.default. * [r106] - Added code to append "..." to the argument list of lowess.default. - Fixed a wrong default for f in lowess.formula. Was 3, but should have been 2/3. 2002-03-26 warneg * [r104] - Changed methods to include '...' to match the generic. - Updated for version 0.5.1 * [r100] Initial checkin. 2002-03-20 warneg * [r94] - Changes to add compatibility with S-Plus 2000 * [r93] - Changes to add compatibility with S-Plus 2000. * [r92] - Updated to work in S-Plus 2000 as well as R. 2002-03-05 warneg * [r88] - Replace "T" with "TRUE". Problems arrive when there is a variable named "T". 2002-02-20 warneg * [r81] Minor changes, typo and formatting fixes. * [r80] - Generalized to allow specification of the multiples of the standard deviation levels to be plotted (0=mean, 1=1 sd, ..). - Now (invisibly) returnes computed smooths. 2002-02-16 warneg * [r78] Added bandplot documentation. * [r77] - Fixed Bug: When method=="range", the absolute range of x was being used to compute the relative width instead of the (correct) relative range. * [r76] - Corrected problem removing missing values: The missing values of $x and $y were being removed indepdendently, leaving an uneven number of points in the result. 2002-02-04 warneg * [r74] - Add na.rm parameter and make the default TRUE. * [r73] Initial checkin. * [r72] - When err="x", 'col' was being used to plot bars, rather than 'barcol'. * [r71] - fixed typo, when err="x", lty was 'slty' causing an error. 2001-12-12 warneg * [r54] - Quoted underscore character in my email address. - Added correct keyword. * [r52] Added documentation for xaxt parameter. * [r51] Updated to explicitly list control arguments to lowess.formula. * [r50] Initial checkin. Code copied from R source package and extended. 2001-12-07 warneg * [r46] Fixed an problem where \code was incorrectly delimited by parens rather than curly brackets. * [r42] Initial checkin. * [r41] - Added cvs tags. * [r40] - Leave first point at center, rather than shifting by s/2 to the left. This looks better when there are more than 2 'spaced' points. 2001-12-05 warneg * [r33] - Added ability to use the t-distribution to compute confidence intervals. This is controlled using the 'use.t' parameter. * [r31] - Added documentation of use.t parameter. * [r30] - Clarified how the width of the window is computed when method="nobs". * [r29] - Added a better default for "width" when method="nobs". For this case, width=max(5, length(x)/10). - Allow omission of x values which result in missing y values via 'drop.na' parameter. 2001-10-26 warneg * [r28] Added correct handling of 'xaxt="n"'. 2001-10-16 warneg * [r27] Fixed unbalanced brace. * [r26] Added minbar and maxbar parameters. * [r25] Forgot to add minbar and maxbar to usage section. * [r24] Added description of minbar and maxbar. * [r23] - Added minbar and maxbar parameters - Added cvs id and log tags to header * [r22] Added cvs id and log tag to file header * [r21] Added minbar and maxbar parameters. * [r20] Added description of minsd parameter. * [r19] Added minsd parameter. 2001-09-18 warneg * [r18] Release 0.3.2 2001-09-01 warneg * [r16] Release 0.3.0 2001-08-31 warneg * [r15] Used wrong character in header (% instead of #). Fixed. * [r14] Used wrong comment character (% instead of #) in header. Fixed. 2001-08-25 warneg * [r10] Initial checkin. * [r9] Added CVS header. * [r8] Initial Checkin 2001-05-30 warneg * [r2] Initial revision gplots/README.md0000644000176200001440000000303213727105263013045 0ustar liggesusers [![Build Status](https://travis-ci.org/talgalili/gplots.png?branch=master)](https://travis-ci.org/talgalili/gplots) [![codecov.io](https://codecov.io/github/talgalili/gplots/coverage.svg?branch=master)](https://codecov.io/github/talgalili/gplots?branch=master) [![CRAN_Status_Badge](https://www.r-pkg.org/badges/version/gplots)](https://cran.r-project.org/package=gplots) ![](https://cranlogs.r-pkg.org/badges/gplots?color=yellow) ![](https://cranlogs.r-pkg.org/badges/grand-total/gplots?color=yellowgreen) # gplots ## Introduction This repo is to keep the gplots package alive. I don't plan to develop new features, but if you'll send pull requests I'm willing to review them. ### Latest news You can see the most recent changes to the package in the [NEWS.md file](https://talgalili.github.io/gplots/news/index.html) ### Code of conduct Please note that this project is released with a [Contributor Code of Conduct](https://github.com/talgalili/gplots/blob/master/CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. ## Installation To install the stable version on CRAN: ```r install.packages('gplots') ``` And then you may load the package using: ```R library("gplots") ``` ## Usage TODO ## Contact You are welcome to: * Ask questions on: * Submit suggestions and bug-reports at: * Send a pull request on: * Compose a friendly e-mail to: gplots/data/0000755000176200001440000000000013626133602012475 5ustar liggesusersgplots/data/rtPCR.rda0000644000176200001440000006616013423343152014166 0ustar liggesusers7zXZi"6!Xul4])TW"nRʟ"d[:!';i! i9SDC6+zєI̞J9ֽ~aƃfEP} \W2&XO'e UӉ+p?hfL)g ȃR*@(2C1n+FH-5Öʴ;IHԲ y'tBHyBi9jErQѾn)8+Cube@3y.B% S2vn RpF$âNgWDw/,^>pUˀk4WqEzi/E 뗲]7wR U?,R$$v ȚB~uՑK(t23~ܭ"aW24%cO[Nc} q8G~6AJlOUkc-8۠p,ꅷG{b%!AF/.ZjvИ̇ P G͌;u&}g i-۸lŇEW[͔Q(QUzh~Fư_. 0}7z GŰĩU$GU t5o $8M}w<>5˜%'5j.)!~1{Bf7%'*y[j~=59~Q6w" `- 3Rt}q u1. hPo@ST>;?/+Y݈V5}vTUPhsK79b"KuE7z)oʝ,Չ~a/E]H0c戓GbIrNgjU ` 31nfHUU4* gڈJ'LǙOث-$ ZZMKѪ4b5 ®ಪUgOBe%wT9HFvJه(C嶴}7ҙUhE{+j]UkBbZLeǎx^$.zQ PBܸg\Vtn{,4c鰞F&R\ܵ򧦊* !AV;r{/G *3)!$ڽ(8׍/ݫsrhB xDWCh@f3:˞)"fa|ZoIsUj` k "Ҿmq R,-JΏdžEw= p:34}nUh> wvi[i \a ov2p 1+ a0m6 zX ٮ E# f \*ƀjܖKYlDiaF7eU){^]QI1nKN^%|FSVu?K Ƽp !qZ]zquyih]Չ.uCUkzl~b]aֿzO%f>JwI:ޏo3^.neh!(,ly tLz¾U򙹄J-OQ|HqQW1W-[K%C)&ϘSF~|5c\R֑3}x-P'Lr͢`E];ʅ}B_F9|c n;~mpݺ>i1F 6 `%7t;[4zGjB㏆tYU1E(k% i6yܡБN(lCi0խ.Q/C貙ut9Z;?D0#glN̤ $8ᴲO aT+g\9-!|^˲lڴ4Ԟɉ*EO(/LcqqvɫK)̾5aHs]4姂ϐu~TJ4+`}[iEFZO*'!bC%:܃C83z29;х[8D:Q}̤߇C $O !Y~{xwM v d T%Drxg=,8.!N1 k.DB.)Ycj~ͮ3{M5[0)ef'^5r+@D&+[%z(L%7zin&"r\΁{6@ns 7#p$ yAr+!ڄY+Coٷ kgVA1Tvcvyru4ˢ9na`{h6㰠`4ݾđiIdDE!4_O2q+UHtbU@lv2A<ňю FI=85b3ĥ@wPz1.ڐx(#lodЛY2ɬ# CU}xdĐg6~߅Tඵ{KiOҋ'RPPKzWf,x:wt {(Ь‹-=/K,Nc=g~t=1maZ-ux  ^ꩥG/lK2P>yV U!I8K-E|_IXϓ 9*Q@>.w· PEA*TSVI:Xs}5}0ȥ G2ՙeC$:G L2YUt_˰B-Ph ҸHI:y*AG$敨D]/]AU^;wfWh(vzhQ+*4'ƆkǞaH^ lr^v(p/Xe!1wq>&>gBz"{< Au Ā_辛x ʈ &1Eů~>f&ej g\+Ed6*VpG)ť8$- CC2œ]Ζz>Xu/[x@|9e^3|8qk<9<%rEt!њ+;șX>c|%W}.8Goy..9#~cցHЛ᝘ >b'! F%gnDHgc N&\? D7 Ȃ ?0I](.#/Af )#49'͒7r1!+~"?fw@{/A&:YPtdZ[^-J~3d,,a(j9CX#V}%_{/12| @_gFCk2xzɾ% b HLwnZT2tu|;'ɺ2mK72<_%[ZS=] ZJR1'lfή?^)7#'{ "wxޚbBWt obERjTFq~aonxYXP3FK%Dp&X cBD-YA@V::@]RnI +[f{.- [m ,FT8GwRAb+ז(|d?Y?r/T~TΜ@Ux@}10ՂH7e_XpcqeL{& "aMDTN 2{.+DQSS!4'9vQpIm yZUtUq^2{#;~pY+Q6)S<1˧6#X[88V_L 6x˓o&ER#'9AWO(ak@qF2F_5 9,`t,O$gTdگN`ZFARCD5p v{;+BB.uJֺlſt1Rh08=L$@"K-i\h/k=!No㧴՝Կ(ӚSCph(zzHc=F"{>54}]?tõ4YJyHd<+d6> iZY _OoKeL]O{‰ş12_kU63TD`!+y'Aa;nJ{ v+5BsPWb# eo5 h(:D$o"@;j#C B$`VzդtwJj{m#NUɏ:֯^Huon% pjm  sv.&6ѐrjx)a.M~||65gaoq_w 'G~:PuQ{Dsi5 _̅!נL6B{ 0 DƕB܂}(Jک a}e!HcstRzeBy0|(8SDdt E=UT݅AɼXQ갎Ln|@8 {&vKPJ2>2,44sIIvWz"aVR&;ie\NB4 ͪ| Y3z>SK s;Jkj](=މ]C/XFi+r/7dbzNǿ;hvg."^M IBsd1 )0^t~Г^toelDDzo52r10\\pXqԒQ7lyNÇieM9W)St^:$n(yc'mv (ƳuU/O3T I]IT]5|XeѼ8P{"3 K8J :XpCa_1P-YG45 ` &7JjVk9_ʒ2c4+ wJHoEa>Bre.pV+Mh`b :ٿ[{GZޡP-hXIyeez\ 9%1b+M+kJHy{/EћWa>q=ʢ"GJ/RQ<ՋI 43f0zw Ӓeb\Uhf@5> /5kHY{KD7zh -}F`?]!PQ=Je5ˬ P0]㻾`rmf3pHe:kqo=-ֹyQ5(mZfQchnz bc#N$j:_0fJ;cm67UJ68Y.xun~ YLz4ݓ/l{,zJ? ducXwh¦5͠(9^ȔUo=r|>{_%FK =SvߧsG`/5r@ǢM8ٿȰ+=tEη!#}CB9 M zg _gVuQgs-tTꛋmz՟D`̜0]OGZRgh.`6H?ÍgfTjgC. ),yZmGӥV|R(0?*?-,Gs%n O s? 'ϵ.bح3 zu y,3=oo1J^Ũv|Zd63?9[?IbVڄ&0H(Zԥ`JrԐVZQ"^>b/]aLhBhe<aɪbOCRm8?>7i|ǽ|@6m 5"F\fH|i,ϴp6ci/T;pq:V`8P@W?1;iI0o#_Ds#8_86?U+k0'5etӤrү[#O6K Ym8 @ QM3rOk&&* n&F+z?Nx㴚2Fr,I1ЍTɤT_ {J!bLRƹƝ #C\K&|J!,-F:k)U]4fa(ƙةt5! K@*IH0 ]ꮾ.ܜo`q`n4z$Ɠ襸tA\#`Ni.H&Fl2Hx?NON a+G2 zZrmFhݩ-0|&pq 0Wɛ6Ec'O&zmX,Af1XY3}N6TL> qN b ThTl힃u YsI͛jgGbKA"E}'P|(Q7ԞX:|IFҎ΀E]!mPe1G~mV~lnp*ņ?KhdV ," ͉>BJD-6z{dш@TگԨ=t~Y&օck*m[E\4|DqeǡQY@D,W^fxl[LDc>'{b8S7}uJ)2,^ã;r4{#@5Rnr ­sT'y&uTZ1v]{z_@3B/Cx醉18LwC;7lnHGUlЁ$ݱUftTxiH۔%sFl<ݜS^4ggl:zD*M45Z;R d^Y\L䦉y}R' 6Lwr}trVΈ%=Rj|B.F{ <0~0fvX-q/ii 6WnsÔ&Yh\d8 B O3WWYK8iO냆JZ4 H^7'^)燐3mF1mV- }"Yc-as}%XKͣ*U&۽akB_Fۺˠɵ&5 s% ,&B!pU5>.Pr*;"ع* XZD*jIF JO[2r(~cms!|p< -^.UXફ7ZvKj<>GN+*B_yNp5AX !̀ㄍXz5=]k3@pѲ^h?e ϻVd0b0 $I۬:A߽ Pw<1rf!M>7|;ƔmkGP`2Vgj 0&q:7[PZL5D/̄ qsi#4+GXCٚWK#%ivQ:UP 6OY\ը^F%9S< ?jJz%ΪV )c8jSPXATb@cx~4J aPJUd mEcڽFU[֫0ی*ʅs9]': ux)U=_aUԅgĕ%Bޠ-,T^vz !=!e?ٛtEGic]Y+( rʢZH9F7k]oV+ZeoĖG4sJ7 @oK]CmH SX$*1~i[{$0 c/H*aoe[3{hQ4ԱôEW w k)$N4)wyXNM -_jY3M3#IhxRW ;Bb7p@Ok-&OWqQՐԻ'lAJԦ9bqT7ʲfѦcඕ6œԀ$[nkHfH>莞:Stfn1lYd-_h_ʕg /Aʋ-Q:)VG9{R@2PG'eF@6BZ`-5F;})ɗe/=/ Ll՟?IwiUX?.zw]@avw5*DUǟW|TҢ{բI|`kQ1f#1\|7'K 8Fleg!4G|yw΢ڄclI%ơPO0>\?<oHdukzdlf'*27| Ҭb8OES2 oVh`/;Ծ<"CX#_bA?y$dfXvl^1z4Fu)1EB+4Yy["!L?}$b>P>Nl.- 4uɜ=:5░0[r>H98C{IOߍ_=8KÊ^qy~O/SP8tB#Dܦs'qZ[K{Kss֋)Q2̰?} F Ȭ=jZ/28ȢDKnwP$q¤w%ѫ4ZLG|ИgR[;Ӥx:C>+}0oN xT<0@u9S#ox&M#ƕ:$tե7/ݰ|(yVX[H F]<\*$ ].̚ϡ==S`ȍ*E8mٴ/캉@b0crv]ōúRZ,ZJG0Zu XBm@pBo9/vwkH F%9pWZ#@"'ޑ;ݨ'Ftx4"PbtEHH`:1u_BrIE>lC,5 ɹ("i_L*9'[zD LF:3hZ%bYJA`k2]tfPəȭYijE Gz|aXQ?c8y՚3FKf&|j ` مZq'q t/ :NkԤi2h $lr-f!ښ?Cʋn]1%1 jwzg5kvLݢnjD F%ȋ |Crӫu-׵)f(Fi`*Nbn1tgҢ\s'E:WV2VgSq-nH!cB z Ylt`)&Ձ޲\ 5%jo Ȃ^}0nStiUla 3GX1V܀zNSZ dP_巂pI\Zg-?8uvߗM}R9TC{#Pej{]{"TIb*mX) Jj@TzCYD~0I{7}3Dqrex3e=`Fq̕geE q(ߐjqih}i9* %WKhmOi H W =дb\i쵨MoKT/  (p'L7wN]~='ؔtG7B {.B:w啽&ͳנ,4z<L]Q$vYV;BI0-FDaJcP/ty$z!fԬ毉2 .0@p(f,x/TcدN k vd!eDIi5C* /HݳB]Re%ό |R6?ڕӔ Orw\L je\gZ}O|W:[IF f?\]` Ŭv<'D3DET* JgZ9#(f6x.[z5h! y~[T;F6amAKР-SPQvq 1KuEL82<$Z^ fsq.?wN63v(~+ jT&nN@>dp60`NE)ɓ&G}-7d  SKpOaaϾBDf~UzPfdk.M# Y=t*hvՍiy]]?<BʞxP%*(9'on?Fe'":Ik0WΞBbz$׏ WC꜄\'.UCHx5ٺ$Y4z^^%lxg 1/"\~ڠAùV:llǴbJyN_"QBrRej:B1&" Mrc,m%7Kvo>ÆD /^v39SM]H:R~K{7)%W~|{o_O)hJ(.rrŨLfF&ٽ-FHm?]}en%#s^ԥDpslǤhB]7D}\?w-`O.vGzj0('^PrSɧ3t0\v;Ʈ{U%*0 B9OPꁋ^RU髠j;7!Ka2n''A}a#W%{x1wZU{(YS/吅贱 L~HJ 7j` S[ B*H_O=8h!)K*k]USC&I׼XI3۰ lFA(8;ZzF(Fh]Vd"\n\.6d?'?=!D̼~*Lp=s0CLٱ+A )` Ä9 |e-hrY@-'H{lɝ'v Ĭ?<InrJFaK#R5bk'NigqМW eD:_CRtlQ-'4sOԌvްy nӵ_vemEh`cvɰ"$[H`1q[7IA1TKUx6w3)1;S6lD|fVm^ύbiP{YK+!,Wͧ +j2k"M╙ڑႾ@FB05ec{Z9]i1@^՟&~ R؟>\Tw"dg+ҰTyz/idFc0 G?WUcv k(*1~$lƒnrp58 !8hݫN#P "wOa 6XЮڍw!iy/ڗc^&Ҹɔm9X١*,a{1{x.)( mƇ;=0/~xEqkEK`$f ):A?CΏJcs @T U)%CL;qH S/X{|:}dd3$@r.3[A'; Fá(1T[&`L3 _lSɮQ5}ŹlF}q U9*˽J@}GBZG ܞWHF`" CsJbN& 6Jg%oh6z#!#gi)<5'ʂFhE"L 3ئx6D;&xܶYhB*A:k&2qF+%tLzJb,^$ JUB- ,֕|93FQACs|Hsph-l$ڤ;cF?_~̱Od3uIw)f8 u.M˹ kGolyr[` -<H\FbDeD {nD T' j)Ffr"3z{4/ͮLfv1:IQ\4O&؈o& I!#z)O% YT'O6Gx*C:c>C0A]*UJ؄`tiGr3/D9E4S_'T##eq|e 7bWE<OZa\:J$=gzG:j`$tɫpJ# Fn 2wAngY7pZPrIAYBpc0-v6:\ "F@ܵCp`EԐky吃a:߈t/ߔ[h.#"X*2zj UQĵ|13H0WX6aFOzIJ:]m "UʾтCNR}!.E#|fl(H}w'"aS0AndH ]`|DQňdi5IQ)#rCV8B +x#-LX@2)N[C<H)E~̊ #mzWSvs<8 _(Vya0L޺:} U IdGj$[LR^;ݭɦ\XȒz4FKG"sKdy<44\U*gsq_%,$5$)@}f:N_"#.p}.!% AȬ:W(E_aYr$G8qi+jn&5U&a=:u-ޅc=ˆK+l, a* v:9 (cL3O{kLU0+X nF],Yr hZT13 u^Ǻ/t_PPsa&NuMSye$K}1ݏP%撂Vj2LhV y .5)gBiRK_ʻe18xy_ؕi2 Zm9,W1gP -J|+ ԋm.rk,$kvZ}쑁Z uI 6]WXle55AOq9g%!2uĔ9~õ2}">E DCa) .zq6G=+(gxs<& +!X(|;Ƈ>MSi &#ʮrCZaďg mFb[+Ò:;m<5Dͨ:wج, FXD "s6MGzGgkBz5j*|I:_ v u)vr<x<+l|e:]tk%B 6,hkVU)m)l똌Ւ `;cI80v[Nv{"+`5;tp1h?w|ttn6Ѵ rWKKP``Ћaa8|&[3C|4jrw #S@m(1=)|#C)CN騎bT=|]l4yңOT'-39ꋌ%C3=VuȐD2eKU ܳ6f yqi.LO!th> "+ JW!>5([IH;k@YͷboSVEV_&n1C y>^ڏv L w4-@ODC$:GGOd߰&&cN޲xH]fh/5Xe, F8UjWtϺRJ A^\"ᵨ8hJqs!1Hg鬕>R6it뭟C*r՘j Hy/)]LOd!KDgޫǘg[5H= '3`uv #k+˨[٦w^Kزn>(n?y0ad_7Ӏ]׿+m-4n@vl/e?x&g>b`9"t)aXGJ9_#4OS\_ϻ:I;м[a׼0EP}8b՝3.8o'(!QcQ]!L M!r=j EΗ@!򎕊LӍC25ro$u1RO@fJa;Sn? b!$= " Xzq 3kZ6l舱B$7{`G8Fi@cXwCo{h:#7un$6т|OU=LoQ8d~I--lC6 ;ȁtBOf6B+)p& tٳ)dʉC\a@j,7B1KօCJGτ#a8'P˙`jQuIZ_W.nuyh.H+0^<<hE[甇='zvVX |ÇY51śr]Tf,sǢs7+:+L_L;sO[ya&!%HۓF24HM$o~E-Wd eı/N?"kTS8a!3ݗ<ĎB_!$UV+KiՠOB XE+~vH^xmE_*SZ,iDvYT׼])\3D>T)UAP/޴!~ _ښ|nsSdT5~B^gY._۫ n: {?6BTj3OP6MK>zW, 7:P rqdЃ& o]Xy3QV-"22b{:pe=5F7 S:-N"s ='~̫r+&+_(6W䋞"G Y/iLQKxW_#b!eh&kv&/D7ǔ5B :vvf K|A( 3`|8 6ٓj&;H-j0+8WJMW.جzV]S/ z֨/a vJ1ܷ*8 C^F 8xVbk7di^sIK[,`Ш/ұt DqnZ6w'ڙe(pyN.8Z s}Q"KL/eLEA>qը ?8+t b+MJ_m{xG9MM?>,]%vIk$+Vh=wvv5&O9k$Ps&yH/\.A+bSZWU ceɦ *̤|8O9tr1g0yk\OA ]Ƶl$bԆHՆ,@[n\wdt*ܻި7d=76#Us~Q@T%jsmaS$cL>SN1̋~ffd VQaB]AEF@\厙7{/#iBm>B}|IK%IQ_h\S5@Ҏ0P4"2{W?uhz$p35f&8S6QOfςQ:F)d.9:j?>o 늙1<شQ{o0 O*A͂f[%nhpmzI!P)V1T\e%;n 5O¿Md-Yp:Ş,U;Ͼ԰%D74]lE:wk'5/ ݿB?eDeY]YsW;Aջ,^(3seFS0. kP]bZ[7f+Dq-&|,;keP"R75 Fdy* ehjQc6+uI1]KTVzd^ѵ]OXL0Tx#kiW;aV0<~FBQh>sQi=Mp4pe#4'H3F~MSFno\*u~fMwhD1[Q n{gI"0tG0x qx6p*P@L%t hՉׄQ4O%53 ųޢ_7ۆ 3Nx ѫk=΍?aYxw#kv^ըBK+0q+Al%7*YLW'b%heo RL$Q~DOrK娾4 haWiG_&ы0*0sZB=0ĂpO+Kԭ)s|GDj8g;!0g1|c,!!B&^H3^d'a7D|WXǠZ)r]C2qC`n38ﵰ UoݰRK! ɏ4$Kd̏3^K^@+9΁(1limfnB0(UruA$>VsR *vN 2.2x᫑+Ew6i.#? 67SጒH[H.*P|Ohg8\XKr2TV,E!RSI}Qʭh4kRl;NgTf!9֧b$n+}/òg& "0E!' &0H+R3TtxY""}Ǵ77dˡz/* ~"P%lO*|cj K}&^iHi21H#U/*v4 W݊d5߹` ۰ix/NAvfD%Bc:î>s $ ^(A 6$uE\I 5ÁҮ[ɐ-y@.%S8LDgJCtB98EWI3}GA >M%. /7~}Fc*ßڮ5| z-tom)@CD݊,R%Lԛ& N XU!Nmw@6(N "'$6(.kAȀJ {lgұ ܈b3` ߸PXH4׋;:o"`u'( a{;X=iba'ɥ&e"ID?,nq^ "pexW>\؆?f$yqY><ԕD[Krɔ?g`NBaFte,TnmrwEꢒ` MGFde2"kxk*E^]{T{|x.v.8LQG =*`?(@!W$8_vHgOc~MN4mv?MzF)/\p3b`Y~7T7b9R+NӚ2f}F>.ɠ Ȭs؉ XۻY= UB&|gp.O'rQ { Ulh͹Ü7Yc\&4Bo3`-\Q=JDW0&w4(=4jwq<{JG1@#sdaRIxƥhdq~l$O?+y-ힰ9Zd|GƅB4)@ 䧧l]qFVy6 Fnk13pr?]z\LB̃.x+2 <0kmLٺU>'{h4⭥34t܎*0A$adLʜ|B3^\gz!O !0s+'0_l09ǚ(N$&jʮ".?Y =Sps- -UȜeqF%DFBj`Ƃ )>~mI)t8\^TUh&(d &,>{Q@LvJ. <'~v~)Y> }Qf{ k&n&r*8$ nG9!tűkf5slـT)4ķQA{] >VF!>WLlFiDOtЀ\5RBZ#gpF\dLjsD̞zLq\яH'rFİUî"[M֥^m&/aגtcSI\!lPkoXo.,n{*מ-ʭ7 r]82aI ,i#t!QCFҽP|iw0yS?_QqӷDCCZP] ,۾3bjYGg(iP‹2XvZ1o cGt>DiZfo'?vD Z Ȇ4ĹQ!3BTkSPf8S#T3q2UN>Tp2£KHEӴ)xI=htx,Ld} m\nĹ^"? kVM\{`ʃ S,<.\E-{U׌0LUh sV(ϕ ҫ`WyQfe}=[Dد>n#.I49vۨt'uG!l@Lz72iOEafuL߫~4q!c!P j܆? ?ҵy@Bn.sQ{kL/GB"ZEkW&+j<|4?z‹wX=, ŔcM:־G] _ܐeP*Lݻu, qPA5J]jQ@ iFwN>`~brr0O GU.FH>Wf %C25܁a +eq˺ tJ'Ld".Ѕ]UWe~b>jΣMwl>$vϽӗ^m Xբ@4C+ըΜEI:iV_^>9zx"`9`7ޏ]ZS&lPHj=(6Wl|ۺw QBZy{Oܽr#CJkL 2uČi5\9ѩh8j:M ֲkQ[a].;q@~,BvZG]Q[@ʗFO zç4 dٔ"~r$T?yP'{!>ϼt+s,"fIJA '`%7K(L_.DF&}x t޼JQQz0 끔N *r~HEb̽`n0[?ی V)WWI["ܰsnqw&xk/Jvj!m`;D6@ <^V8Ntƒ2䲌P +u TKQ%8QY^B!֦l3S}Ǝ%TW%yG)/˝^]P韻ePs9m&J1J3@{u p=VʷZ]TbA{_Bڝ>MnёO$<{UG$?/lðAezeYB 7K:Uz'ᱶqc_QA\lT&hƬ-4#$nIZ/3k wg)L|okstG@t@PgkBcY(?Q03[oT_G})i.$N^4.'6cC|t*J{|K9#Q&.jяw]+HT#?!Ul8(:cK?}T;3E-Zf{;IQ(¥qxeu59]79Ldy&utk9#o:k[+0ʹu􍟙iD5ۣ`U~eAHUVWh܆ f.q*tU\B4A]S_uG> "@/ *?N{H ](`"> rހls".rՊ"Z4j}gZ~TnUzG~!ePÔw y(}7Q«UR1Nv5> y%]$57ƧTg~r_VXlaeC&$_XvAM|i,C Ӑ'b軋#ȯ۾ k$]\m)>| ?Tɣ)kJMD!CWQ.EDNvޤJ谿#Mdqlέ~3f'ɅPoIjE.iŐ{!ѤUt70fPm< x6?m }VLS`g. t2+27IH2zeSj 6өY7%y"2U 9"Tw" ]">7d8Z/0W" )9)l,^zx 6n Mʷi>|G-<i6myF<8bIkY'#qu@+=KϋtwC=y=0!DѬ c eT7L, \AMEq P/"Bk> 'OO8SGVc۳> 0/Ҭ?Z(ǡպ@gu =^Po a.mfG۲ zTDpK#.Q2  4ug}E!qAz⌭G1_z #XN~L&,U8l-ArwqVU/JMdaP* (|zdX,tv0-0 YZgplots/man/0000755000176200001440000000000013731051666012345 5ustar liggesusersgplots/man/lmplot2.Rd0000644000176200001440000000471212521207034014215 0ustar liggesusers\name{lmplot2} \alias{lmplot2} \title{ Plots to assess the goodness of fit for the linear model objects } \description{ Plots to assess the goodness of fit for the linear model objects } \usage{ lmplot2( x, which = 1:5, caption = c("Residuals vs Fitted", "Normal Q-Q plot", "Scale-Location plot", "Cook's distance plot"), panel = panel.smooth, sub.caption = deparse(x$call), main = "", ask = interactive() && nb.fig < length(which) && .Device != "postscript", ..., id.n = 3, labels.id = names(residuals(x)), cex.id = 0.75, band=TRUE, rug=TRUE, width=1/10, max.n=5000 ) } \arguments{ \item{x}{lm object} \item{which}{Numerical values between 1 and 5, indicating which plots to be shown. The codes are: \describe{ \item{1}{Fitted vs residuals} \item{2}{Normal Q-Q} \item{3}{Scale-Location} \item{4}{Cook's distance} \item{5}{Residuals vs. predictor} } } \item{caption}{ Caption for each type of plot} \item{panel}{ function to draw on the existing plot} \item{sub.caption}{ SubCaption for the plots } \item{main}{Main title of the plot} \item{ask}{whether interactive graphics} \item{\dots}{ parameters passed to \code{lmplot2}. } \item{id.n}{ integer value, less than or equal to residuals of lm object } \item{labels.id}{Names of the residuals of the lm object} \item{cex.id}{Parameter to control the height of text stringsx} \item{band}{logical vector indicating whether bandplot should also be plotted } \item{rug}{logical vector indicating whether rug should be added to the existing plot } \item{width}{Fraction of the data to use for plot smooths} \item{max.n}{Maximum number of points to display in plots} } \note{ This function replaces \code{plot.lm2}, which has been deprecated to avoid potential problems with S3 method dispatching. } \author{Gregory R. Warnes \email{greg@warnes.net} and Nitin Jain \email{nitin.jain@pfizer.com}} \seealso{ \code{\link[stats]{plot.lm}} } \examples{ ctl <- rnorm(100, 4) trt <- rnorm(100, 4.5) group <- gl(2,100,200, labels=c("Ctl","Trt")) weight <- c(ctl, trt) wt.err <- rnorm(length(weight), mean=weight, sd=1/2) x <- lm(weight ~ group + wt.err) lmplot2(x) lmplot2(x, which=1, width=1/3) lmplot2(x, which=1:3, width=1/3) } \keyword{hplot} gplots/man/bandplot.Rd0000644000176200001440000000734112471456253014445 0ustar liggesusers\name{bandplot} \alias{bandplot} \alias{bandplot.formula} \alias{bandplot.default} \title{Plot x-y Points with Locally Smoothed Mean and Standard Deviation} \description{ Plot x-y points with curves for locally smoothed mean and standard deviation. } \usage{ bandplot(x,...) \method{bandplot}{formula}(x, data, subset, na.action, ..., xlab=NULL, ylab=NULL, add = FALSE, sd = c(-2:2), sd.col=c("magenta", "blue", "red", "blue", "magenta"), sd.lwd=c(2, 2, 3, 2, 2), sd.lty=c(2, 1, 1, 1, 2), method = "frac", width = 1/5, n=50) \method{bandplot}{default}(x, y, ..., add = FALSE, sd = c(-2:2), sd.col=c("magenta", "blue", "red", "blue", "magenta"), sd.lwd=c(2, 2, 3, 2, 2), sd.lty=c(2, 1, 1, 1, 2), method = "frac", width = 1/5, n=50) } \arguments{ \item{x}{either formula providing a single dependent variable (y) and an single independent variable (x) to use as coordinates in the scatter plot or a numeric vector of x locations} \item{y}{numeric vector of y locations} \item{data}{an optional data.frame, list, or environment contianing the variables used in the model (and in \code{subset}). If not found in data, the variables are taken from environment(formula), typically the environment from which lm is called.} \item{subset}{an optional vector specifying a subset of observations to be used in the fitting process.} \item{na.action}{a function which indicates what should happen when the data contain NAs. The default is set by the na.action setting of options, and is na.fail if that is unset. The factory-fresh default is na.omit. Another possible value is NULL, no action. Value na.exclude can be useful. } \item{\dots}{Additional plotting parameters} \item{xlab, ylab}{x and y axis labels} \item{add}{ Boolean indicating whether the local mean and standard deviation lines should be added to an existing plot. Defaults to FALSE.} \item{sd}{Vector of multiples of the standard devation that should be plotted. \code{0} gives the mean, \code{-1} gives the mean minus one standard deviation, etc. Defaults to -2:2.} \item{sd.col,sd.lwd,sd.lty}{Color, line width, and line type of each plotted line.} \item{method, width, n}{ Parameters controlling the smoothing. See the help page for \code{\link{wapply}} for details.} } \details{ \code{bandplot} was created to look for changes in the mean or variance of scatter plots, particularly plots of regression residuals. The local mean and standard deviation are calculated by calling 'wapply'. By default, bandplot asks wapply to smooth using intervals that include the nearest 1/5 of the data. See the documentation of that function for details on the algorithm. } \value{ Invisibly returns a list containing the x,y points plotted for each line. } \author{ Gregory R. Warnes \email{greg@warnes.net} } \seealso{ \code{\link{wapply}}, \code{\link{lowess}}} \examples{ # fixed mean, changing variance x <- 1:1000 y <- rnorm(1000, mean=1, sd=1 + x/1000 ) bandplot(x,y) bandplot(y~x) # fixed varance, changing mean x <- 1:1000 y <- rnorm(1000, mean=x/1000, sd=1) bandplot(x,y) # # changing mean and variance # x <- abs(rnorm(500)) y <- rnorm(500, mean=2*x, sd=2+2*x) # the changing mean and dispersion are hard to see whith the points alone: plot(x,y ) # regression picks up the mean trend, but not the change in variance reg <- lm(y~x) summary(reg) abline(reg=reg, col="blue", lwd=2) # using bandplot on the original data helps to show the mean and # variance trend bandplot(y ~ x) # using bandplot on the residuals helps to see that regression removes # the mean trend but leaves the trend in variability bandplot(predict(reg),resid(reg)) } \keyword{ dplot } gplots/man/gplots-deprecated.Rd0000644000176200001440000000103412676233266016245 0ustar liggesusers\name{gplots-deprecated} \alias{deprecated} \title{Deprecated functions} \description{ These functions have been deprecated and will be removed in future releases of gplots. } \usage{ ## No deprecated functions at this time ## } %\arguments{ %} \details{ These functions have been deprecated. Please refer to the manual page for the replacement function: \itemize{ \item (No deprecated functions at this time) } } \author{Gregory R. Warnes \email{greg@warnes.net}} \seealso{ \code{\link[base]{Deprecated}} } \keyword{misc} gplots/man/barplot2.Rd0000644000176200001440000003177112471456253014373 0ustar liggesusers%% Revision 2.1 2005/06/06 %% - Modified default behavior with 0's and NA's in %% 'height' so that these values are not plotted. %% - Warning messages added in the case of the above. %% Revision 2.0 2005/04/27 %% - Added panel.first and panel.last arguments %% - As per R 2.0.0, the default barplot() method by default uses a %% gamma-corrected grey palette (rather than the heat color %% palette) for coloring its output when given a matrix. % $Id: barplot2.Rd 1646 2013-03-24 05:19:04Z warnes $ %% $Log$ %% Revision 1.12 2005/12/07 18:48:54 nj7w %% Changed the default grey colors to heat colors, if height is matrix %% %% Revision 1.11 2005/12/06 22:41:08 nj7w %% Fixed minor error in documentation of barplot2 %% %% Revision 1.10 2005/06/09 14:20:28 nj7w %% Updating the version number, and various help files to synchronize splitting of gregmisc bundle in 4 individual components. %% %% Revision 1.3 2005/06/06 21:44:51 nj7w %% Changes based on Marc Schwartz's suggestions to handel 0's and NA's appropriately. %% %% Revision 1.9 2004/06/28 20:16:44 warnes %% - Default 2-d color set to grey as in (v2.0.0) r-devel %% - The default (v1.9.1) barplot method now handles vectors and 1-d arrays %% (e.g., obtained by table()) the same, and uses grey instead of %% heat color palettes in these cases. (Also fixes PR#6776.) %% - Updated to reflect the addition of 'offset' argument in base %% - Fix bug in stacked barplots, which would not be plotted properly %% % % Revision 1.8 2004/06/26 % - Default 2-d color set to grey as in (v2.0.0) r-devel % - The default (v1.9.1) barplot method now handles vectors and 1-d arrays % (e.g., obtained by table()) the same, and uses grey instead of % heat color palettes in these cases. (Also fixes PR#6776.) % - Updated to reflect the addition of 'offset' argument in base % - Fix bug in stacked barplots, which would not be plotted properly % % Revision 1.7 2003/12/02 16:58:46 warnes % % - Remove '%' character from example code to avoid errors. % % Revision 1.6 2003/12/01 16:00:08 warnes % % - updated to match changes to barplot() in base. % % Revision 1.5 2003/11/18 18:59:08 warnes % % - Tiny fix to remove R CMD check error. % % Revision 1.4 2003/01/30 21:43:05 warnes % % - Added argument 'add' to allow for the addition of a barplot to an % existing graphic. Default is FALSE % % Revision 1.2 2002/09/23 14:27:17 warnes % % - Fixed syntax errors in barplot2.Rd and CrossTable.Rd % - Fixed incorrect translation of 'F' (distribution) to 'FALSE' in glh.test.Rd % % Revision 1.1 2002/09/23 13:38:53 warnes % % - Added CrossTable() and barplot2() code and docs contributed by Marc Schwartz. % - Permit combinations() to be used when r>n provided repeat.allowed=TRUE % - Bumped up version number % % \name{barplot2} \alias{barplot2} \alias{barplot2.default} \title{Enhanced Bar Plots} \usage{ \method{barplot2}{default}(height, width = 1, space = NULL, names.arg = NULL, legend.text = NULL, beside = FALSE, horiz = FALSE, density = NULL, angle = 45, col = NULL, prcol = NULL, border = par("fg"), main = NULL, sub = NULL, xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, xpd = TRUE, log = "", axes = TRUE, axisnames = TRUE, cex.axis = par("cex.axis"), cex.names = par("cex.axis"), inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0, plot.ci = FALSE, ci.l = NULL, ci.u = NULL, ci.color = "black", ci.lty = "solid", ci.lwd = 1, ci.width = 0.5, plot.grid = FALSE, grid.inc = NULL, grid.lty = "dotted", grid.lwd = 1, grid.col = "black", add = FALSE, panel.first = NULL, panel.last = NULL, \dots) } \arguments{ \item{height}{either a vector or matrix of values describing the bars which make up the plot. If \code{height} is a vector, the plot consists of a sequence of rectangular bars with heights given by the values in the vector. If \code{height} is a matrix and \code{beside} is \code{FALSE} then each bar of the plot corresponds to a column of \code{height}, with the values in the column giving the heights of stacked ``sub-bars'' making up the bar. If \code{height} is a matrix and \code{beside} is \code{TRUE}, then the values in each column are juxtaposed rather than stacked.} \item{width}{optional vector of bar widths. Re-cycled to length the number of bars drawn. Specifying a single value will no visible effect unless \code{xlim} is specified.} \item{space}{the amount of space (as a fraction of the average bar width) left before each bar. May be given as a single number or one number per bar. If \code{height} is a matrix and \code{beside} is \code{TRUE}, \code{space} may be specified by two numbers, where the first is the space between bars in the same group, and the second the space between the groups. If not given explicitly, it defaults to \code{c(0,1)} if \code{height} is a matrix and \code{beside} is \code{TRUE}, and to 0.2 otherwise.} \item{names.arg}{a vector of names to be plotted below each bar or group of bars. If this argument is omitted, then the names are taken from the \code{names} attribute of \code{height} if this is a vector, or the column names if it is a matrix.} \item{legend.text}{a vector of text used to construct a legend for the plot, or a logical indicating whether a legend should be included. This is only useful when \code{height} is a matrix. In that case given legend labels should correspond to the rows of \code{height}; if \code{legend.text} is true, the row names of \code{height} will be used as labels if they are non-null.} \item{beside}{a logical value. If \code{FALSE}, the columns of \code{height} are portrayed as stacked bars, and if \code{TRUE} the columns are portrayed as juxtaposed bars.} \item{horiz}{a logical value. If \code{FALSE}, the bars are drawn vertically with the first bar to the left. If \code{TRUE}, the bars are drawn horizontally with the first at the bottom.} \item{density}{a vector giving the the density of shading lines, in lines per inch, for the bars or bar components. The default value of \code{NULL} means that no shading lines are drawn. Non-positive values of \code{density} also inhibit the drawing of shading lines.} \item{angle}{the slope of shading lines, given as an angle in degrees (counter-clockwise), for the bars or bar components.} \item{col}{a vector of colors for the bars or bar components. By default, grey is used if \code{height} is a vector, and \code{heat.colors(nrow(height))} if \code{height} is a matrix.} \item{prcol}{the color to be used for the plot region.} \item{border}{the color to be used for the border of the bars.} \item{main, sub}{overall and sub titles for the plot.} \item{xlab}{a label for the x axis.} \item{ylab}{a label for the y axis.} \item{xlim}{limits for the x axis.} \item{ylim}{limits for the y axis.} \item{xpd}{logical. Should bars be allowed to go outside region?} \item{log}{a character string which contains `"x"' if the x axis is to be logarithmic, `"y"' if the y axis is to be logarithmic and `"xy"' or `"yx"' if both axes are to be logarithmic.} \item{axes}{logical. If \code{TRUE}, a vertical (or horizontal, if \code{horiz} is true) axis is drawn.} \item{axisnames}{logical. If \code{TRUE}, and if there are \code{names.arg} (see above), the other axis is drawn (with \code{lty = 0}) and labeled.} \item{cex.axis}{expansion factor for numeric axis labels.} \item{cex.names}{expansion factor for names.} \item{inside}{logical. If \code{TRUE}, the lines which divide adjacent (non-stacked!) bars will be drawn. Only applies when \code{space = 0} (which it partly is when \code{beside = TRUE}).} %MM: we still have "NotYetUsed" -- the above describe's S-plus 6.1 (not % precisely documented!) behavior! \item{plot}{logical. If \code{FALSE}, nothing is plotted.} \item{axis.lty}{the graphics parameter \code{lty} applied to the axis and tick marks of the categorical (default horzontal) axis. Note that by default the axis is suppressed.} \item{offset}{a vector indicating how much the bars should be shifted relative to the x axis.} \item{plot.ci}{logical. If \code{TRUE}, confidence intervals are plotted over the bars. Note that if a stacked bar plot is generated, confidence intervals will not be plotted even if \code{plot.ci = TRUE}} \item{ci.l,ci.u}{The confidence intervals (ci.l = lower bound, ci.u = upper bound) to be plotted if \code{plot.ci} = \code{TRUE}. Values must have the same dim structure as \code{height}.} \item{ci.color}{the color for the confidence interval line segments} \item{ci.lty}{the line type for the confidence interval line segments} \item{ci.lwd}{the line width for the confidence interval line segments} \item{ci.width}{length of lines used for the "t" at the end of confidence interval line segments, as a multple of \code{width}. Defaults to 0.5.} \item{plot.grid}{if \code{TRUE} a lined grid will be plotted behind the bars} \item{grid.inc}{the number of grid increments to be plotted} \item{grid.lty}{the line type for the grid} \item{grid.lwd}{the line width for the grid} \item{grid.col}{the line color for the grid} \item{add}{logical, if \code{TRUE} add barplot to current plot.} \item{panel.first}{An expression to be evaluated after the plot region coordinates have been set up, but prior to the drawing of the bars and other plot region contents. This can be useful to add additional plot region content behind the bars. This will also work if \code{add} = \code{TRUE}} \item{panel.last}{An expression to be evaluated after the bars have been drawn, but prior to the addition of confidence intervals, a legend and the axis annotation} \item{\dots}{further graphical parameters (\code{\link{par}}) are passed to \code{\link{plot.window}()}, \code{\link{title}()} and \code{\link{axis}}.} } \description{ An enhancement of the standard barplot() function. Creates a bar plot with vertical or horizontal bars. Can plot confidence intervals for each bar, a lined grid behind the bars, change plot area color and logarithmic axes may be used. } \details{ This is a generic function, it currently only has a default method. A formula interface may be added eventually. } \value{ A numeric vector (or matrix, when \code{beside = TRUE}), say \code{mp}, giving the coordinates of \emph{all} the bar midpoints drawn, useful for adding to the graph. If \code{beside} is true, use \code{colMeans(mp)} for the midpoints of each \emph{group} of bars, see example. } \author{Original barplot() by R-Core. Enhancements by Marc Schwartz \email{marc\_schwartz@comcast.net} } \note{ Prior to \R 1.6.0, \code{barplot} behaved as if \code{axis.lty = 1}, unintentionally. 0 (zero) and NA values in \code{height} will not be plotted if using logarithmic scales. If there are NA values in \code{height} and \code{beside = FALSE}, values after the NA will not be plotted in stacked bars. } \seealso{ \code{\link{plot}(\dots, type = "h")}, \code{\link{dotchart}}, \code{\link{hist}}. } \examples{ tN <- table(Ni <- rpois(100, lambda = 5)) r <- barplot2(tN, col = 'gray') #- type = "h" plotting *is* `bar'plot lines(r, tN, type = 'h', col = 'red', lwd = 2) barplot2(tN, space = 1.5, axisnames = FALSE, sub = "barplot2(..., space = 1.5, axisnames = FALSE)") data(VADeaths, package = "datasets") barplot2(VADeaths, plot = FALSE) barplot2(VADeaths, plot = FALSE, beside = TRUE) mp <- barplot2(VADeaths) # default tot <- colMeans(VADeaths) text(mp, tot + 3, format(tot), xpd = TRUE, col = "blue") barplot2(VADeaths, beside = TRUE, col = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk"), legend = rownames(VADeaths), ylim = c(0, 100)) title(main = "Death Rates in Virginia", font.main = 4) # Example with confidence intervals and grid hh <- t(VADeaths)[, 5:1] mybarcol <- "gray20" ci.l <- hh * 0.85 ci.u <- hh * 1.15 mp <- barplot2(hh, beside = TRUE, col = c("lightblue", "mistyrose", "lightcyan", "lavender"), legend = colnames(VADeaths), ylim = c(0, 100), main = "Death Rates in Virginia", font.main = 4, sub = "Faked 95 percent error bars", col.sub = mybarcol, cex.names = 1.5, plot.ci = TRUE, ci.l = ci.l, ci.u = ci.u, plot.grid = TRUE) mtext(side = 1, at = colMeans(mp), line = -2, text = paste("Mean", formatC(colMeans(hh))), col = "red") box() # Example with horizontal bars, grid and logarithmic x axis barplot2(1:10 , log = "x", plot.grid = TRUE, grid.inc = 10, xlim = c(0.5, 20), horiz = TRUE, cex.axis = 0.9, prcol = "gray95") box() # Bar shading example barplot2(VADeaths, angle = 15 + 10 * 1:5, density = 20, col = "black", legend = rownames(VADeaths)) title(main = list("Death Rates in Virginia", font = 4)) # border : barplot2(VADeaths, border = "dark blue") % lwd = 2 << not passed %notyet barplot(VADeaths, inside = FALSE, main = "barplot(*, inside=FALSE)") } \keyword{hplot} gplots/man/ooplot.Rd0000644000176200001440000002500413727072327014153 0ustar liggesusers\name{ooplot.default} \alias{ooplot.default} \alias{ooplot} \title{Create an OpenOffice style plot} \description{ An extension of barplot2. Creates bar- and line-plots mimicking the style of OpenOffice plots. This utility can plot the values next to each point or bar as well as confidence intervals. } \usage{ ooplot(data, ...) \method{ooplot}{default}(data, width=1, space=NULL, names.arg=NULL, legend.text=NULL, horiz=FALSE, density=NULL, angle=45, kmg="fpnumkMGTP", kmglim=TRUE, type=c("xyplot", "linear", "barplot", "stackbar"), col=heat.colors(NC), prcol=NULL, border=par("fg"), main=NULL, sub=NULL, xlab=NULL, ylab=NULL, xlim=NULL, ylim=NULL, xpd=TRUE, log="", axes=TRUE, axisnames=TRUE, prval=TRUE, lm=FALSE, cex.axis=par("cex.axis"), cex.names=par("cex.axis"), cex.values=par("cex"),inside=TRUE, plot=TRUE, axis.lty=0, plot.ci=FALSE, ci.l=NULL, ci.u=NULL, ci.color="black", ci.lty="solid", ci.lwd=1, plot.grid=FALSE, grid.inc=NULL, grid.lty="dotted", grid.lwd=1, grid.col="black", add=FALSE, by.row=FALSE, ...) } \arguments{ \item{data}{a matrix of values describing the values that make up the plot. The first column of \code{data} is taken as the axis against which all the other values are plotted. The first column of \code{data} may not be sparse.} \item{width}{optional vector of barwidths. Re-cycled to the number of bars drawn. A single value will have no visible effect. } \item{space}{ the amount of space left before each bar. May be given as a single number or one number per bar. If \code{type} is \code{stackbar}, \code{space} may be specified by two numbers, where the first is the space between bars in the same group, and the second the space between groups. Defaults to \code{c(0,1)} if \code{type} is a \code{stackbar}, and to 0.2 otherwise. } \item{names.arg}{a vector of names to be plotted below each bar or group of bars. If this argument is omitted, then the names are taken from the row names of \code{data}. } \item{legend.text}{a vector of text used to construct a legend for the plot, or a logical indicating whether a legend should be included; if \code{legend.text} is true, the row names of \code{data} will be used as labels if they are non-null.} \item{horiz}{a logical value. If \code{FALSE}, the bars are drawn vertically with the first bar to the left. If \code{TRUE}, the bars are drawn horizontally with the first at the bottom.} \item{density}{a vector giving the the density of shading lines, in lines per inch, for the bars or bar components. The default value of \code{NULL} means that no shading lines are drawn. Non-positive values of \code{density} also inhibit the drawing of shading lines.} \item{angle}{the slope of shading lines, given as an angle in degrees (counter-clockwise), for the bars or bar components.} \item{kmg}{the set of SI units to convert, defaults to "fpnumkMGTP". See below for details. } \item{kmglim}{logical. If \code{FALSE} the conversion to SI units is not performed. Default is \code{TRUE}. } \item{type}{a string indicating the preferred format of the plot, choices are: xyplot : plot where y is plotted against the x-value. linear : plot where y values are plotted against equidistant x-values. barplot : plot where y values are represented as bars against equidistant x-values. stackplot : plot where y values are stacked for identical x-values and bars are equidistant. } \item{col}{a vector of colors for the bars or bar components.} \item{prcol}{the color to be used for the plot region.} \item{border}{the color to be used for the border of the bars.} \item{main, sub}{overall and sub titles for the plot.} \item{xlab}{a label for the x axis.} \item{ylab}{a label for the y axis.} \item{xlim}{limits for the x axis.} \item{ylim}{limits for the y axis.} \item{xpd}{logical. Should bars be allowed to go outside region?} \item{log}{a character string which contains `"x"' if the x axis is to be logarithmic, `"y"' if the y axis is to be logarithmic and `"xy"' or `"yx"' if both axes are to be logarithmic.} \item{axes}{logical. If \code{TRUE}, a vertical (or horizontal, if \code{horiz} is true) axis is drawn.} \item{axisnames}{logical. If \code{TRUE}, and if there are \code{names.arg} (see above), the other axis is drawn (with \code{lty=0}) and labeled.} \item{prval}{logical. If \code{TRUE}, then values are plotted above all points and bars. } \item{lm}{logical. If \code{TRUE}, the linear fit is plotted. } \item{cex.axis, cex.names, cex.values}{character scaling factor for numeric axis labels, names, and displayed values, respectively.} \item{inside}{logical. If \code{TRUE}, the lines which divide adjacent (non-stacked!) bars will be drawn. Only applies when \code{space = 0} (which it partly is when \code{beside = TRUE}).} \item{plot}{logical. If \code{FALSE}, nothing is plotted.} \item{axis.lty}{the graphics parameter \code{lty} applied to the axis and tick marks of the categorical (default horzontal) axis. Note that by default the axis is suppressed.} \item{plot.ci}{logical. If \code{TRUE}, confidence intervals are plotted over the bars. Note that if a stacked bar plot is generated, confidence intervals will not be plotted even if \code{plot.ci = TRUE}} \item{ci.l,ci.u}{The confidence intervals (ci.l = lower bound, ci.u = upper bound) to be plotted if \code{plot.ci} = \code{TRUE}. Values must have the same dim structure as \code{height}.} \item{ci.color}{the color for the confidence interval line segments} \item{ci.lty}{the line type for the confidence interval line segments} \item{ci.lwd}{the line width for the confidence interval line segments} \item{plot.grid}{if \code{TRUE} a lined grid will be plotted behind the bars} \item{grid.inc}{the number of grid increments to be plotted} \item{grid.lty}{the line type for the grid} \item{grid.lwd}{the line width for the grid} \item{grid.col}{the line color for the grid} \item{add}{logical, if \code{TRUE} add barplot to current plot.} \item{by.row}{Logical value. If \code{TRUE} the data matrix is organized with variables along rows rather than down colums.} \item{\dots}{further graphical parameters (\code{\link{par}}) are passed to \code{\link{plot.window}()}, \code{\link{title}()} and \code{\link{axis}}.} } \details{ Plot units are automatically scaled to SI units based on the maximum value present, according to the set of units specified by characters in the \code{kmg} parameter. These letters are interpreted as \describe{ \item{P}{peta = 1E15} \item{T}{tera = 1E12} \item{G}{giga = 1E09} \item{M}{mega = 1E06} \item{k}{kilo = 1E03} \item{m}{milli= 1E-03} \item{u}{micro= 1E-06} \item{n}{nano = 1E-09} \item{p}{pico = 1E-12} \item{f}{femto= 1E-15} } with the default being "fpnumkMGTP" (all of these units). For example, if the largest value plotted is 1243000, it would be presented as 1.234M. } \value{ A numeric vector (or matrix, when \code{beside = TRUE}), say \code{mp}, giving the coordinates of \emph{all} the bar midpoints drawn, useful for adding to the graph. If \code{beside} is true, use \code{colMeans(mp)} for the midpoints of each \emph{group} of bars, see example. } \author{Lodewijk Bonebakker \email{bonebakker@comcast.net} with modifications by Gregory R. Warnes \email{greg@warnes.net}. Based on barplot2(). } \seealso{ \code{\link{plot}}, \code{\link{boxplot}} } \examples{ data(VADeaths, package = "datasets") VADeaths <- cbind( Age=c(50,55,60,65,70), VADeaths) mp <- ooplot(VADeaths) # default mp <- ooplot(VADeaths, type="xyplot") # same as default mp <- ooplot(VADeaths, type="linear") # linear scale mp <- ooplot(VADeaths, type="linear", log="y") # log scale on y axis mp <- ooplot(VADeaths, type="barplot") # barplot mp <- ooplot(VADeaths, type="stackbar") # stacked tot <- colMeans(VADeaths[,-1]) ooplot(VADeaths, col = c("lightblue", "mistyrose", "lightcyan", "lavender"), legend = colnames(VADeaths)[-1], ylim = c(0, 100), type="barplot", cex.values=0.75) title(main = "Death Rates in Virginia", font.main = 4) ## ## Capability demo ## ## examples for the ooplot routine ## ## create some test data test1 <- data.frame(x=c(0,1,2,3,4), lin=c(0,1,2,3,4)) test2 <- data.frame(x=c(0,1,2,3,4), par=c(0,1,4,9,16)) test3 <- data.frame(x=c(-2,-1,0,1,2),y2=c(4,1,0,1,4)) ## single line test example test1f <- test1 ## two column example test2f <- merge(test1,test2,by.x="x",all=TRUE,sort=TRUE) ## three column example test3f <- merge(test2f,test3,by.x="x",all=TRUE,sort=TRUE) ## subset, single row, example test5r <- test3f[5,] ## ## xyplot, linear, barplot, stackbar dev.off() mat <- matrix(c(1:16),4,4,byrow=TRUE) layout(mat) ooplot(test1f,type="barplot",col=c("red")) title(main="barplot") ooplot(test2f,type="barplot",col=c("red","blue")) ooplot(test3f,type="barplot",col=c("red","blue","green")) ooplot(test5r,type="barplot",col=c("red","blue","green")) ooplot(test1f,type="xyplot",col=c("red")) title(main="xyplot") ooplot(test2f,type="xyplot",col=c("red","blue")) ooplot(test3f,type="xyplot",col=c("red","blue","green")) ooplot(test5r,type="xyplot",col=c("red","blue","green")) ooplot(test1f,type="linear",col=c("red")) title(main="linear") ooplot(test2f,type="linear",col=c("red","blue")) ooplot(test3f,type="linear",col=c("red","blue","green")) ooplot(test5r,type="linear",col=c("red","blue","green")) ooplot(test1f,type="stackbar",col=c("red")) title(main="stackbar") ooplot(test2f,type="stackbar",col=c("red","blue")) ooplot(test3f,type="stackbar",col=c("red","blue","green")) ooplot(test5r,type="stackbar",col=c("red","blue","green")) # restore default layout (1 plot/page) layout(1) } \keyword{hplot} gplots/man/venn.Rd0000644000176200001440000001120612675272277013613 0ustar liggesusers\name{venn} \alias{venn} \alias{plot.venn} \title{Plot a Venn diagram} \description{ Plot a Venn diagrams for up to 5 sets } \usage{ venn(data, universe=NA, small=0.7, showSetLogicLabel=FALSE, simplify=FALSE, show.plot=TRUE, intersections=TRUE, names, ...) \method{plot}{venn}(x, y, ..., small=0.7, showSetLogicLabel=FALSE, simplify=FALSE) } \arguments{ \item{data,x}{Either a list list containing vectors of names or indices of group intersections, or a data frame containing boolean indicators of group intersectionship (see below)} \item{universe}{Subset of valid name/index elements. Values ignore values in code{data} not in this list will be ignored. Use \code{NA} to use all elements of \code{data} (the default).} \item{small}{Character scaling of the smallest group counts} \item{showSetLogicLabel}{Logical flag indicating whether the internal group label should be displayed} \item{simplify}{Logical flag indicating whether unobserved groups should be omitted.} \item{show.plot}{Logical flag indicating whether the plot should be displayed. If false, simply returns the group count matrix.} \item{intersections}{Logical flag indicating if the returned object should have the attribute "individuals.in.intersections" featuring for every set a list of individuals that are assigned to it.} \item{y}{Ignored} \item{...}{Optional graphical parameters.} \item{names}{Optional vector of group names.} } \details{ \code{data} should be either a named list of vectors containing character string names ("GeneAABBB", "GeneBBBCY", .., "GeneXXZZ") or indexes of group intersections (1, 2, .., N), or a data frame containing indicator variables (TRUE, FALSE, TRUE, ..) for group intersectionship. Group names will be taken from the component list element or column names. } \value{ Invisibly returns an object of class "venn", containing: \itemize{ \item A matrix of all possible sets of groups, and the observed count of items belonging to each The fist column contains observed counts, subsequent columns contain 0-1 indicators of group intersectionship. \item If \code{intersections=TRUE}, the attribute \code{intersections} will be a list of vectors containing the names of the elements belonging to each subset. } } \author{ Steffen Moeller \email{steffen\_moeller@gmx.de}, with cleanup and packaging by Gregory R. Warnes \email{greg@warnes.net}.} \examples{ ## ## Example using a list of item names belonging to the ## specified group. ## ## construct some fake gene names.. oneName <- function() paste(sample(LETTERS,5,replace=TRUE),collapse="") geneNames <- replicate(1000, oneName()) ## GroupA <- sample(geneNames, 400, replace=FALSE) GroupB <- sample(geneNames, 750, replace=FALSE) GroupC <- sample(geneNames, 250, replace=FALSE) GroupD <- sample(geneNames, 300, replace=FALSE) input <-list(GroupA,GroupB,GroupC,GroupD) input tmp <- venn(input) attr(tmp, "intersections") ## ## Example using a list of item indexes belonging to the ## specified group. ## GroupA.i <- which(geneNames \%in\% GroupA) GroupB.i <- which(geneNames \%in\% GroupB) GroupC.i <- which(geneNames \%in\% GroupC) GroupD.i <- which(geneNames \%in\% GroupD) input.i <-list(A=GroupA.i,B=GroupB.i,C=GroupC.i,D=GroupD.i) input.i venn(input.i) ## ## Example using a data frame of indicator ('f'lag) columns ## GroupA.f <- geneNames \%in\% GroupA GroupB.f <- geneNames \%in\% GroupB GroupC.f <- geneNames \%in\% GroupC GroupD.f <- geneNames \%in\% GroupD input.df <- data.frame(A=GroupA.f,B=GroupB.f,C=GroupC.f,D=GroupD.f) head(input.df) venn(input.df) ## smaller set to create empty groupings small <- input.df[1:20,] venn(small, simplify=FALSE) # with empty groupings venn(small, simplify=TRUE) # without empty groupings ## Capture group counts, but don't plot tmp <- venn(input, show.plot=FALSE) tmp ## Show internal binary group labels venn(input, showSetLogicLabel=TRUE) ## Limit universe tmp <- venn(input, universe=geneNames[1:100]) tmp ## ## Example to determine which elements are in A and B but not in ## C and D using the 'intersections' attribute. ## tmp <- venn(input, intersection=TRUE) isect <- attr(tmp, "intersection") # Look at all of the subsets str(isect) # Extract and combine the subsets of interest.. AandB <- unique(c(isect$A, isect$B, isect$'A:B')) # and look at the results str(AandB) ## ## The full set of elements of each intersection is provided in the ## "interesections" attribute. ## a<-venn(list(1:5,3:8), show.plot=FALSE) intersections<-attr(a,"intersections") print(intersections) # $A # [1] "1" "2" # # $B # [1] "6" "7" "8" # # $`A:B` # [1] "3" "4" "5" } \keyword{hplot} gplots/man/hist2d.Rd0000644000176200001440000000607712471456253014044 0ustar liggesusers% $Id: hist2d.Rd 1812 2014-04-17 19:05:11Z warnes $ \name{hist2d} \alias{hist2d} \alias{print.hist2d} \title{ Compute and Plot a 2-Dimensional Histogram } \description{ Compute and plot a 2-dimensional histogram. } \usage{ hist2d(x,y=NULL, nbins=200, same.scale=FALSE, na.rm=TRUE, show=TRUE, col=c("black", heat.colors(12)), FUN=base::length, xlab, ylab, ... ) \method{print}{hist2d}(x, ...) } \arguments{ \item{x}{either a vector containing the x coordinates or a matrix with 2 columns. } \item{y}{a vector contianing the y coordinates, not required if `x' is matrix} \item{nbins}{number of bins in each dimension. May be a scalar or a 2 element vector. Defaults to 200.} \item{same.scale}{use the same range for x and y. Defaults to FALSE.} \item{na.rm}{ Indicates whether missing values should be removed. Defaults to TRUE.} \item{show}{ Indicates whether the histogram be displayed using \code{image} once it has been computed. Defaults to TRUE.} \item{col}{ Colors for the histogram. Defaults to "black" for bins containing no elements, a set of 16 heat colors for other bins.} \item{FUN}{Function used to summarize bin contents. Defaults to \code{base::length}. Use, e.g., \code{mean} to calculate means for each bin instead of counts.} \item{xlab,ylab}{(Optional) x and y axis labels} \item{\dots}{ Parameters passed to the image function. } } \details{ This fucntion creates a 2-dimensional histogram by cutting the x and y dimensions into \code{nbins} sections. A 2-dimensional matrix is then constucted which holds the counts of the number of observed (x,y) pairs that fall into each bin. If \code{show=TRUE}, this matrix is then then passed to \code{image} for display. } \value{ A list containing 5 elements: \item{counts}{Matrix containing the number of points falling into each bin} \item{x.breaks, y.breaks}{Lower and upper limits of each bin} \item{x,y}{midpoints of each bin} } \author{ Gregory R. Warnes \email{greg@warnes.net}} \seealso{ \code{\link{image}}, \code{\link{persp}}, \code{\link{hist}}, \code{\link[r2d2]{freq2d}} } \examples{ ## example data, bivariate normal, no correlation x <- rnorm(2000, sd=4) y <- rnorm(2000, sd=1) ## separate scales for each axis, this looks circular hist2d(x,y) ## same scale for each axis, this looks oval hist2d(x,y, same.scale=TRUE) ## use different ## bins in each dimension hist2d(x,y, same.scale=TRUE, nbins=c(100,200) ) ## use the hist2d function to create an h2d object h2d <- hist2d(x,y,show=FALSE, same.scale=TRUE, nbins=c(20,30)) ## show object summary h2d ## object contents str(h2d) ## perspective plot persp( h2d$x, h2d$y, h2d$counts, ticktype="detailed", theta=30, phi=30, expand=0.5, shade=0.5, col="cyan", ltheta=-30) ## for contour (line) plot ... contour( h2d$x, h2d$y, h2d$counts, nlevels=4 ) ## for a filled contour plot ... filled.contour( h2d$x, h2d$y, h2d$counts, nlevels=4, col=gray((4:0)/4) ) } \keyword{dplot} \keyword{hplot} gplots/man/lowess.Rd0000644000176200001440000001155512676770351014165 0ustar liggesusers% $Id: lowess.Rd 2124 2016-03-30 15:29:44Z warnes $ % % $Log$ % Revision 1.7 2005/06/09 14:20:28 nj7w % Updating the version number, and various help files to synchronize splitting of gregmisc bundle in 4 individual components. % % Revision 1.1.1.1 2005/05/25 22:15:30 nj7w % Initial submission as an individual package % % Revision 1.6 2003/12/03 02:46:51 warnes % - match function argument defaults with 'usage' % % Revision 1.5 2002/09/23 13:59:30 warnes % - Modified all files to include CVS Id and Log tags. % % \name{lowess} \alias{lowess} \alias{lowess.default} \alias{lowess.formula} \alias{plot.lowess} \alias{plotLowess} \title{Scatter Plot Smoothing} \usage{ lowess(x, ...) \method{lowess}{default}(x, y=NULL, f=2/3, iter=3L, delta=0.01 * diff(range(x)), ...) \method{lowess}{formula}(formula,data=parent.frame(), ..., subset, f=2/3, iter=3L, delta=.01*diff(range(mf[-response]))) \method{plot}{lowess}(x, y, ..., col.lowess="red", lty.lowess=2) plotLowess(formula, data=parent.frame(), ..., subset=parent.frame(), col.lowess="red", lty.lowess=2 ) } \alias{lowess} \arguments{ \item{formula}{ formula providing a single dependent variable (y) and an single independent variable (x) to use as coordinates in the scatter plot.} \item{data}{a data.frame (or list) from which the variables in `formula' should be taken.} \item{subset}{ an optional vector specifying a subset of observations to be used in the fitting process. } \item{x, y}{vectors giving the coordinates of the points in the scatter plot. Alternatively a single plotting structure can be specified.} \item{f}{the smoother span. This gives the proportion of points in the plot which influence the smooth at each value. Larger values give more smoothness.} \item{iter}{the number of robustifying iterations which should be performed. Using smaller values of \code{iter} will make \code{lowess} run faster.} \item{delta}{values of \code{x} which lie within \code{delta} of each other replaced by a single value in the output from \code{lowess}.} \item{...}{parameters for methods.} \item{col.lowess, lty.lowess}{color and line type for plotted line} } \description{ The \code{lowess} function performs the computations for the \emph{LOWESS} smoother (see the reference below). \code{lowess} returns a an object containing components \code{x} and \code{y} which give the coordinates of the smooth. The smooth can then be added to a plot of the original points with the function \code{lines}. Alternatively, \code{plot} can be called directly on the object returned from \code{lowess} and the 'lowess' method for \code{plot} will generate a scatterplot of the original data with a \code{lowess} line superimposed. Finally, the \code{plotLowess} function both calculates the \code{lowess} smooth and plots the original data with a \code{lowess} smooth. } \references{ Cleveland, W. S. (1979) Robust locally weighted regression and smoothing scatterplots. \emph{J. Amer. Statist. Assoc.} \bold{74}, 829--836. Cleveland, W. S. (1981) LOWESS: A program for smoothing scatterplots by robust locally weighted regression. \emph{The American Statistician}, \bold{35}, 54. } \seealso{\code{\link{loess}} (in package \code{modreg}), a newer formula based version of \code{lowess} (with different defaults!). } \examples{ data(cars) # # x,y method # plot(cars$speed, cars$dist, main="lowess(cars)") lines(lowess(cars$speed, cars$dist), col=2) lines(lowess(cars$speed, cars$dist, f=.2), col=3) legend(5, 120, c(paste("f=", c("2/3", ".2"))), lty=1, col=2:3) # # formula method: plot, then calculate the lowess smoother, # then add smooth to the plot # plot(dist ~ speed, data=cars, main="lowess(cars)") lines(lowess(dist ~ speed, data=cars), col=2, lty=2) lines(lowess(dist ~ speed, data=cars, f=.2), col=3) # smaller bandwith legend(5, 120, c(paste("f=", c("2/3", ".2"))), lty=1, col=2:3) # # formula method: calculate lowess() smoother, then call plot() # on the lowess object # lw <- lowess(dist ~ speed, data=cars) plot(lw, main="lowess(cars)" ) # # formula method: calculate and plot in a single command # plotLowess(dist ~ speed, data=cars, main="lowess(cars)") \dontshow{ # test non-standard evaluation with(cars, plotLowess(dist ~ speed, main="lowess(cars)") ) with(cars, plot(lowess(dist ~ speed, main="lowess(cars)") ) ) idx <- cars$speed > 10 plotLowess(dist[idx] ~ speed[idx], data=cars, main="lowess(cars)") plot(lowess(dist[idx] ~ speed[idx], data=cars, main="lowess(cars)")) with(cars, plotLowess(dist[idx] ~ speed[idx], main="lowess(cars)") ) with(cars, plot(lowess(dist[idx] ~ speed[idx], main="lowess(cars)") )) local({ dist <- cars$dist speed <- cars$speed plotLowess(dist[idx] ~ speed[idx], main="lowess(cars)") plot(lowess(dist[idx] ~ speed[idx], main="lowess(cars)")) }) } % dontshow } \keyword{smooth} gplots/man/col2hex.Rd0000644000176200001440000000073412471456254014206 0ustar liggesusers\name{col2hex} \alias{col2hex} \title{Convert color names to hex RGB strings} \description{ Convert color names to hex RGB strings } \usage{ col2hex(cname) } \arguments{ \item{cname}{Color name(s)} } \value{ Character vector giving the hex color code translation of the provided color names. } \author{Gregory R. Warnes} \seealso{ \code{\link{col2rgb}}, \code{\link{colors}}, \code{\link{rgb}} } \examples{ col2hex(c("red","yellow","lightgrey")) } \keyword{color} gplots/man/wapply.Rd0000644000176200001440000001167212471456253014160 0ustar liggesusers% $Id: wapply.Rd 1441 2010-06-11 03:11:54Z warnes $ % % $Log$ % Revision 1.10 2005/12/01 16:46:52 nj7w % Updated Greg's email address % % Revision 1.9 2005/06/09 14:20:28 nj7w % Updating the version number, and various help files to synchronize splitting of gregmisc bundle in 4 individual components. % % Revision 1.1.1.1 2005/05/25 22:15:31 nj7w % Initial submission as an individual package % % Revision 1.8 2003/12/03 02:46:51 warnes % - match function argument defaults with 'usage' % % Revision 1.7 2003/01/20 17:13:06 warnes % % - Updated wapply.R to allow specification of evaluation points when % method is 'width' or 'range' using the 'pts' argument. % - Updated wapply.Rd to add 'pts' argument % - Fixed typos, spelling errors, gramatical errors and lack of clarity % in wapply.Rd help text. % % Revision 1.6 2002/04/09 00:51:33 warneg % % Checkin for version 0.5.3 % % Revision 1.5 2001/12/07 23:34:35 warneg % % Fixed an problem where \code was incorrectly delimited by parens % rather than curly brackets. % % Revision 1.4 2001/12/05 19:36:30 warneg % - Clarified how the width of the window is computed when method="nobs". % % Revision 1.3 2001/10/16 23:15:01 warneg % % Fixed unbalanced brace. % % Revision 1.2 2001/09/01 00:01:55 warneg % Release 0.3.0 % % Revision 1.1 2001/08/25 05:45:10 warneg % Initial Checkin % % \name{wapply} \alias{wapply} \title{Compute the Value of a Function Over a Local Region Of An X-Y Plot} \description{ This function applies the specified function to the sets of y values that are defined by overlapping "windows" in the x-dimension. For example, setting \code{fun=mean} returns local means, while setting \code{fun=function(x) sqrt(var(x))} returns local estimates of the standard deviation. } \usage{ wapply(x, y, fun=mean, method="range", width, n=50, drop.na=TRUE, pts, ...) } \arguments{ \item{x}{ vector of x values for (x,y) pairs } \item{y}{ vector of y values for (x,y) pairs } \item{fun}{ function to be applied } \item{method}{ method of defining an x-neighborhood. One of "width","nobs","range", or "fraction". See details.} \item{width}{ width of an x-neighborhood. See details. } \item{n}{ Number of equally spaced points at which to compute local estimates. See details.} \item{drop.na}{ should points which result in missing values \code{NA} be omitted from the return value. Defaults to true. } \item{pts}{ \code{x} locations at which to compute the local mean when using the "width" or "range" methods. Ignored otherwise.} \item{\dots}{ arguments to be passed to \code{fun} } } \details{ Two basic techniques are available for determining what points fall within the same x-neighborhood. The first technique uses a window with a fixed width in the x-dimension and is is selected by setting \code{method="width"} or \code{method="range"}. For \code{method="width"} the \code{width} argument is an absolute distance in the x-dimension. For \code{method="range"}, the width is expressed as a fraction of the x-range. In both cases, \code{pts} specifies the points at which evaluation of \code{fun} occurs. When \code{pts} is omitted, \code{n} x values equally spaced along the x range are used. The second technique uses windows containing k neighboring points. The (x,y) pairs are sorted by the x-values and the nearest k/2 points with higher x values and the k/2 nearest points with lower x values are included in the window. When \code{method="nobs"}, k equals \code{width} (actually 2*floor(\code{width}/2) ). When \code{method="fraction"}, \code{width} specifies what fraction of the total number of points should be included. The actual number of points included in each window will be floor(n*frac/2)*2. Regardless of the value of \code{pts}, the function \code{fun} will be evaluated at all x locations. } \value{ Returns a list with components \item{x }{x location'} \item{y }{Result of applying \code{fun} to the window about each x location} } \author{ Gregory R. Warnes \email{greg@warnes.net} } \examples{ #show local mean and inner 2-sd interval to help diagnose changing mean #or variance structure x <- 1:1000 y <- rnorm(1000, mean=1, sd=1 + x/1000 ) plot(x,y) lines(wapply(x,y,mean),col="red") CL <- function(x,sd) mean(x)+sd*sqrt(var(x)) lines(wapply(x,y,CL,sd= 1),col="blue") lines(wapply(x,y,CL,sd=-1),col="blue") lines(wapply(x,y,CL,sd= 2),col="green") lines(wapply(x,y,CL,sd=-2),col="green") #show local mean and inner 2-sd interval to help diagnose changing mean #or variance structure x <- 1:1000 y <- rnorm(1000, mean=x/1000, sd=1) plot(x,y) lines(wapply(x,y,mean),col="red") CL <- function(x,sd) mean(x)+sd*sqrt(var(x)) lines(wapply(x,y,CL,sd= 1,method="fraction",width=1/20),col="blue") lines(wapply(x,y,CL,sd=-1,method="fraction",width=1/20),col="blue") lines(wapply(x,y,CL,sd= 2,method="nobs",width=250),col="green") lines(wapply(x,y,CL,sd=-2,method="nobs",width=250),col="green") } \keyword{ dplot } gplots/man/gplots-defunct.Rd0000644000176200001440000000354312675264544015606 0ustar liggesusers\name{gplots-defunct} \alias{boxplot.n} \alias{plot.lm2} \alias{smartlegend} \title{Defunct functions} \description{ These functions are defunct and have been removed from the gplots package. } \usage{ boxplot.n(..., top=FALSE, shrink=1, textcolor=NULL) plot.lm2( x, which = 1:5, caption = c("Residuals vs Fitted", "Normal Q-Q plot", "Scale-Location plot", "Cook's distance plot"), panel = panel.smooth, sub.caption = deparse(x$call), main = "", ask, ..., id.n = 3, labels.id = names(residuals(x)), cex.id = 0.75, band=TRUE, rug=TRUE, width=1/10, max.n=5000 ) smartlegend(x = c("left", "center", "right"), y = c("top", "center", "bottom"), ..., inset = 0.05) } \arguments{ \item{ask, band, caption, cex.id, id.n, inset, labels.id, main, max.n, panel, rug, shrink, sub.caption, textcolor, top, which, width, x, y, \dots}{see man page for the corresponding replacement function} } \details{ These functions are no longer available. Please refer to the manual page for the replacement function: \itemize{ \item \code{boxplot.n} has been replaced by \code{\link{boxplot2}} \item \code{plot.lm2} has been replaced by \code{\link{lmplot2}} \item \code{smartlegend} is no longer needed because relative positioning has been implemented in \code{\link[graphics]{legend}}. } } \author{Gregory R. Warnes \email{greg@warnes.net}} \seealso{ \code{\link{boxplot2}}, \code{\link{lmplot2}}, \code{\link[graphics]{legend}}, \code{\link[base]{Defunct}} } \keyword{misc} gplots/man/plotCI.Rd0000644000176200001440000001250212471456253014027 0ustar liggesusers% $Id: plotCI.Rd 1441 2010-06-11 03:11:54Z warnes $ % % $Log$ % Revision 1.8 2005/11/08 16:19:42 nj7w % Updated Greg's email % % Revision 1.7 2005/06/09 14:20:28 nj7w % Updating the version number, and various help files to synchronize splitting of gregmisc bundle in 4 individual components. % % Revision 1.1.1.1 2005/05/25 22:15:31 nj7w % Initial submission as an individual package % % Revision 1.6 2004/07/29 14:49:02 warnes % Integrate changes from the version of plotCI maintained by Martin Maechler. % % Revision 1.5 2004/05/27 15:11:08 warnes % Fix spelling error. % % Revision 1.4 2002/09/23 13:59:30 warnes % - Modified all files to include CVS Id and Log tags. % % \name{plotCI} \alias{plotCI} \title{Plot Error Bars and Confidence Intervals} \description{ Given a set of x and y values and interval width or upper and lower bounds, plot the points with error bars. This can be a useful tool for visualizing confidence intervals. } \usage{ plotCI(x, y = NULL, uiw, liw = uiw, ui, li, err='y', ylim=NULL, xlim=NULL, type="p", col=par("col"), barcol=col, pt.bg = par("bg"), sfrac = 0.01, gap=1, lwd=par("lwd"), lty=par("lty"), labels=FALSE, add=FALSE, xlab, ylab, minbar, maxbar, ... ) } \arguments{ \item{x,y}{ coordinates for the center of error bars. \code{y} defaults to \code{1:n}.} \item{uiw}{ width of the upper or right error bar. Set to \code{NULL} or \code{NA} to omit upper bars.} \item{liw}{ width of the lower or left error bar. Defaults to same value as \code{uiw}. Set to \code{NULL} or \code{NA} to omit lower bars. } \item{ui}{ upper end of error bars. Defaults to \code{y + uiw} or \code{x + uiw} depeding on \code{err}. Set to \code{NULL} or \code{NA} to omit upper bars. } \item{li}{ lower end of error bars. Defaults to \code{y - liw} or \code{x - liw} depedning on \code{err}. Set to \code{NULL} or \code{NA} to omit lower bars.} \item{err}{ direction for error bars. Set to "y" for vertical bars. Set to "x" for horizontal bars. Defaults to "y".} \item{col}{ color of plotting character used center marker of error bars. Default is "black".} \item{xlim, ylim}{ range of x/y values to include in the plotting area. } \item{type}{point/line type; passed to \code{\link{points}}} \item{barcol}{color of the error bars. Defaults to the same value as \code{col} } \item{pt.bg}{background color of points (use \code{pch=21, pt.bg=par("bg")} to get open points superimposed on error bars).} \item{sfrac}{ width of "crossbar" at the end of error bar as a fraction of the x plotting region. Defaults to 0.01. } \item{gap}{ space left between the center of the error bar and the lines marking the error bar in units of the height (width) of the letter "O". Defaults to 1.0 } \item{lwd}{ width of bar lines. } \item{lty}{ line type of bar lines. } \item{labels}{ either a logical value indicating whether the circles representing the x values should be replaced with text giving the actual values or a vector containing labels to use instead. Defaults to \code{FALSE}. } \item{add}{logical indicating whether error bars should be added to the current plot. If \code{FALSE} (the defailt), a new plot will be created and symbols/labels for the x values will be plotted before drawing error bars.} \item{minbar}{minumum allowed value for bar ends. If specified, values smaller than \code{minbar} will be replaced with \code{minbar}. } \item{maxbar}{maximum allowed value for bar ends. If specified, values larger than \code{maxbar} will be replaced with \code{maxbar}. } \item{\dots}{ optional plotting parameters } \item{xlab}{ label for x axis. } \item{ylab}{label for y axis. } } %\details{ % ~~ If necessary, more details than the __description__ above ~~ %} \author{ Original version by Bill Venables \email{wvenable@attunga.stats.adelaide.edu.au} posted to r-help on Sep. 20, 1997. Enhanced version posted to r-help by Ben Bolker \email{ben@zoo.ufl.edu} on Apr. 16, 2001. This version was modified and extended by Gregory R. Warnes \email{greg@warnes.net}. Additional changes suggested by Martin Maechler \email{maechler@stat.math.ethz.ch} integrated on July 29, 2004. } \seealso{ \code{\link{plotmeans}} provides an enhanced wrapper to \code{plotCI}. } \examples{ # plot means and data(state) tmp <- split(state.area, state.region) means <- sapply(tmp, mean) stdev <- sqrt(sapply(tmp, var)) n <- sapply(tmp,length) ciw <- qt(0.975, n) * stdev / sqrt(n) # plain plotCI(x=means, uiw=ciw) # prettier plotCI(x=means, uiw=ciw, col="black", barcol="blue", lwd=1) # give mean values plotCI(x=means, uiw=ciw, col="black", barcol="blue", labels=round(means,-3), xaxt="n", xlim=c(0,5) ) axis(side=1, at=1:4, labels=names(tmp), cex=0.7) # better yet, just use plotmeans ... # plotmeans( state.area ~ state.region ) \dontshow{ ## Just for testing plotCI(x=means, uiw=NA) plotCI(x=means, uiw=NULL) plotCI(x=means, uiw=ciw) plotCI(x=means, uiw=ciw, liw=NULL) plotCI(x=means, uiw=ciw, liw=NA) plotCI(x=means, liw=ciw, ciw=NULL) plotCI(x=means, liw=ciw, ciw=NA) ciw.na <- ciw ciw.na[3] <- NA plotCI(x=means, uiw=ciw.na, liw=ciw) plotCI(x=means, liw=ciw.na, uiw=ciw) } } \keyword{ hplot } gplots/man/rich.colors.Rd0000644000176200001440000000317712471456253015072 0ustar liggesusers\name{rich.colors} \alias{rich.colors} \title{Rich Color Palettes} \description{ Create a vector of \code{n} colors that are perceptually equidistant and in an order that is easy to interpret. } \usage{ rich.colors(n, palette="temperature", alpha=1.0, rgb=FALSE, plot=FALSE) } \arguments{ \item{n}{number of colors to generate.} \item{palette}{palette to use: \code{"temperature"} contains blue-green-yellow-red, and \code{"blues"} contains black-blue-white.} \item{alpha}{alpha transparency, from 0 (fully transparent) to 1 (opaque).} \item{rgb}{if \code{TRUE} then a matrix of RGBA values is included as an attribute.} \item{plot}{whether to plot a descriptive color diagram.} } \value{A character vector of color codes.} \author{Arni Magnusson.} \seealso{ \code{\link{rgb}}, \code{\link{rainbow}}, \code{\link{heat.colors}}. } \examples{ m <- abs(matrix(1:120+rnorm(120), nrow=15, ncol=8)) opar <- par(bg="gray", mfrow=c(1,2)) matplot(m, type="l", lty=1, lwd=3, col=rich.colors(8)) matplot(m, type="l", lty=1, lwd=3, col=rich.colors(8,"blues")) par(opar) barplot(rep(1,100), col=rich.colors(100), space=0, border=0, axes=FALSE) barplot(rep(1,20), col=rich.colors(40)[11:30]) # choose subset plot(m, rev(m), ylim=c(120,0), pch=16, cex=2, col=rich.colors(200,"blues",alpha=0.6)[1:120]) # semitransparent rich.colors(100, plot=TRUE) # describe rgb recipe par(mfrow=c(2,2)) barplot(m, col=heat.colors(15), main="\nheat.colors") barplot(m, col=1:15, main="\ndefault palette") barplot(m, col=rich.colors(15), main="\nrich.colors") barplot(m, col=rainbow(15), main="\nrainbow") par(opar) } % Graphics \keyword{color} gplots/man/balloonplot.Rd0000644000176200001440000001730013727070643015163 0ustar liggesusers\name{balloonplot} \alias{balloonplot} \alias{balloonplot.default} \alias{balloonplot.table} \title{Plot a graphical matrix where each cell contains a dot whose size reflects the relative magnitude of the corresponding component.} \description{ Plot a graphical matrix where each cell contains a dot whose size reflects the relative magnitude of the corresponding component. } \usage{ balloonplot(x, ...) \method{balloonplot}{table}(x, xlab, ylab, zlab, show.zeros=FALSE,show.margins=TRUE,...) \method{balloonplot}{default}(x,y,z, xlab, ylab, zlab=deparse(substitute(z)), dotsize=2/max(strwidth(19),strheight(19)), dotchar=19, dotcolor="skyblue", text.size=1, text.color=par("fg"), main, label=TRUE, label.digits=2, label.size=1, label.color=par("fg"), scale.method=c("volume","diameter"), scale.range=c("absolute","relative"), colsrt=par("srt"), rowsrt=par("srt"), colmar=1, rowmar=2, show.zeros=FALSE, show.margins=TRUE, cum.margins=TRUE, sorted=TRUE, label.lines=TRUE, fun=function(x)sum(x,na.rm=T), hide.duplicates=TRUE, ... ) } \arguments{ \item{x}{A table object, or either a vector or a list of several categorical vectors containing grouping variables for the first (x) margin of the plotted matrix.} \item{y}{Vector or list of vectors for grouping variables for the second (y) dimension of the plotted matrix.} \item{z}{Vector of values for the size of the dots in the plotted matrix.} \item{xlab}{Text label for the x dimension. This will be displayed on the x axis and in the plot title.} \item{ylab}{Text label for the y dimension. This will be displayed on the y axis and in the plot title.} \item{zlab}{Text label for the dot size. This will be included in the plot title.} \item{dotsize}{Maximum dot size. You may need to adjust this value for different plot devices and layouts.} \item{dotchar}{Plotting symbol or character used for dots. See the help page for the points function for symbol codes.} \item{dotcolor}{Scalar or vector specifying the color(s) of the dots in the plot.} \item{text.size, text.color}{Character size and color for row and column headers} \item{main}{Plot title text.} \item{label}{Boolean flag indicating whether the actual value of the elements should be shown on the plot.} \item{label.digits}{Number of digits used in formatting value labels.} \item{label.size, label.color}{ Character size and color for value labels.} \item{scale.method}{Method of scaling the sizes of the dot, either "volume" or "diameter". See below.} \item{scale.range}{Method for scaling original data to compute circle diameter. \code{scale.range="absolute"} scales the data relative to 0 (i.e, maps [0,max(z)] --> [0,1]), while \code{scale.range="relative"} scales the data relative to min(z) (i.e. maps [min(z), max(z)] --> [0,1]).} \item{rowsrt, colsrt}{Angle of rotation for row and column labels.} \item{rowmar, colmar}{Space allocated for row and column labels. Each unit is the width/height of one cell in the table.} \item{show.zeros}{boolean. If \code{FALSE}, entries containing zero will be left blank in the plotted matrix. If \code{TRUE}, zeros will be displayed.} \item{show.margins}{boolean. If \code{TRUE}, row and column sums are printed in the bottom and right margins, respectively.} \item{cum.margins}{boolean. If \code{TRUE}, marginal fractions are graphically presented in grey behind the row/column label area.} \item{sorted}{boolean. If \code{TRUE}, the rows will be arranged in sorted order by using the levels of the first y factor, then the second y factor, etc. The same process is used for the columns, based on the x factors} \item{label.lines}{boolean. If \code{TRUE}, borders will be drawn for row and column level headers.} \item{hide.duplicates}{boolean. If \code{TRUE}, column and row headers will omit duplicates within row/column to reduce clutter. Defaults to \code{TRUE}.} \item{fun}{function to be used to combine data elements with the same levels of the grouping variables \code{x} and \code{y}. Defaults to \code{sum}} \item{\dots}{ Additional arguments passed to \code{balloonplot.default} or \code{plot}, as appropriate.} } \details{ This function plots a visual matrix. In each \code{x},\code{y} cell a dot is plotted which reflects the relative size of the corresponding value of \code{z}. When \code{scale.method="volume"} the volume of the dot is proportional to the relative size of \code{z}. When \code{scale.method="diameter"}, the diameter of the dot is proportional to the the relative size of \code{z}. The "volume" method is default because the "diameter" method visually exaggerates differences. } \value{ Nothing of interest. } \note{ \code{z} is expected to be non-negative. The function will still operate correctly if there are negative values of \code{z}, but the corresponding dots will have 0 size and a warning will be generated. } \references{Function inspired by question posed on R-help by Ramon Alonso-Allende \email{allende@cnb.uam.es}.} \author{ Gregory R. Warnes \email{greg@warnes.net} } \seealso{ \code{\link{plot.table}} } \examples{ \testonly{ set.seed(12425421) } # Create an Example Data Frame Containing Car x Color data carnames <- c("bmw","renault","mercedes","seat") carcolors <- c("red","white","silver","green") datavals <- round(rnorm(16, mean=100, sd=60),1) data <- data.frame(Car=rep(carnames,4), Color=rep(carcolors, c(4,4,4,4) ), Value=datavals ) # show the data data # generate balloon plot with default scaling balloonplot( data$Car, data$Color, data$Value) # show margin label rotation & space expansion, using some long labels levels(data$Car) <- c("BMW: High End, German","Renault: Medium End, French", "Mercedes: High End, German", "Seat: Imaginary, Unknown Producer") # generate balloon plot with default scaling balloonplot( data$Car, data$Color, data$Value, colmar=3, colsrt=90) # Create an example using table xnames <- sample( letters[1:3], 50, replace=2) ynames <- sample( 1:5, 50, replace=2) tab <- table(xnames, ynames) balloonplot(tab) # Example of multiple classification variabls using the Titanic data library(datasets) data(Titanic) dframe <- as.data.frame(Titanic) # convert to 1 entry per row format attach(dframe) balloonplot(x=Class, y=list(Survived, Age, Sex), z=Freq, sort=TRUE) # colorize: surviors lightblue, non-survivors: grey Colors <- Titanic Colors[,,,"Yes"] <- "skyblue" Colors[,,,"No"] <- "grey" colors <- as.character(as.data.frame(Colors)$Freq) balloonplot(x=list(Age,Sex), y=list(Class=Class, Survived=reorder.factor(Survived,new.order=c(2,1)) ), z=Freq, zlab="Number of Passengers", sort=TRUE, dotcol = colors, show.zeros=TRUE, show.margins=TRUE) } \keyword{dplot} \keyword{hplot} gplots/man/space.Rd0000644000176200001440000000630612471456253013735 0ustar liggesusers% $Id: space.Rd 1441 2010-06-11 03:11:54Z warnes $ % % $Log$ % Revision 1.9 2005/09/12 15:44:37 nj7w % Updated Greg's email % % Revision 1.8 2005/06/09 14:20:28 nj7w % Updating the version number, and various help files to synchronize splitting of gregmisc bundle in 4 individual components. % % Revision 1.1.1.1 2005/05/25 22:15:31 nj7w % Initial submission as an individual package % % Revision 1.7 2004/04/13 13:42:31 warnes % Add ability to space points along 'y' direction. % % Revision 1.6 2003/01/03 19:23:34 warnes % - Added reference to and comparison example of sunflowerplot. % - Added code to put example plots on same plot window using par(mfrow=...). % % Revision 1.5 2002/09/23 13:59:30 warnes % - Modified all files to include CVS Id and Log tags. % % \name{space} \alias{space} \title{Space points in an x-y plot so they don't overlap.} \description{ Space points in an x-y plot so they don't overlap. } \usage{ space(x, y, s=1/50, na.rm=TRUE, direction="x") } \arguments{ \item{x}{numeric vector of x coordonates.} \item{y}{numeric vector of x coordonates.} \item{s}{either a single numeric value or 2 element vector specifying the minimum distance between points in the x and y dimensions as a fraction of the x and y range. Defaults to 1/50.} \item{na.rm}{logical indicating whether pairs where one or both elements are missing should be removed. Defaults to TRUE.} \item{direction}{"x" or "y", indicating which direction points should be moved to accomplish spacine.} } \details{ In an x-y plot where at least one variable has discrete levels several points may be plotted at or very near the same coordonates. This makes it difficult to guage the number of points in a specific region. A common method of resolving this problem is to 'jitter' the points by adding random noise. This function takes a different approach to the same problem. When there are two or more points with the same (x,y) value (or within x+-s[1] and x+-s[2]), it spaces these out in the x direction so that the points are separated by at least distance s. Another method for dealing with overploting is available in the \code{\link{sunflowerplot}} function. } \value{ list with two components \item{x}{(modified) x location for each input point} \item{y}{y location of each input point} } \author{ Gregory R. Warnes \email{greg@warnes.net} } \seealso{ \code{\link{jitter}}, \code{\link{sunflowerplot}} } \examples{ x <- rep(1:5, 10) y <- round(rnorm(length(x),x)) prepar <- par("mfrow") par(mfrow=c(1,3)) # standard x-y plot: noverlapping points are hidden plot(x,y) title("Standard Plot") # 'spaced' plot: overlapping points are spread out and visible plot(space(x,y)) title("Plot with 'space'") # 'spaced' plot: overlapping points are spread out along y and visible plot(space(x,y, direction='y')) title("Plot with 'space', direction='y' ") # 'sunflower' plot, another approach, overlapping points are # indicated via petals sunflowerplot(x,y) title("Sunflower Plot") \testonly{ # check that missign values correctly handled x <- c(x,NA) y <- c(y,NA) plot(space(x,y)) } par(mfrow=prepar) } \keyword{ dplot } gplots/man/boxplot2.Rd0000644000176200001440000000216612471456254014414 0ustar liggesusers\name{boxplot2} \alias{boxplot2} \title{Produce a Boxplot Annotated with the Number of Observations} \description{ This funcntion uses \code{boxplot} to produce a boxplot which is then annotated with the number of observations in each group. } \usage{ boxplot2(..., top=FALSE, shrink=1, textcolor=NULL) } \arguments{ \item{\dots}{ parameters passed to \code{boxplot}. } \item{top}{ logical indicating whether the number of observations should be added to the top or the bottom of the plotting region. Defaults to \code{FALSE}. } \item{shrink}{ value to shrink character size (cex) when annotating.} \item{textcolor}{ text color. } } \author{ Gregory R. Warnes \email{greg@warnes.net}} \note{ This function replaces \code{boxplot.n}, which has been deprecated avoid potential problems with S3 method dispatching. } \seealso{ \code{\link{boxplot}}, \code{\link{text}} } \examples{ data(state) # n's at bottom boxplot2( state.area ~ state.region) # n's at top boxplot2( state.area ~ state.region, top=TRUE) # small red text boxplot2( state.area ~ state.region, shrink=0.8, textcolor="red") } \keyword{ hplot } gplots/man/textplot.Rd0000644000176200001440000001263113727070207014517 0ustar liggesusers\name{textplot} \alias{textplot} \alias{textplot.default} \alias{textplot.character} \alias{textplot.matrix} \alias{textplot.data.frame} \title{Display text information in a graphics plot.} \description{ This function displays text output in a graphics window. It is the equivalent of 'print' except that the output is displayed as a plot. } \usage{ textplot(object, halign="center", valign="center", cex, ...) \method{textplot}{default}(object, halign=c("center","left","right"), valign=c("center", "top", "bottom"), cex, ... ) \method{textplot}{character}(object, halign = c("center", "left", "right"), valign = c("center", "top", "bottom"), cex, fixed.width=TRUE, cspace=1, lspace=1, mar=c(0, 0, 3, 0) + 0.1, tab.width = 8, ...) \method{textplot}{data.frame}(object, halign = c("center", "left", "right"), valign = c("center", "top", "bottom"), cex, ...) \method{textplot}{matrix}(object, halign = c("center", "left", "right"), valign = c("center", "top", "bottom"), cex, cmar = 2, rmar = 0.5, show.rownames = TRUE, show.colnames = TRUE, hadj = 1, vadj = 1, mar = c(1, 1, 4, 1) + 0.1, col.data = par("col"), col.rownames = par("col"), col.colnames = par("col"), ...) } \arguments{ \item{object}{Object to be displayed.} \item{halign}{Alignment in the x direction, one of "center", "left", or "right". } \item{valign}{Alignment in the y direction, one of "center", "top" , or "bottom"} \item{cex}{Character size, see \code{\link{par}} for details. If unset, the code will attempt to use the largest value which allows the entire object to be displayed.} \item{fixed.width}{Logical value indicating whether to emulate a fixed-width font by aligning characters in each row of text. This is usually necessary for text-formatted tables display properly. Defaults to 'TRUE'.} \item{cspace}{Space between characters as a multiple of the width of the letter 'W'. This only applies when \code{fixed.width==TRUE}. } \item{lspace}{Line spacing. This only applies when \code{fixed.width==TRUE}.} \item{mar}{Figure margins, see the documentation for \code{par}.} \item{rmar, cmar}{Space between rows or columns, in fractions of the size of the letter 'M'.} \item{show.rownames, show.colnames}{Logical value indicating whether row or column names will be displayed.} \item{hadj,vadj}{Vertical and horizontal location of elements within matrix cells. These have the same meaning as the \code{adj} graphics paramter (see \code{\link{par}}).} \item{col.data}{Colors for data elements. If a single value is provided, all data elements will be the same color. If a matrix matching the dimensions of the data is provided, each data element will receive the specified color.} \item{col.rownames, col.colnames}{Colors for row names and column names, respectively. Either may be specified as a scalar or a vector of appropriate length.} \item{tab.width}{Width of a single tab stop, in characters} \item{\dots}{ Optional arguments passed to the text plotting command or specialied object methods} } \details{ A new plot is created and the object is displayed using the largest font that will fit on in the plotting region. The \code{halign} and \code{valign} parameters can be used to control the location of the string within the plotting region. For matrixes and vectors a specialized textplot function is available, which plots each of the cells individually, with column widths set according to the sizes of the column elements. If present, row and column labels will be displayed in a bold font. } \value{ The character scaling factor (\code{cex}) used. } \author{Gregory R. Warnes \email{greg@warnes.net}} \seealso{ \code{\link{plot}}, \code{\link{text}}, \code{\link[utils]{capture.output}} } \examples{ \dontrun{ ### simple examples # show R version information textplot(version) # show the alphabet as a single string textplot( paste(letters[1:26], collapse=" ") ) # show the alphabet as a matrix textplot( matrix(letters[1:26], ncol=2)) ### Make a nice 4 way display with two plots and two text summaries data(iris) par(mfrow=c(2,2)) plot( Sepal.Length ~ Species, data=iris, border="blue", col="cyan", main="Boxplot of Sepal Length by Species" ) plotmeans( Sepal.Length ~ Species, data=iris, barwidth=2, connect=FALSE, main="Means and 95\% Confidence Intervals\nof Sepal Length by Species") info <- sapply( split(iris$Sepal.Length, iris$Species), function(x) round(c(Mean=mean(x), SD=sd(x), N=nrow(x)),2) ) textplot( info, valign="top" ) title("Sepal Length by Species") reg <- lm( Sepal.Length ~ Species, data=iris ) textplot( capture.output(summary(reg)), valign="top") title("Regression of Sepal Length by Species") par(mfrow=c(1,1)) ### Show how to control text color cols <- c("red", "green", "magenta", "forestgreen") mat <- cbind(name=cols, t(col2rgb(cols)), hex=col2hex(cols)) textplot(mat, col.data=matrix(cols, nrow=length(cols), byrow=FALSE, ncol=5), ) ### Show how to manually tune the character size data(iris) reg <- lm( Sepal.Length ~ Species, data=iris ) text <- capture.output(summary(reg)) # do the plot and capture the character size used textplot(text, valign="top") # see what size was used cex # now redo the plot at 80\% size textplot( text, valign="top", cex=cex*0.80) } } \keyword{hplot} gplots/man/colorpanel.Rd0000644000176200001440000000372712471456253015004 0ustar liggesusers\name{colorpanel} \alias{colorpanel} \alias{redgreen} \alias{greenred} \alias{bluered} \alias{redblue} \title{Generate a smoothly varying set of colors} \description{ \code{colorpanel} generate a set of colors that varies smoothly. \code{redgreen}, \code{greenred}, \code{bluered}, and \code{redblue} generate red-black-green, green-black-red, red-white-blue, and blue-white-red colorbars, respectively. colors } \usage{ colorpanel(n, low, mid, high) redgreen(n) greenred(n) bluered(n) redblue(n) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{n}{Desired number of color elements in the panel.} \item{low, mid, high}{Colors to use for the Lowest, middle, and highest values. \code{mid} may be ommited.} } \details{ The values for \code{low, mid, high} can be given as color names ('red'), plot color index (2=red), and HTML-style RGB, ("\#FF0000"=red). If \code{mid} is supplied, then the returned color panel will consist of \code{n - floor(n/2)} HTML-style RGB elements which vary smoothly between \code{low} and \code{mid}, then between \code{mid} and \code{high}. Note that if \code{n} is even, the color \code{mid} will occur twice at the center of the sequence. If \code{mid} is omitted, the color panel will vary smoothly beween \code{low} and \code{high}. } \value{ Vector of HTML-style RGB colors. } \author{ Gregory R. Warnes \email{greg@warnes.net} } \seealso{ \code{\link{colors} } } \examples{ showpanel <- function(col) { image(z=matrix(1:100, ncol=1), col=col, xaxt="n", yaxt="n" ) } par(mfrow=c(3,3)) # two colors only: showpanel(colorpanel(8,low="red",high="green")) # three colors showpanel(colorpanel(8,"red","black","green")) # note the duplicatation of black at the center, using an odd # number of elements resolves this: showpanel(colorpanel(9,"red","black","green")) showpanel(greenred(64)) showpanel(redgreen(64)) showpanel(bluered(64)) showpanel(redblue(64)) } \keyword{color} gplots/man/heatmap.2.Rd0000644000176200001440000005271612676243236014431 0ustar liggesusers\name{heatmap.2} \alias{heatmap.2} \title{ Enhanced Heat Map } \description{ A heat map is a false color image (basically \code{\link{image}(t(x))}) with a dendrogram added to the left side and/or to the top. Typically, reordering of the rows and columns according to some set of values (row or column means) within the restrictions imposed by the dendrogram is carried out. This heatmap provides a number of extensions to the standard R \code{\link[stats]{heatmap}} function. } \usage{ heatmap.2 (x, # dendrogram control Rowv = TRUE, Colv=if(symm)"Rowv" else TRUE, distfun = dist, hclustfun = hclust, dendrogram = c("both","row","column","none"), reorderfun = function(d, w) reorder(d, w), symm = FALSE, # data scaling scale = c("none","row", "column"), na.rm=TRUE, # image plot revC = identical(Colv, "Rowv"), add.expr, # mapping data to colors breaks, symbreaks=any(x < 0, na.rm=TRUE) || scale!="none", # colors col="heat.colors", # block sepration colsep, rowsep, sepcolor="white", sepwidth=c(0.05,0.05), # cell labeling cellnote, notecex=1.0, notecol="cyan", na.color=par("bg"), # level trace trace=c("column","row","both","none"), tracecol="cyan", hline=median(breaks), vline=median(breaks), linecol=tracecol, # Row/Column Labeling margins = c(5, 5), ColSideColors, RowSideColors, cexRow = 0.2 + 1/log10(nr), cexCol = 0.2 + 1/log10(nc), labRow = NULL, labCol = NULL, srtRow = NULL, srtCol = NULL, adjRow = c(0,NA), adjCol = c(NA,0), offsetRow = 0.5, offsetCol = 0.5, colRow = NULL, colCol = NULL, # color key + density info key = TRUE, keysize = 1.5, density.info=c("histogram","density","none"), denscol=tracecol, symkey = any(x < 0, na.rm=TRUE) || symbreaks, densadj = 0.25, key.title = NULL, key.xlab = NULL, key.ylab = NULL, key.xtickfun = NULL, key.ytickfun = NULL, key.par=list(), # plot labels main = NULL, xlab = NULL, ylab = NULL, # plot layout lmat = NULL, lhei = NULL, lwid = NULL, # extras extrafun=NULL, ... ) } \arguments{ % Dendrogram Control \item{x}{numeric matrix of the values to be plotted. } \item{Rowv}{determines if and how the \emph{row} dendrogram should be reordered. By default, it is TRUE, which implies dendrogram is computed and reordered based on row means. If NULL or FALSE, then no dendrogram is computed and no reordering is done. If a \code{\link{dendrogram}}, then it is used "as-is", ie without any reordering. If a vector of integers, then dendrogram is computed and reordered based on the order of the vector.} \item{Colv}{determines if and how the \emph{column} dendrogram should be reordered. Has the options as the \code{Rowv} argument above and \emph{additionally} when \code{x} is a square matrix, \code{Colv="Rowv"} means that columns should be treated identically to the rows.} \item{distfun}{function used to compute the distance (dissimilarity) between both rows and columns. Defaults to \code{\link{dist}}.} \item{hclustfun}{function used to compute the hierarchical clustering when \code{Rowv} or \code{Colv} are not dendrograms. Defaults to \code{\link{hclust}}.} \item{dendrogram}{character string indicating whether to draw 'none', 'row', 'column' or 'both' dendrograms. Defaults to 'both'. However, if Rowv (or Colv) is FALSE or NULL and dendrogram is 'both', then a warning is issued and Rowv (or Colv) arguments are honoured.} \item{reorderfun}{\code{function(d, w)} of dendrogram and weights for reordering the row and column dendrograms. The default uses \code{\link{stats}{reorder.dendrogram}} }. \item{symm}{logical indicating if \code{x} should be treated \bold{symm}etrically; can only be true when \code{x} is a square matrix.} % data scaling \item{scale}{character indicating if the values should be centered and scaled in either the row direction or the column direction, or none. The default is \code{"none"}.} \item{na.rm}{logical indicating whether \code{NA}'s should be removed.} % image plot \item{revC}{logical indicating if the column order should be \code{\link{rev}}ersed for plotting, such that e.g., for the symmetric case, the symmetry axis is as usual.} \item{add.expr}{expression that will be evaluated after the call to \code{image}. Can be used to add components to the plot.} \item{breaks}{(optional) Either a numeric vector indicating the splitting points for binning \code{x} into colors, or a integer number of break points to be used, in which case the break points will be spaced equally between \code{min(x)} and \code{max(x)}.} \item{symbreaks}{Boolean indicating whether breaks should be made symmetric about 0. Defaults to \code{TRUE} if the data includes negative values, and to \code{FALSE} otherwise.} \item{col}{colors used for the image. Defaults to heat colors (\code{heat.colors}).} % block separation \item{colsep, rowsep, sepcolor}{(optional) vector of integers indicating which columns or rows should be separated from the preceding columns or rows by a narrow space of color \code{sepcolor}.} \item{sepwidth}{(optional) Vector of length 2 giving the width (colsep) or height (rowsep) the separator box drawn by colsep and rowsep as a function of the width (colsep) or height (rowsep) of a cell. Defaults to \code{c(0.05, 0.05)}} % cell labeling \item{cellnote}{(optional) matrix of character strings which will be placed within each color cell, e.g. p-value symbols.} \item{notecex}{(optional) numeric scaling factor for \code{cellnote} items.} \item{notecol}{(optional) character string specifying the color for \code{cellnote} text. Defaults to "cyan".} \item{na.color}{Color to use for missing value (\code{NA}). Defaults to the plot background color.} % level trace \item{trace}{character string indicating whether a solid "trace" line should be drawn across 'row's or down 'column's, 'both' or 'none'. The distance of the line from the center of each color-cell is proportional to the size of the measurement. Defaults to 'column'.} \item{tracecol}{character string giving the color for "trace" line. Defaults to "cyan".} \item{hline, vline, linecol}{Vector of values within cells where a horizontal or vertical dotted line should be drawn. The color of the line is controlled by \code{linecol}. Horizontal lines are only plotted if \code{trace} is 'row' or 'both'. Vertical lines are only drawn if \code{trace} 'column' or 'both'. \code{hline} and \code{vline} default to the median of the breaks, \code{linecol} defaults to the value of \code{tracecol}.} % Row/Column Labeling \item{margins}{numeric vector of length 2 containing the margins (see \code{\link{par}(mar= *)}) for column and row names, respectively.} \item{ColSideColors}{(optional) character vector of length \code{ncol(x)} containing the color names for a horizontal side bar that may be used to annotate the columns of \code{x}.} \item{RowSideColors}{(optional) character vector of length \code{nrow(x)} containing the color names for a vertical side bar that may be used to annotate the rows of \code{x}.} \item{cexRow, cexCol}{positive numbers, used as \code{cex.axis} in for the row or column axis labeling. The defaults currently only use number of rows or columns, respectively.} \item{labRow, labCol}{character vectors with row and column labels to use; these default to \code{rownames(x)} or \code{colnames(x)}, respectively.} \item{srtRow, srtCol}{angle of row/column labels, in degrees from horizontal} \item{adjRow, adjCol}{2-element vector giving the (left-right, top-bottom) justification of row/column labels (relative to the text orientation).} \item{offsetRow, offsetCol}{Number of character-width spaces to place between row/column labels and the edge of the plotting region.} \item{colRow, colCol}{color of row/column labels, either a scalar to set the color of all labels the same, or a vector providing the colors of each label item} % Color key and density info \item{key}{logical indicating whether a color-key should be shown.} \item{keysize}{numeric value indicating the size of the key} \item{density.info}{character string indicating whether to superimpose a 'histogram', a 'density' plot, or no plot ('none') on the color-key.} \item{denscol}{character string giving the color for the density display specified by \code{density.info}, defaults to the same value as \code{tracecol}.} \item{symkey}{Boolean indicating whether the color key should be made symmetric about 0. Defaults to \code{TRUE} if the data includes negative values, and to \code{FALSE} otherwise.} \item{densadj}{Numeric scaling value for tuning the kernel width when a density plot is drawn on the color key. (See the \code{adjust} parameter for the \code{density} function for details.) Defaults to 0.25.} \item{key.title}{main title of the color key. If set to NA no title will be plotted.} \item{key.xlab}{x axis label of the color key. If set to NA no label will be plotted.} \item{key.ylab}{y axis label of the color key. If set to NA no label will be plotted.} \item{key.xtickfun}{function computing tick location and labels for the xaxis of the color key. Returns a named list containing parameters that can be passed to \code{axis}. See examples.} \item{key.ytickfun}{function computing tick location and labels for the y axis of the color key. Returns a named list containing parameters that can be passed to \code{axis}. See examples.} \item{key.par}{graphical parameters for the color key. Named list that can be passed to \code{par}.} % plot labels \item{main, xlab, ylab}{main, x- and y-axis titles; defaults to none.} % figure layout \item{lmat, lhei, lwid}{visual layout: position matrix, column height, column width. See below for details} \item{extrafun}{A function to be called after all other work. See examples.} \item{...}{additional arguments passed on to \code{\link{image}} } } \details{ If either \code{Rowv} or \code{Colv} are dendrograms they are honored (and not reordered). Otherwise, dendrograms are computed as \code{dd <- as.dendrogram(hclustfun(distfun(X)))} where \code{X} is either \code{x} or \code{t(x)}.\cr If either is a vector (of \dQuote{weights}) then the appropriate dendrogram is reordered according to the supplied values subject to the constraints imposed by the dendrogram, by \code{\link{reorder}(dd, Rowv)}, in the row case. %% If either is missing, as by default, then the ordering of the corresponding dendrogram is by the mean value of the rows/columns, i.e., in the case of rows, \code{Rowv <- rowMeans(x, na.rm=na.rm)}. %% If either is \code{\link{NULL}}, \emph{no reordering} will be done for the corresponding side. If \code{scale="row"} (or \code{scale="col"}) the rows (columns) are scaled to have mean zero and standard deviation one. There is some empirical evidence from genomic plotting that this is useful. The default colors range from red to white (\code{heat.colors}) and are not pretty. Consider using enhancements such as the \pkg{RColorBrewer} package, \url{https://cran.r-project.org/package=RColorBrewer} to select better colors. By default four components will be displayed in the plot. At the top left is the color key, top right is the column dendrogram, bottom left is the row dendrogram, bottom right is the image plot. When RowSideColor or ColSideColor are provided, an additional row or column is inserted in the appropriate location. This layout can be overriden by specifiying appropriate values for \code{lmat}, \code{lwid}, and \code{lhei}. \code{lmat} controls the relative postition of each element, while \code{lwid} controls the column width, and \code{lhei} controls the row height. See the help page for \code{\link[graphics]{layout}} for details on how to use these arguments. } \note{ The original rows and columns are reordered to match the dendrograms \code{Rowv} and \code{Colv} (if present). \code{heatmap.2()} uses \code{\link{layout}} to arragent the plot elements. Consequentially, it can \bold{not} be used in a multi column/row layout using \code{\link{layout}(\dots)}, \code{\link{par}(mfrow=\dots)} or \code{(mfcol=\dots)}. } \value{ Invisibly, a list with components \item{rowInd}{row index permutation vector as returned by \code{\link{order.dendrogram}}.} \item{colInd}{column index permutation vector.} \item{call}{the matched call} \item{rowMeans, rowSDs}{mean and standard deviation of each row: only present if \code{scale="row"}} \item{colMeans, colSDs}{mean and standard deviation of each column: only present if \code{scale="column"}} \item{carpet}{reordered and scaled 'x' values used generate the main 'carpet'} \item{rowDendrogram}{row dendrogram, if present} \item{colDendrogram}{column dendrogram, if present} \item{breaks}{values used for color break points} \item{col}{colors used} \item{vline}{center-line value used for column trace, present only if \code{trace="both"} or \code{trace="column"} } \item{hline}{center-line value used for row trace, present only if \code{trace="both"} or \code{trace="row"} } \item{colorTable}{A three-column data frame providing the lower and upper bound and color for each bin} \item{layout}{A named list containing the values used for \code{lmat}, \code{lhei}, and \code{lwid}. } } \author{Andy Liaw, original; R. Gentleman, M. Maechler, W. Huber, G. Warnes, revisions.} \seealso{\code{\link{image}}, \code{\link{hclust}}} \examples{ data(mtcars) x <- as.matrix(mtcars) rc <- rainbow(nrow(x), start=0, end=.3) cc <- rainbow(ncol(x), start=0, end=.3) ## ## demonstrate the effect of row and column dendrogram options ## heatmap.2(x) ## default - dendrogram plotted and reordering done. heatmap.2(x, dendrogram="none") ## no dendrogram plotted, but reordering done. heatmap.2(x, dendrogram="row") ## row dendrogram plotted and row reordering done. heatmap.2(x, dendrogram="col") ## col dendrogram plotted and col reordering done. heatmap.2(x, keysize=2) ## default - dendrogram plotted and reordering done. heatmap.2(x, Rowv=FALSE, dendrogram="both") ## generates a warning! heatmap.2(x, Rowv=NULL, dendrogram="both") ## generates a warning! heatmap.2(x, Colv=FALSE, dendrogram="both") ## generates a warning! ## Reorder dendrogram by branch means rather than sums heatmap.2(x, reorderfun=function(d, w) reorder(d, w, agglo.FUN = mean) ) ## plot a sub-cluster using the same color coding as for the full heatmap full <- heatmap.2(x) heatmap.2(x, Colv=full$colDendrogram[[2]], breaks=full$breaks) # column subset heatmap.2(x, Rowv=full$rowDendrogram[[1]], breaks=full$breaks) # row subset heatmap.2(x, Colv=full$colDendrogram[[2]], Rowv=full$rowDendrogram[[1]], breaks=full$breaks) # both ## Show effect of row and column label rotation heatmap.2(x, srtCol=NULL) heatmap.2(x, srtCol=0, adjCol = c(0.5,1) ) heatmap.2(x, srtCol=45, adjCol = c(1,1) ) heatmap.2(x, srtCol=135, adjCol = c(1,0) ) heatmap.2(x, srtCol=180, adjCol = c(0.5,0) ) heatmap.2(x, srtCol=225, adjCol = c(0,0) ) ## not very useful heatmap.2(x, srtCol=270, adjCol = c(0,0.5) ) heatmap.2(x, srtCol=315, adjCol = c(0,1) ) heatmap.2(x, srtCol=360, adjCol = c(0.5,1) ) heatmap.2(x, srtRow=45, adjRow=c(0, 1) ) heatmap.2(x, srtRow=45, adjRow=c(0, 1), srtCol=45, adjCol=c(1,1) ) heatmap.2(x, srtRow=45, adjRow=c(0, 1), srtCol=270, adjCol=c(0,0.5) ) ## Show effect of offsetRow/offsetCol (only works when srtRow/srtCol is ## not also present) heatmap.2(x, offsetRow=0, offsetCol=0) heatmap.2(x, offsetRow=1, offsetCol=1) heatmap.2(x, offsetRow=2, offsetCol=2) heatmap.2(x, offsetRow=-1, offsetCol=-1) heatmap.2(x, srtRow=0, srtCol=90, offsetRow=0, offsetCol=0) heatmap.2(x, srtRow=0, srtCol=90, offsetRow=1, offsetCol=1) heatmap.2(x, srtRow=0, srtCol=90, offsetRow=2, offsetCol=2) heatmap.2(x, srtRow=0, srtCol=90, offsetRow=-1, offsetCol=-1) ## Show how to use 'extrafun' to replace the 'key' with a scatterplot lmat <- rbind( c(5,3,4), c(2,1,4) ) lhei <- c(1.5, 4) lwid <- c(1.5, 4, 0.75) myplot <- function() { oldpar <- par("mar") par(mar=c(5.1, 4.1, 0.5, 0.5)) plot(mpg ~ hp, data=x) } heatmap.2(x, lmat=lmat, lhei=lhei, lwid=lwid, key=FALSE, extrafun=myplot) ## show how to customize the color key heatmap.2(x, key.title=NA, # no title key.xlab=NA, # no xlab key.par=list(mgp=c(1.5, 0.5, 0), mar=c(2.5, 2.5, 1, 0)), key.xtickfun=function() { breaks <- parent.frame()$breaks return(list( at=parent.frame()$scale01(c(breaks[1], breaks[length(breaks)])), labels=c(as.character(breaks[1]), as.character(breaks[length(breaks)])) )) }) heatmap.2(x, breaks=256, key.title=NA, key.xlab=NA, key.par=list(mgp=c(1.5, 0.5, 0), mar=c(1, 2.5, 1, 0)), key.xtickfun=function() { cex <- par("cex")*par("cex.axis") side <- 1 line <- 0 col <- par("col.axis") font <- par("font.axis") mtext("low", side=side, at=0, adj=0, line=line, cex=cex, col=col, font=font) mtext("high", side=side, at=1, adj=1, line=line, cex=cex, col=col, font=font) return(list(labels=FALSE, tick=FALSE)) }) ## ## Show effect of z-score scaling within columns, blue-red color scale ## hv <- heatmap.2(x, col=bluered, scale="column", tracecol="#303030") ### ## Look at the return values ### names(hv) ## Show the mapping of z-score values to color bins hv$colorTable ## Extract the range associated with white hv$colorTable[hv$colorTable[,"color"]=="#FFFFFF",] ## Determine the original data values that map to white whiteBin <- unlist(hv$colorTable[hv$colorTable[,"color"]=="#FFFFFF",1:2]) rbind(whiteBin[1] * hv$colSDs + hv$colMeans, whiteBin[2] * hv$colSDs + hv$colMeans ) ## ## A more decorative heatmap, with z-score scaling along columns ## hv <- heatmap.2(x, col=cm.colors(255), scale="column", RowSideColors=rc, ColSideColors=cc, margin=c(5, 10), xlab="specification variables", ylab= "Car Models", main="heatmap(, ..., scale=\"column\")", tracecol="green", density="density") ## Note that the breakpoints are now symmetric about 0 ## Color the labels to match RowSideColors and ColSideColors hv <- heatmap.2(x, col=cm.colors(255), scale="column", RowSideColors=rc, ColSideColors=cc, margin=c(5, 10), xlab="specification variables", ylab= "Car Models", main="heatmap(, ..., scale=\"column\")", tracecol="green", density="density", colRow=rc, colCol=cc, srtCol=45, adjCol=c(0.5,1)) %% want example using the `add.exp' argument! data(attitude) round(Ca <- cor(attitude), 2) symnum(Ca) # simple graphic # with reorder heatmap.2(Ca, symm=TRUE, margin=c(6, 6), trace="none" ) # without reorder heatmap.2(Ca, Rowv=FALSE, symm=TRUE, margin=c(6, 6), trace="none" ) ## Place the color key below the image plot heatmap.2(x, lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(1.5, 4, 2 ) ) ## Place the color key to the top right of the image plot heatmap.2(x, lmat=rbind( c(0, 3, 4), c(2,1,0 ) ), lwid=c(1.5, 4, 2 ) ) ## For variable clustering, rather use distance based on cor(): data(USJudgeRatings) symnum( cU <- cor(USJudgeRatings) ) hU <- heatmap.2(cU, Rowv=FALSE, symm=TRUE, col=topo.colors(16), distfun=function(c) as.dist(1 - c), trace="none") ## The Correlation matrix with same reordering: hM <- format(round(cU, 2)) hM # now with the correlation matrix on the plot itself heatmap.2(cU, Rowv=FALSE, symm=TRUE, col=rev(heat.colors(16)), distfun=function(c) as.dist(1 - c), trace="none", cellnote=hM) ## genechip data examples \dontrun{ library(affy) data(SpikeIn) pms <- SpikeIn@pm # just the data, scaled across rows heatmap.2(pms, col=rev(heat.colors(16)), main="SpikeIn@pm", xlab="Relative Concentration", ylab="Probeset", scale="row") # fold change vs "12.50" sample data <- pms / pms[, "12.50"] data <- ifelse(data>1, data, -1/data) heatmap.2(data, breaks=16, col=redgreen, tracecol="blue", main="SpikeIn@pm Fold Changes\nrelative to 12.50 sample", xlab="Relative Concentration", ylab="Probeset") } } \keyword{hplot} gplots/man/ci2d.Rd0000644000176200001440000002114513727070277013464 0ustar liggesusers% $Id$ \name{ci2d} \alias{ci2d} \alias{print.ci2d} \title{ Create 2-dimensional empirical confidence regions } \description{ Create 2-dimensional empirical confidence regions from provided data. } \usage{ ci2d(x, y = NULL, nbins=51, method=c("bkde2D","hist2d"), bandwidth, factor=1.0, ci.levels=c(0.50,0.75,0.90,0.95,0.975), show=c("filled.contour","contour","image","none"), col=topo.colors(length(breaks)-1), show.points=FALSE, pch=par("pch"), points.col="red", xlab, ylab, ...) \method{print}{ci2d}(x, ...) } \arguments{ \item{x}{either a vector containing the x coordinates or a matrix with 2 columns. } \item{y}{a vector contianing the y coordinates, not required if `x' is matrix} \item{nbins}{number of bins in each dimension. May be a scalar or a 2 element vector. Defaults to 51.} \item{method}{One of "bkde2D" (for KernSmooth::bdke2d) or "hist2d" (for gplots::hist2d) specifyting the name of the method to create the 2-d density summarizing the data. Defaults to "bkde2D".} \item{bandwidth}{Bandwidth to use for \code{KernSmooth::bkde2D}. See below for default value. } \item{factor}{Numeric scaling factor for bandwidth. Useful for exploring effect of changing the bandwidth. Defaults to 1.0.} \item{ci.levels}{Confidence level(s) to use for plotting data. Defaults to \code{c(0.5, 0.75, 0.9, 0.95, 0.975)} } \item{show}{Plot type to be displaed. One of "filled.contour", "contour", "image", or "none". Defaults to "filled.contour".} \item{show.points}{Boolean indicating whether original data values should be plotted. Defaults to \code{TRUE}.} \item{pch}{Point type for plots. See \code{points} for details.} \item{points.col}{Point color for plotting original data. Defaiults to "red".} \item{col}{Colors to use for plots.} \item{xlab, ylab}{Axis labels} \item{\dots}{Additional arguments passed to \code{KernSmooth::bkde2D} or \code{gplots::hist2d}. } } \details{ This function utilizes either \code{KernSmooth::bkde2D} or \code{gplots::hist2d} to estmate a 2-dimensional density of the data passed as an argument. This density is then used to create and (optionally) display confidence regions. When \code{bandwidth} is ommited and \code{method="bkde2d"}, \code{KernSmooth::dpik} is appled in x and y dimensions to select the bandwidth. } \note{ Confidence intervals generated by ci2d are \emph{approximate}, and are subject to biases and/or artifacts induced by the binning or kernel smoothing method, bin locations, bin sizes, and kernel bandwidth. The \code{\link[r2d2]{conf2d}} function in the \pkg{r2d2} package may create a more accurate confidence region, and reports the actual proportion of points inside the region. } \value{ A \code{ci2d} object consisting of a list containing (at least) the following elements: \item{nobs}{number of original data points} \item{x}{x position of each density estimate bin} \item{y}{y position of each density estimate bin} \item{density}{Matrix containing the probability density of each bin (count in bin/total count)} \item{cumDensity}{Matrix where each element contains the cumulative probability density of all elements with the same density (used to create the confidence region plots) } \item{contours}{List of contours of each confidence region.} \item{call}{Call used to create this object} } \author{ Gregory R. Warnes \email{greg@warnes.net}} \seealso{ \code{\link[KernSmooth]{bkde2D}}, \code{\link[r2d2]{conf2d}}, \code{\link[KernSmooth]{dpik}}, \code{\link{hist2d}} } \examples{ #### ## Basic usage #### data(geyser, package="MASS") x <- geyser$duration y <- geyser$waiting # 2-d confidence intervals based on binned kernel density estimate ci2d(x,y) # filled contour plot ci2d(x,y, show.points=TRUE) # show original data # image plot ci2d(x,y, show="image") ci2d(x,y, show="image", show.points=TRUE) # contour plot ci2d(x,y, show="contour", col="black") ci2d(x,y, show="contour", col="black", show.points=TRUE) #### ## Control Axis scales #### x <- rnorm(2000, sd=4) y <- rnorm(2000, sd=1) # 2-d confidence intervals based on binned kernel density estimate ci2d(x,y) # 2-d confidence intervals based on 2d histogram ci2d(x,y, method="hist2d", nbins=25) # Require same scale for each axis, this looks oval ci2d(x,y, range.x=list(c(-20,20), c(-20,20))) ci2d(x,y, method="hist2d", same.scale=TRUE, nbins=25) # hist2d #### ## Control smoothing and binning #### x <- rnorm(2000, sd=4) y <- rnorm(2000, mean=x, sd=2) # Default 2-d confidence intervals based on binned kernel density estimate ci2d(x,y) # change the smoother bandwidth ci2d(x,y, bandwidth=c(sd(x)/8, sd(y)/8) ) # change the smoother number of bins ci2d(x,y, nbins=10) ci2d(x,y) ci2d(x,y, nbins=100) # Default 2-d confidence intervals based on 2d histogram ci2d(x,y, method="hist2d", show.points=TRUE) # change the number of histogram bins ci2d(x,y, nbin=10, method="hist2d", show.points=TRUE ) ci2d(x,y, nbin=25, method="hist2d", show.points=TRUE ) #### ## Perform plotting manually #### data(geyser, package="MASS") # let ci2d handle plotting contours... ci2d(geyser$duration, geyser$waiting, show="contour", col="black") # call contour() directly, show the 90 percent CI, and the mean point est <- ci2d(geyser$duration, geyser$waiting, show="none") contour(est$x, est$y, est$cumDensity, xlab="duration", ylab="waiting", levels=0.90, lwd=4, lty=2) points(mean(geyser$duration), mean(geyser$waiting), col="red", pch="X") #### ## Extract confidence region values ### data(geyser, package="MASS") ## Empirical 90 percent confidence limits quantile( geyser$duration, c(0.05, 0.95) ) quantile( geyser$waiting, c(0.05, 0.95) ) ## Bivariate 90 percent confidence region est <- ci2d(geyser$duration, geyser$waiting, show="none") names(est$contours) ## show available contours ci.90 <- est$contours[names(est$contours)=="0.9"] # get region(s) ci.90 <- rbind(ci.90[[1]],NA, ci.90[[2]], NA, ci.90[[3]]) # join them print(ci.90) # show full contour range(ci.90$x, na.rm=TRUE) # range for duration range(ci.90$y, na.rm=TRUE) # range for waiting #### ## Visually compare confidence regions #### data(geyser, package="MASS") ## Bivariate smoothed 90 percent confidence region est <- ci2d(geyser$duration, geyser$waiting, show="none") names(est$contours) ## show available contours ci.90 <- est$contours[names(est$contours)=="0.9"] # get region(s) ci.90 <- rbind(ci.90[[1]],NA, ci.90[[2]], NA, ci.90[[3]]) # join them plot( waiting ~ duration, data=geyser, main="Comparison of 90 percent confidence regions" ) polygon( ci.90, col="green", border="green", density=10) ## Univariate Normal-Theory 90 percent confidence region mean.x <- mean(geyser$duration) mean.y <- mean(geyser$waiting) sd.x <- sd(geyser$duration) sd.y <- sd(geyser$waiting) t.value <- qt(c(0.05,0.95), df=length(geyser$duration), lower=TRUE) ci.x <- mean.x + t.value* sd.x ci.y <- mean.y + t.value* sd.y plotCI(mean.x, mean.y, li=ci.x[1], ui=ci.x[2], barcol="blue", col="blue", err="x", pch="X", add=TRUE ) plotCI(mean.x, mean.y, li=ci.y[1], ui=ci.y[2], barcol="blue", col="blue", err="y", pch=NA, add=TRUE ) # rect(ci.x[1], ci.y[1], ci.x[2], ci.y[2], border="blue", # density=5, # angle=45, # col="blue" ) ## Empirical univariate 90 percent confidence region box <- cbind( x=quantile( geyser$duration, c(0.05, 0.95 )), y=quantile( geyser$waiting, c(0.05, 0.95 )) ) rect(box[1,1], box[1,2], box[2,1], box[2,2], border="red", density=5, angle=-45, col="red" ) ## now a nice legend legend( "topright", legend=c(" Region type", "Univariate Normal Theory", "Univarite Empirical", "Smoothed Bivariate"), lwd=c(NA,1,1,1), col=c("black","blue","red","green"), lty=c(NA,1,1,1) ) #### ## Test with a large number of points #### \dontrun{ x <- rnorm(60000, sd=1) y <- c( rnorm(40000, mean=x, sd=1), rnorm(20000, mean=x+4, sd=1) ) hist2d(x,y) ci <- ci2d(x,y) ci } } \keyword{dplot} \keyword{hplot} \keyword{nonparametric} gplots/man/residplot.Rd0000644000176200001440000000125012471456254014641 0ustar liggesusers% $Id: residplot.Rd 1441 2010-06-11 03:11:54Z warnes $ \name{residplot} \alias{residplot} %\alias{iapply} \title{Undocumented functions} \description{ These functions are undocumented. Some are internal and not intended for direct use. Others simply haven't been documented yet. } \usage{ residplot(model, formula, ...) } \arguments{ \item{model}{Undocumented} \item{formula}{Undocumented} \item{\dots}{ arguments to be passed to \code{fun} } } \details{ These functions are undocumented. Some are internal and not intended for direct use. Others simply haven't been documented yet. } \author{Gregory R. Warnes \email{greg@warnes.net}} \keyword{misc} gplots/man/reorder.Rd0000644000176200001440000000607613003720416014273 0ustar liggesusers\name{reorder.factor} \alias{reorder.factor} \title{Reorder the Levels of a Factor} \description{ Reorder the levels of a factor } \usage{ \method{reorder}{factor}(x, X, FUN, ..., order=is.ordered(x), new.order, sort=mixedsort) } \arguments{ \item{x}{factor} \item{X}{auxillary data vector} \item{FUN}{function to be applied to subsets of \code{X} determined by \code{x}, to determine factor order} \item{...}{optional parameters to \code{FUN}} \item{order}{logical value indicating whether the returned object should be an \code{\link{ordered}} factor} \item{new.order}{a vector of indexes or a vector of label names giving the order of the new factor levels} \item{sort}{function to use to sort the factor level names, used only when \code{new.order} is missing} } \details{ This function changes the order of the levels of a factor. It can do so via three different mechanisms, depending on whether, \code{X} \emph{and} \code{FUN}, \code{new.order} or \code{sort} are provided. If \code{X} \emph{and} \code{Fun} are provided: The data in \code{X} is grouped by the levels of \code{x} and \code{FUN} is applied. The groups are then sorted by this value, and the resulting order is used for the new factor level names. If \code{new.order} is a numeric vector, the new factor level names are constructed by reordering the factor levels according to the numeric values. If \code{new.order} is a chraccter vector, \code{new.order} gives the list of new factor level names. In either case levels omitted from \code{new.order} will become missing (\code{NA}) values. If \code{sort} is provided (as it is by default): The new factor level names are generated by calling the function specified by \code{sort} to the existing factor level \emph{names}. With \code{sort=mixedsort} (the default) the factor levels are sorted so that combined numeric and character strings are sorted in according to character rules on the character sections (including ignoring case), and the numeric rules for the numeric sections. See \code{\link[gtools]{mixedsort}} for details. } \value{ A new factor with reordered levels } \author{Gregory R. Warnes \email{greg@warnes.net}} \seealso{ \code{\link{factor}} and \code{\link[stats]{reorder}} } \examples{ \dontshow{ set.seed(123456) } # Create a 4 level example factor trt <- factor( sample( c("PLACEBO", "300 MG", "600 MG", "1200 MG"), 100, replace=TRUE ) ) summary(trt) # Note that the levels are not in a meaningful order. # Change the order to something useful.. # - default "mixedsort" ordering trt2 <- reorder(trt) summary(trt2) # - using indexes: trt3 <- reorder(trt, new.order=c(4, 2, 3, 1)) summary(trt3) # - using label names: trt4 <- reorder(trt, new.order=c("PLACEBO", "300 MG", "600 MG", "1200 MG")) summary(trt4) # - using frequency trt5 <- reorder(trt, X=rnorm(100), FUN=mean) summary(trt5) # Drop out the '300 MG' level trt6 <- reorder(trt, new.order=c("PLACEBO", "600 MG", "1200 MG")) summary(trt6) } \keyword{ manip } gplots/man/overplot.Rd0000644000176200001440000000666712471456254014527 0ustar liggesusers\name{overplot} \alias{overplot} \alias{panel.overplot} \title{Plot multiple variables on the same region, with appropriate axes} \description{ \code{overplot} graphs a set of variables defined on the same x-range but which have varying y-ranges on the same plotting area. For each set of y-values it uses a different color and line-type and and draws a correspondingly colored and line-typed axis. \code{panel.overplot} is used by \code{overplot} to draw the individual graphs. } \usage{ overplot(formula, data = parent.frame(), same.scale = FALSE, xlab, ylab, xlim, ylim, min.y, max.y, log = "", panel = "panel.overplot", subset, plot = TRUE, groups, main, f = 2/3, ...) } \arguments{ \item{formula}{Formula describing the x and y variables. It should be of the form x ~ y|z. The conditioning variable (z) should be a factor.} \item{same.scale}{ Logical value indicating whether the plot region should have the same range for all plots. Defaults to \code{FALSE}.} \item{xlab, ylab, xlim, ylim, main}{ Standard plotting parameters. See \code{\link{plot}} for details} \item{min.y, max.y}{Scalar or vector values used to specify the y plotting limits for individual plots. If a single scalar value is provided, it will be used for all plots. These parameters can be used specify one end of the individual plot ranges, while allowing the other end to vary with the data. EG, to force 0 to always be within the plot region.} \item{log}{ character string '', 'x', 'y', or 'xy', indicating which axes should be plotted on a log scale. Defaults to '' (neither).} \item{panel}{ a plotting function to be called to draw the individual plots. Defaults to \code{overplot.panel}, which plots the points and a \code{lowess} smooth. } \item{plot}{Logical value indicating whether to draw the plot.} \item{groups}{(optional) character vector giving the names of levels of the conditioning variable to plot. Defaults to all levels of the conditioning variable.} \item{f}{Smoothing parameter for \code{lowess}} \item{data, subset, \dots}{parameters passed to \code{model.frame} to obtain the data to be plotted from the formula.} } \details{ This function essentially performs tmp <- split(data, z) for(i in levels(z)) plot( x ~ y, data=tmp[[z]] ) except that all of the plots are shown on the same plotting region and varying scales for each value of z are handled nicely. } \value{ A copy of the data split by the conditioning variable. } \author{ Gregory R. Warnes \email{greg@warnes.net} } \seealso{ \code{\link{interaction.plot}}, \code{\link{coplot}} for alternative visualizations of 3-way data.} \examples{ # Example teratogenicity rtPCR data data(rtPCR) # same scale overplot( RQ ~ Conc..ug.ml. | Test.Substance, data=rtPCR, subset=Detector=="ProbeType 1" & Conc..ug.ml. > 0, same.scale=TRUE, log="xy", f=3/4, main="Detector=ProbeType 1", xlab="Concentration (ug/ml)", ylab="Relative Gene Quantification" ) # different scales, but force lower limit to 0.01 overplot( RQ ~ Conc..ug.ml. | Test.Substance, data=rtPCR, subset=Detector=="ProbeType 8" & Conc..ug.ml. > 0, log="xy", f=3/4, main="Detector=ProbeType 8", xlab="Concentration (ug/ml)", ylab="Relative Gene Quantification", min.y=0.01 ) } \keyword{hplot} gplots/man/rtPCR.Rd0000644000176200001440000000436112471456253013633 0ustar liggesusers\name{rtPCR} \alias{rtPCR} \docType{data} \title{Teratogenesis rtPCR data} \description{ rtPCR data for experiments investigating a variety of markers for characterizing teratogenicity. } \usage{data(rtPCR)} \format{ A data frame with 1672 observations on the following 21 variables. \describe{ \item{PlateID}{a factor with levels \code{A0027002} through \code{A0054019}} \item{Test.Substance}{a factor with levels \code{Compound A} through \code{Compound H}} \item{Teratogenicity.in.vivo}{a factor with levels \code{Non} \code{Strong} \code{Weak / Moderate}} \item{Sample}{a factor with levels \code{Sample 1} - \code{Sample 152}} \item{Rep..}{a factor with levels \code{Rep 1} - \code{Rep 21}} \item{Label}{a factor with levels \code{Ctrl}, \code{Neg. Ctrl} \code{P1} - \code{P9}, \code{No Vehicle Ctrl}, and \code{Pos. Ctrl}} \item{Conc..ug.ml.}{a numeric vector} \item{Detector}{a factor with levels \code{ProbeType 1} - \code{ProbeType 17}} \item{Avg.delta.Ct}{a numeric vector} \item{delta.Ct.SD}{a numeric vector} \item{delta.delta.Ct}{a numeric vector} \item{RQ}{a numeric vector} \item{X..RQ}{a numeric vector} \item{X100..Custom..}{a numeric vector} \item{X100...Custom..}{a numeric vector} \item{Custom..}{a numeric vector} \item{Custom...1}{a numeric vector} \item{RQ.Min}{a numeric vector} \item{RQ.Max}{a numeric vector} \item{Threshold}{a numeric vector} } } \details{ TBA } \source{ Anonymized data. } \examples{ data(rtPCR) # same scale overplot( RQ ~ Conc..ug.ml. | Test.Substance, data=rtPCR, subset=Detector=="ProbeType 7" & Conc..ug.ml. > 0, same.scale=TRUE, log="xy", f=3/4, main="Detector=ProbeType 7", xlab="Concentration (ug/ml)", ylab="Relative Gene Quantification" ) # different scales, but force lower limit to 0.01 overplot( RQ ~ Conc..ug.ml. | Test.Substance, data=rtPCR, subset=Detector=="ProbeType 7" & Conc..ug.ml. > 0, log="xy", f=3/4, main="Detector=ProbeType 7", xlab="Concentration (ug/ml)", ylab="Relative Gene Quantification", min.y=0.01 ) } \keyword{datasets} gplots/man/qqnorm.aov.Rd0000644000176200001440000000430512471456253014740 0ustar liggesusers\name{qqnorm.aov} \alias{qqnorm.aov} \title{ Makes a half or full normal plot for the effects from an aov model } \description{ Makes a half or full normal plot for the effects from a model inheriting from class \code{aov}. One can interactively label the points in the plot. } \usage{ \method{qqnorm}{aov}(y, full=FALSE, label=FALSE, omit=NULL, xlab=paste(if (full) "" else "Half", " Normal plot"), ylab="Effects", ...) } \arguments{ \item{y}{A model object inheriting from \code{aov}} \item{full}{Full or half normal plot (half is default) } \item{label}{If \code{TRUE}, function allows interactive labelling of points in plot, using the mouse } \item{omit}{Numeric or character vector of effects to omit, the intercept is always omitted} \item{xlab}{Horizontal axix label } \item{ylab}{Vertical axis label } \item{\dots}{Further arguments to be given to the plot function } } \details{ Produces a (half) normal plot of the effects from an AOV model. The idea behind the plot is that most effects will be small or null, and this effects can be used as a basis for estimation of the experimental variance. This small effects will show up in the plot as a straight line, other effects can be judged against this as a background. Heavily used by Box, Hunter \& Hunter, which attributes the idea to Daniel. This is a simpler implementation than the one in S-Plus. } \value{ If \code{label=TRUE}, the vector of points identified, else nothing of interest. } \references{ Box, Hunter and Hunter: Statistics for Experimenters. An Introduction to Design, Data Analysis and Model Building. Wiley. \cr Daniel, C (1976): Applications of Statistics to Industrial Experimentation. Wiley. \cr Daniel, C (1959): Use of half-normal plot in interpreting factorial two-level experiments. \emph{Technometrics.}\bold{1}, 149. } \author{Kjetil Halvorsen \email{kjetil@entelnet.bo}} \examples{ library(MASS) data(npk) npk.aov <- aov(yield ~ block + N*P*K, npk) qqnorm(npk.aov) ## interactive labeling of points. Click mouse on points to show label. if (dev.interactive()) qqnorm(npk.aov, omit=2:6, label=TRUE) } \keyword{ hplot }% \keyword{ design } gplots/man/plotmeans.Rd0000644000176200001440000001205713760442636014646 0ustar liggesusers\name{plotmeans} \alias{plotmeans} \title{Plot Group Means and Confidence Intervals} \description{Plot group means and confidence intervals.} \usage{ plotmeans(formula, data=NULL, subset, na.action, bars=TRUE, p=0.95, minsd=0, minbar, maxbar, xlab=names(mf)[2], ylab=names(mf)[1], mean.labels=FALSE, ci.label=FALSE, n.label=TRUE, text.n.label="n=", digits=getOption("digits"), col="black", barwidth=1, barcol="blue", connect=TRUE, ccol= col, legends=names(means), xaxt, use.t=TRUE, lwd=par("lwd"), ...) } \arguments{ \item{formula}{symbolic expression specifying the outcome (continuous) and grouping variable (factor). See lm() for details.} \item{data}{optional data frame containing the variables in the model.} \item{subset}{an optional vector specifying a subset of observations to be used in the fitting process.} \item{na.action}{a function which indicates what should happen when the data contain `NA's. See lm() for details. } \item{bars}{a logical value indicating whether confidence interval bars should be plotted. Defaults to TRUE.} \item{p}{confidence level for error bars. Defaults to 0.95.} \item{minsd}{minumum permitted value for the standard deviation within each factor level. Any standard deviation estimates smaller than \code{minsd} will be replaced with \code{minsd}. Defaults to 0.} \item{minbar}{minumum allowed value for bar ends. If specified, values smaller than \code{minbar} will be replaced with \code{minbar}. } \item{maxbar}{maximum allowed value for bar ends. If specified, values larger than \code{maxbar} will be replaced with \code{maxbar}. } \item{xlab}{x-axis label.} \item{ylab}{y-axis label.} \item{mean.labels}{ either a logical value indicating whether the circles representing the group means should be replaced with text giving the actual mean values or a vector containing labels to use instead. Defaults to FALSE.} \item{ci.label}{ a logical value indicating whether text giving the actual interval end values should be placed at the end of each confidence interval bar. Defaults to FALSE.} \item{n.label}{ a logical value indicating whether text giving the number of observations in each group should should be added to the plot. } \item{text.n.label}{Prefix text for labeling observation counts. Defaults to "n=". } \item{digits}{ number of significant digits to use when displaying mean or confidince limit values.} \item{col}{ color of cicles marking group means. Default is "black".} \item{barwidth}{ linewidth of interval bars and end marks. Default is 1.} \item{barcol}{ color of interval bars and end marks. Default is "blue".} \item{connect}{ either a logical value indicating whether the means of each group should be connected by a line, or a list of vectors giving the index of bars that should be connected by a line. Defaults to TRUE.} \item{ccol}{ color of lines used to connect means. Defaults to the same color as "col".} \item{legends}{ vector containing strings used to label groups along the x axis. Defaults to group names.} \item{xaxt}{A character which specifies the axis type. Specifying `"n"' causes an axis to be set up, but not plotted.} \item{use.t}{ a logical value indicating whether the t distribution should be used to compute confidence intervals. If \code{TRUE}, the default, a t distribution will the correct number of degrees of freedom for each group be used. If \code{FALSE}, the a normal distribution will be used.} \item{lwd}{Width of connecting lines } \item{\dots}{ optional plotting parameters. } } %\details{ % % %} \examples{ # library(gplots) # show comparison with boxplot data(state) plotmeans(state.area ~ state.region) # show some color and mean labels plotmeans(state.area ~ state.region, mean.labels=TRUE, digits=-3, col="red", connect=FALSE) # show how to specify which means should be connected plotmeans(state.area ~ state.region, connect=list(1:2, 3:4), ccol="red", pch=7 ) # more complicated example showing how to show an interaction data(esoph) par(las=2, # use perpendicular axis labels mar=c(10.1,4.1,4.1,2.1), # create enough space for long x labels mgp=c(8,1,0) # move x axis legend down to avoid overlap ) plotmeans(ncases/ncontrols ~ interaction(agegp , alcgp, sep =" "), connect=list(1:6,7:12,13:18,19:24), barwidth=2, col="dark green", data=esoph, xlab="Age Group and Alcohol Consumption", ylab="# Cases / # Controls", ylim = c(-.9,1.4), main=c("Fraction of Cases for by Age and Alcohol Consumption", "Ile-et-Vilaine Esophageal Cancer Study") ) abline(v=c(6.5, 12.5, 18.5), lty=2) } \author{Gregory R. Warnes \email{greg@warnes.net}} \seealso{\code{\link{plotCI}}, \code{\link{boxplot}}} \keyword{hplot} gplots/man/sinkplot.Rd0000644000176200001440000000331212521207034014462 0ustar liggesusers\name{sinkplot} \alias{sinkplot} \title{Send textual R output to a graphics device} \description{ Divert R's standard text output to a graphics device. } \usage{ sinkplot(operation = c("start", "plot", "cancel"), ...) } \arguments{ \item{operation}{See below} \item{\dots}{Plot arguments. (Ignored unless \code{operation}="plot").} } \details{ This function allows the printed output of R commands to be captured and displayed on a graphics device. The capture process is started by calling \code{sinkplot("start")}. Now R commands can be executed and all printed output (except errors) will be captured. When the desired text has been captured \code{sinkplot("plot")} can be called to actually display the output. \code{sinkplot("cancel")} can be used to abort the output capture without plotting. The current implementation does not allow \code{sinkplot} to be nested. } \value{ Invisibly returns a character vector containing one element for each line of the captured output. } \references{Functionality requested by Kevin Wright \email{kwright@eskimo.com} in the R-devel newlist posting \url{https://stat.ethz.ch/pipermail/r-devel/2004-January/028483.html}. } \author{ Gregory R. Warnes \email{greg@warnes.net} } \seealso{ \code{\link[utils]{capture.output}}, \code{\link{textplot}} } \examples{ set.seed(12456) x <- factor(sample( LETTERS[1:5], 50, replace=TRUE)) y <- rnorm(50, mean=as.numeric(x), sd=1) ## construct a figure showing a box plot of the data, followed by an ## analysis of variance table for the data layout(cbind(1:2), heights=c(2,1)) boxplot(y~x, col="darkgreen") sinkplot() anova(lm(y~x)) sinkplot("plot",col="darkgreen") } \keyword{hplot} gplots/man/angleAxis.Rd0000644000176200001440000000545612664124074014557 0ustar liggesusers\name{angleAxis} \alias{angleAxis} \title{Add a Axis to a Plot with Rotated Labels} \description{ Add a labeled axis to the current plot with rotated text } \usage{ angleAxis(side, labels, at = 1:length(labels), srt = 45, adj, xpd = TRUE, ...) } \arguments{ \item{side}{ an integer specifying which side of the plot the axis is to be drawn on. The axis is placed as follows: 1=below, 2=left, 3=above and 4=right. } \item{labels}{character or expression vector of labels to be placed at the tickpoints. } \item{at}{the points at which tick-marks are to be drawn. Non-finite (infinite, NaN or NA) values are omitted. } \item{srt}{ The string rotation in degrees. Defaults to 45 degrees (clockwise). } \item{adj}{Text justification. A value of 0 produces left-justified text, 0.5 centered text and 1 right-justified text. For \code{side=1} and \code{side=2}, the default value is \code{adj=1}. For \code{side=3} and \code{side=4} the default value is \code{adj=0}. } \item{xpd}{A logical value or NA. If FALSE, labels are clipped to the plot region, if TRUE, labels are clipped to the figure region, and if NA, labels are clipped to the device region. } \item{\dots}{optional arguments passed to \code{text}. Common examples are \code{col}, \code{cex}.} } \details{ This function augments the feature of the \code{axis} functon by allowing the axis labels to be rotated. } \author{Gregory R. Warnes \email{greg@warnes.net} } \seealso{ \code{\link{axis}} } \examples{ \dontshow{set.seed(42)} # create a vector with some values and long labels values <- sample(1:10) names(values) <- sapply(letters[1:10], function(x) paste(rep(x, 10), sep="",collapse="") ) # barplot labels are too long for the available space, hence some are not plotted barplot(values) # to add angled labels, tell barplot not to label the x axis, and store the bar location at <- barplot(values, xaxt="n") # then use angleAxs angleAxis(1, at=at, labels = names(values)) # angle counter-clockwise instead at <- barplot(values, xaxt="n") angleAxis(1, at=at, labels = names(values), srt=-45, adj=0) # put labels at the top oldpar <- par()$mar par(mar=c(1,4,5,2)+0.1) at <- barplot(values, xaxt="n") angleAxis(3, at=at, labels = names(values)) par(oldpar) # put labels on the left oldpar <- par()$mar par(mar=c(5,5,3,2)+0.1) at <- barplot(values, yaxt="n", horiz=TRUE) angleAxis(2, at=at, labels = names(values)) par(oldpar) # put labels on the right oldpar <- par()$mar par(mar=c(2,5,3,5)+0.1) at <- barplot(values, yaxt="n", horiz=TRUE) angleAxis(4, at=at, labels = names(values)) par(oldpar) # specify colors for bars and labels at <- barplot(values, xaxt="n", col=1:10) angleAxis(1, at=at, labels = names(values), col=1:10) } \keyword{aplot} gplots/TODO0000644000176200001440000000052212471456254012263 0ustar liggesusers plot.lm2 -------- - Upgrade to match current plot.lm code - For predictor vs resid, use boxplot when predictor is a factor - Rug plot or histogram for residuals/fitted values in both dimensions - Confidence region for normal distribution with equivalent number of points on QQ plot - display "bad" cutoff line for cook's distance plot gplots/DESCRIPTION0000644000176200001440000000502313760452612013276 0ustar liggesusersPackage: gplots Title: Various R Programming Tools for Plotting Data Description: Various R programming tools for plotting data, including: - calculating and plotting locally smoothed summary function as ('bandplot', 'wapply'), - enhanced versions of standard plots ('barplot2', 'boxplot2', 'heatmap.2', 'smartlegend'), - manipulating colors ('col2hex', 'colorpanel', 'redgreen', 'greenred', 'bluered', 'redblue', 'rich.colors'), - calculating and plotting two-dimensional data summaries ('ci2d', 'hist2d'), - enhanced regression diagnostic plots ('lmplot2', 'residplot'), - formula-enabled interface to 'stats::lowess' function ('lowess'), - displaying textual data in plots ('textplot', 'sinkplot'), - plotting a matrix where each cell contains a dot whose size reflects the relative magnitude of the elements ('balloonplot'), - plotting "Venn" diagrams ('venn'), - displaying Open-Office style plots ('ooplot'), - plotting multiple data on same region, with separate axes ('overplot'), - plotting means and confidence intervals ('plotCI', 'plotmeans'), - spacing points in an x-y plot so they don't overlap ('space'). Depends: R (>= 3.0) Imports: gtools, stats, caTools, KernSmooth Suggests: grid, MASS, knitr VignetteBuilder: knitr Version: 3.1.1 Date: 2020-11-28 Authors@R: c( person("Gregory R.", "Warnes", , role = "aut"), person("Ben", "Bolker", , role = "aut"), person("Lodewijk", "Bonebakker", , role = "aut"), person("Robert", "Gentleman", role = "aut"), person("Wolfgang", "Huber", role = "aut"), person("Andy", "Liaw", role = "aut"), person("Thomas", "Lumley", role = "aut"), person("Martin", "Maechler", role = "aut"), person("Arni", "Magnusson", role = "aut"), person("Steffen", "Moeller", role = "aut"), person("Marc", "Schwartz", role = "aut"), person("Bill", "Venables", role = "aut"), person("Tal", "Galili", , "tal.galili@gmail.com", c("ctb", "cre")) ) License: GPL-2 URL: https://github.com/talgalili/gplots BugReports: https://github.com/talgalili/gplots/issues NeedsCompilation: no Packaged: 2020-11-28 13:04:00 UTC; talgalili Author: Gregory R. Warnes [aut], Ben Bolker [aut], Lodewijk Bonebakker [aut], Robert Gentleman [aut], Wolfgang Huber [aut], Andy Liaw [aut], Thomas Lumley [aut], Martin Maechler [aut], Arni Magnusson [aut], Steffen Moeller [aut], Marc Schwartz [aut], Bill Venables [aut], Tal Galili [ctb, cre] Maintainer: Tal Galili Repository: CRAN Date/Publication: 2020-11-28 13:50:02 UTC gplots/build/0000755000176200001440000000000013760445300012663 5ustar liggesusersgplots/build/vignette.rds0000644000176200001440000000032113760445300015216 0ustar liggesusersmP0  pC%0,.r4i׽oxPFM!>C\87wT( suppressMessages(library(gplots)) > data(mtcars) > x <- as.matrix(mtcars) > rc <- rainbow(nrow(x), start=0, end=.3) > cc <- rainbow(ncol(x), start=0, end=.3) > > heatmap.2(x) ## default - dendrogram plotted and reordering done. > heatmap.2(x, dendrogram="none") ## no dendrogram plotted, but reordering done. > heatmap.2(x, dendrogram="row") ## row dendrogram plotted and row reordering done. > heatmap.2(x, dendrogram="col") ## col dendrogram plotted and col reordering done. > > heatmap.2(x, keysize=2) ## default - dendrogram plotted and reordering done. > > > heatmap.2(x, Colv=FALSE) Warning message: In heatmap.2(x, Colv = FALSE) : Discrepancy: Colv is FALSE, while dendrogram is `both'. Omitting column dendogram. > heatmap.2(x, Colv=NULL) Warning message: In heatmap.2(x, Colv = NULL) : Discrepancy: Colv is FALSE, while dendrogram is `both'. Omitting column dendogram. > > heatmap.2(x, Rowv=FALSE) Warning message: In heatmap.2(x, Rowv = FALSE) : Discrepancy: Rowv is FALSE, while dendrogram is `both'. Omitting row dendogram. > heatmap.2(x, Rowv=NULL) Warning message: In heatmap.2(x, Rowv = NULL) : Discrepancy: Rowv is FALSE, while dendrogram is `both'. Omitting row dendogram. > > heatmap.2(x, Rowv=FALSE, dendrogram="both") ## generate warning! Warning message: In heatmap.2(x, Rowv = FALSE, dendrogram = "both") : Discrepancy: Rowv is FALSE, while dendrogram is `both'. Omitting row dendogram. > heatmap.2(x, Rowv=NULL, dendrogram="both") ## generate warning! Warning message: In heatmap.2(x, Rowv = NULL, dendrogram = "both") : Discrepancy: Rowv is FALSE, while dendrogram is `both'. Omitting row dendogram. > heatmap.2(x, Colv=FALSE, dendrogram="both") ## generate warning! Warning message: In heatmap.2(x, Colv = FALSE, dendrogram = "both") : Discrepancy: Colv is FALSE, while dendrogram is `both'. Omitting column dendogram. > > > > heatmap.2(x,dendrogram="both", Rowv=FALSE) ## row and col reordering done, but only col dendrogram plotted Warning message: In heatmap.2(x, dendrogram = "both", Rowv = FALSE) : Discrepancy: Rowv is FALSE, while dendrogram is `both'. Omitting row dendogram. > heatmap.2(x,dendrogram="row", Rowv=FALSE) Warning message: In heatmap.2(x, dendrogram = "row", Rowv = FALSE) : Discrepancy: Rowv is FALSE, while dendrogram is `row'. Omitting row dendogram. > > > heatmap.2(x,dendrogram="col", Rowv=FALSE) > heatmap.2(x,dendrogram="none", Rowv=FALSE) > > > heatmap.2(x,dendrogram="both", Colv=FALSE) ## row and col reordering done, but only row dendrogram plotted Warning message: In heatmap.2(x, dendrogram = "both", Colv = FALSE) : Discrepancy: Colv is FALSE, while dendrogram is `both'. Omitting column dendogram. > heatmap.2(x,dendrogram="row", Colv=FALSE) > heatmap.2(x,dendrogram="col", Colv=FALSE) Warning message: In heatmap.2(x, dendrogram = "col", Colv = FALSE) : Discrepancy: Colv is FALSE, while dendrogram is `column'. Omitting column dendogram. > heatmap.2(x,dendrogram="none", Colv=FALSE) > > ## above statement is same as heatmap.2(x,Colv=FALSE) > heatmap.2(x,dendrogram="col", Colv=FALSE) ## col reordering done, but no dendrogram plotted Warning message: In heatmap.2(x, dendrogram = "col", Colv = FALSE) : Discrepancy: Colv is FALSE, while dendrogram is `column'. Omitting column dendogram. > > > hv <- heatmap.2(x, col=cm.colors(256), scale="column", + RowSideColors=rc, ColSideColors=cc, margin=c(5, 10), + xlab="specification variables", ylab= "Car Models", + main="heatmap(, \n ..., scale=\"column\")", + tracecol="green", density="density") > > ## IGNORE_RDIFF_BEGIN > str(hv) # the two re-ordering index vectors List of 13 $ rowInd : int [1:32] 31 17 16 15 5 25 29 24 7 6 ... $ colInd : int [1:11] 2 9 8 11 6 5 10 7 1 4 ... $ call : language heatmap.2(x = x, scale = "column", col = cm.colors(256), tracecol = "green", margins = c(5, 10), ColSideColo| __truncated__ ... $ colMeans : Named num [1:11] 6.188 0.406 0.438 2.812 3.217 ... ..- attr(*, "names")= chr [1:11] "cyl" "am" "vs" "carb" ... $ colSDs : Named num [1:11] 1.786 0.499 0.504 1.615 0.978 ... ..- attr(*, "names")= chr [1:11] "cyl" "am" "vs" "carb" ... $ carpet : num [1:11, 1:32] 1.015 1.19 -0.868 3.212 0.361 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:11] "cyl" "am" "vs" "carb" ... .. ..$ : chr [1:32] "Maserati Bora" "Chrysler Imperial" "Lincoln Continental" "Cadillac Fleetwood" ... $ rowDendrogram: ..--[dendrogram w/ 2 branches and 32 members at h = 425, midpoint = 8.58, value = 1267] .. |--[dendrogram w/ 2 branches and 9 members at h = 215, midpoint = 1.84, value = 552] .. | |--leaf "Maserati Bora" ( value.Maserati Bora = 63.2 ) .. | `--[dendrogram w/ 2 branches and 8 members at h = 135, midpoint = 2.69, value = 489] .. | |--[dendrogram w/ 2 branches and 3 members at h = 40.8, midpoint = 0.75, value = 198] .. | | |--leaf "Chrysler Imperial" ( value.Chrysler Imperial = 66 ) .. | | `--[dendrogram w/ 2 branches and 2 members at h = 15.6, midpoint = 0.5, value = 132] .. | | |--leaf "Lincoln Continental" ( value.Lincoln Continental = 66.1 ) .. | | `--leaf "Cadillac Fleetwood" ( value.Cadillac Fleetwood = 66.2 ) .. | `--[dendrogram w/ 2 branches and 5 members at h = 102, midpoint = 1.62, value = 290] .. | |--[dendrogram w/ 2 branches and 2 members at h = 40, midpoint = 0.5, value = 111] .. | | |--leaf "Hornet Sportabout" ( value.Hornet Sportabout = 53.7 ) .. | | `--leaf "Pontiac Firebird" ( value.Pontiac Firebird = 57.4 ) .. | `--[dendrogram w/ 2 branches and 3 members at h = 21.3, midpoint = 0.75, value = 179] .. | |--leaf "Ford Pantera L" ( value.Ford Pantera L = 61 ) .. | `--[dendrogram w/ 2 branches and 2 members at h = 10.1, midpoint = 0.5, value = 118] .. | |--leaf "Camaro Z28" ( value.Camaro Z28 = 58.8 ) .. | `--leaf "Duster 360" ( value.Duster 360 = 59.7 ) .. `--[dendrogram w/ 2 branches and 23 members at h = 262, midpoint = 6.33, value = 716] .. |--[dendrogram w/ 2 branches and 7 members at h = 103, midpoint = 2.06, value = 306] .. | |--[dendrogram w/ 2 branches and 2 members at h = 33.6, midpoint = 0.5, value = 73.8] .. | | |--leaf "Valiant" ( value.Valiant = 35 ) .. | | `--leaf "Hornet 4 Drive" ( value.Hornet 4 Drive = 38.7 ) .. | `--[dendrogram w/ 2 branches and 5 members at h = 51.8, midpoint = 1.62, value = 233] .. | |--[dendrogram w/ 2 branches and 2 members at h = 14, midpoint = 0.5, value = 93.2] .. | | |--leaf "AMC Javelin" ( value.AMC Javelin = 46 ) .. | | `--leaf "Dodge Challenger" ( value.Dodge Challenger = 47.2 ) .. | `--[dendrogram w/ 2 branches and 3 members at h = 2.14, midpoint = 0.75, value = 139] .. | |--leaf "Merc 450SLC" ( value.Merc 450SLC = 46.4 ) .. | `--[dendrogram w/ 2 branches and 2 members at h = 0.983, midpoint = 0.5, value = 92.9] .. | |--leaf "Merc 450SE" ( value.Merc 450SE = 46.4 ) .. | `--leaf "Merc 450SL" ( value.Merc 450SL = 46.5 ) .. `--[dendrogram w/ 2 branches and 16 members at h = 142, midpoint = 3.59, value = 409] .. |--[dendrogram w/ 2 branches and 4 members at h = 14.8, midpoint = 0.875, value = 74.9] .. | |--leaf "Honda Civic" ( value.Honda Civic = 17.7 ) .. | `--[dendrogram w/ 2 branches and 3 members at h = 10.4, midpoint = 0.75, value = 57.2] .. | |--leaf "Toyota Corolla" ( value.Toyota Corolla = 18.8 ) .. | `--[dendrogram w/ 2 branches and 2 members at h = 5.15, midpoint = 0.5, value = 38.4] .. | |--leaf "Fiat X1-9" ( value.Fiat X1-9 = 18.9 ) .. | `--leaf "Fiat 128" ( value.Fiat 128 = 19.4 ) .. `--[dendrogram w/ 2 branches and 12 members at h = 113, midpoint = 2.3, value = 334] .. |--leaf "Ferrari Dino" ( value.Ferrari Dino = 34.5 ) .. `--[dendrogram w/ 2 branches and 11 members at h = 74.4, midpoint = 3.61, value = 300] .. |--[dendrogram w/ 2 branches and 5 members at h = 64.9, midpoint = 1.25, value = 148] .. | |--leaf "Merc 240D" ( value.Merc 240D = 24.6 ) .. | `--[dendrogram w/ 2 branches and 4 members at h = 15.7, midpoint = 1.5, value = 124] .. | |--[dendrogram w/ 2 branches and 2 members at h = 0.615, midpoint = 0.5, value = 59.9] .. | | |--leaf "Mazda RX4" ( value.Mazda RX4 = 29.9 ) .. | | `--leaf "Mazda RX4 Wag" ( value.Mazda RX4 Wag = 30 ) .. | `--[dendrogram w/ 2 branches and 2 members at h = 1.52, midpoint = 0.5, value = 63.6] .. | |--leaf "Merc 280C" ( value.Merc 280C = 31.8 ) .. | `--leaf "Merc 280" ( value.Merc 280 = 31.9 ) .. `--[dendrogram w/ 2 branches and 6 members at h = 50.1, midpoint = 0.969, value = 152] .. |--leaf "Lotus Europa" ( value.Lotus Europa = 24.9 ) .. `--[dendrogram w/ 2 branches and 5 members at h = 33.2, midpoint = 0.938, value = 127] .. |--leaf "Merc 230" ( value.Merc 230 = 27.2 ) .. `--[dendrogram w/ 2 branches and 4 members at h = 20.7, midpoint = 0.875, value = 99.5] .. |--leaf "Volvo 142E" ( value.Volvo 142E = 26.3 ) .. `--[dendrogram w/ 2 branches and 3 members at h = 13.1, midpoint = 0.75, value = 73.3] .. |--leaf "Datsun 710" ( value.Datsun 710 = 23.6 ) .. `--[dendrogram w/ 2 branches and 2 members at h = 8.65, midpoint = 0.5, value = 49.7] .. |--leaf "Porsche 914-2" ( value.Porsche 914-2 = 24.8 ) .. `--leaf "Toyota Corona" ( value.Toyota Corona = 24.9 ) $ colDendrogram: ..--[dendrogram w/ 2 branches and 11 members at h = 1475, midpoint = 7, value = 436] .. |--[dendrogram w/ 2 branches and 9 members at h = 116, midpoint = 4.5, value = 58.3] .. | |--[dendrogram w/ 2 branches and 7 members at h = 34.8, midpoint = 1.5, value = 20.3] .. | | |--leaf "cyl" ( value.cyl = 6.19 ) .. | | `--[dendrogram w/ 2 branches and 6 members at h = 18.9, midpoint = 2, value = 14.2] .. | | |--[dendrogram w/ 2 branches and 2 members at h = 3.61, midpoint = 0.5, value = 0.844] .. | | | |--leaf "am" ( value.am = 0.406 ) .. | | | `--leaf "vs" ( value.vs = 0.438 ) .. | | `--[dendrogram w/ 2 branches and 4 members at h = 10.7, midpoint = 1.5, value = 13.3] .. | | |--[dendrogram w/ 2 branches and 2 members at h = 8.6, midpoint = 0.5, value = 6.03] .. | | | |--leaf "carb" ( value.carb = 2.81 ) .. | | | `--leaf "wt" ( value.wt = 3.22 ) .. | | `--[dendrogram w/ 2 branches and 2 members at h = 2.98, midpoint = 0.5, value = 7.28] .. | | |--leaf "drat" ( value.drat = 3.6 ) .. | | `--leaf "gear" ( value.gear = 3.69 ) .. | `--[dendrogram w/ 2 branches and 2 members at h = 33.3, midpoint = 0.5, value = 37.9] .. | |--leaf "qsec" ( value.qsec = 17.8 ) .. | `--leaf "mpg" ( value.mpg = 20.1 ) .. `--[dendrogram w/ 2 branches and 2 members at h = 657, midpoint = 0.5, value = 377] .. |--leaf "hp" ( value.hp = 147 ) .. `--leaf "disp" ( value.disp = 231 ) $ breaks : num [1:257] -3.21 -3.19 -3.16 -3.14 -3.11 ... $ col : chr [1:256] "#80FFFFFF" "#80FFFFFF" "#81FFFFFF" "#82FFFFFF" ... $ vline : num 0 $ colorTable :'data.frame': 256 obs. of 3 variables: ..$ low : num [1:256] -3.21 -3.19 -3.16 -3.14 -3.11 ... ..$ high : num [1:256] -3.19 -3.16 -3.14 -3.11 -3.09 ... ..$ color: Factor w/ 254 levels "#80FFFFFF","#81FFFFFF",..: 1 1 2 3 4 5 6 7 8 9 ... $ layout :List of 3 ..$ lmat: num [1:3, 1:3] 6 0 4 0 0 1 5 2 3 ..$ lhei: num [1:3] 1.5 0.2 4 ..$ lwid: num [1:3] 1.5 0.2 4 > ## IGNORE_RDIFF_END > > ## Test row and column separators > heatmap.2(x,dendrogram="col", colsep=1) ## one colsep > heatmap.2(x,dendrogram="col", rowsep=1) ## one rowsep > > heatmap.2(x,dendrogram="col", colsep=1:2) ## two colseps > heatmap.2(x,dendrogram="col", rowsep=1:2) ## two rowseps > > proc.time() user system elapsed 1.190 0.064 1.245 gplots/tests/test_plottingDeepDendrogram.R0000644000176200001440000000105613727100146020552 0ustar liggesuserssuppressMessages(library(gplots)) dat <- as.matrix(read.csv(file="dat.csv", row.names=1)) dist2 <- function(x) as.dist(1-cor(t(x), method="pearson")) hclust1 <- function(x) hclust(x, method = "single") distance <- dist2(dat) cluster <- hclust1(distance) dend <- as.dendrogram(cluster) ## R's default recursion limits will be exceeded when plotting this dendrogram try( gplots:::plot.dendrogram(dend) ) try( heatmap.2(dat, Rowv=dend) ) ## Increase them and try again options("expressions"=20000) gplots:::plot.dendrogram(dend) heatmap.2(dat, Rowv=dend) gplots/vignettes/0000755000176200001440000000000013760445300013574 5ustar liggesusersgplots/vignettes/venn.Rnw0000644000176200001440000000462213727100345015236 0ustar liggesusers\documentclass[a4paper]{article} %\VignetteIndexEntry{Venn Diagrams with gplots} \title{Venn Diagrams with \texttt{gplots}} \author{Steffen M{\"{o}}ller} \begin{document} \SweaveOpts{concordance=TRUE} \maketitle Venn diagrams\footnote{http://en.wikipedia.org/wiki/Venn\_diagram} allow for a quick overview on the number of elements that multiple sets share. And when those elements are representing traits of real objects, like observations in biomedical sciences/marketing/..., then this may direct researchers to further investigations/decisions. The {\tt gplots} package provides Venn diagrams for up to five sets. The R code to produce the diagrams is not complicated. The plot function behaves alwas the same, depending only on the number of overlapping circles to draw. Its input is a table that is produced by another function. The function {\tt venn()} calls one after the other and is the only one to be seen by the user. The values shown are returned invisibly. The {\tt venn()} function accepts either a list of sets as an argument, or it takes a binary matrix, one column per set, indicating for every element, one per row, the membership with every set. The common form with overlapping circles only works with up to three sets, as seen here: \begin{center} <>= suppressMessages(library(gplots)) venn( list(A=1:5,B=4:6,C=c(4,8:10)) ) @ \end{center} The names of columns or the list elements are the set names. To squeeze extra circles in, those circles need to become ellipses. This works for four sets \begin{center} <>= v.table<-venn( list(A=1:5,B=4:6,C=c(4,8:10),D=c(4:12)) ) print(v.table) @ \end{center} and maybe even more impressively also for five. \begin{center} <>= venn( list(A=1:5,B=4:6,C=c(4,8:10),D=c(4:12),E=c(2,4,6:9)) ) @ \end{center} The man page of {\it venn()} lists options to change the appearance of the plots, e.g., the names of the sets may be omitted and sizes changed. However, there is ample of opportunity to extend the functionality of this package. To mind come \begin{itemize} \item more dimensions (next) \item colors \item variation of size of circles with the number of members the set has \item density plot rather than numbers, identification of individual entries \end{itemize} The prime personal interest is more in the increase of dimensions. Please send patches for features you are most interested in. \end{document} gplots/NEWS0000644000176200001440000004173513760442241012276 0ustar liggesusersRelease 3.1.1 - 2020-11-28 -------------------------- Bug Fixes: - Fix "Error in plot.window(...) : need finite 'ylim' values" in "Running examples in 'gplots-Ex.R' failed" Release 3.1.0 - 2020-09-18 -------------------------- Major change: - Removed gdata from imports by bringing into the package the functions nobs and reorder.factor. - Removed the gdata package from "imports" since it is currently broken and is scheduled to archive in 2020-09-25 (leading to gplots to be archived as well, unless this is resolved). By removing this connection, gplots will be able to remain safely on CRAN. In prectice, I've moved reorder.factor and nobs into this package, as well as removed the use of 'nobs' from some examples. - Added the reorder.factor and nobs function (from gdata) Release 3.0.4 - 2020-07-05 -------------------------- Bug Fixes: - Fix "no visible global function definition for '%||%'": The package imports .memberDend and .midDend from stats in an unsafe way (i.e. using :::). I've moved to manually copy-pasting the functions into the package in order to keep it a bit safer. It has the downside of not using whartever improvements/bugfixes are intrudced to these functions moving forward. But for the time being, it's a reasonable solution. Release 3.0.3 - 2020-02-26 -------------------------- Misc - Tal Galili took over to make sure the package stays on CRAN. - Moved to knitr Release 3.0.1 - 2016-03-30 -------------------------- Bug Fixes: - An error in plotLowess() prevented it from finding objects in the caller's environment. - The manual page for heatmap.2() stated the incorrect type for the 'layout' element of the return list. It is a named list, not a named numeric vector. Release 3.0.0 - 2016-03-28 --------------------------- New Features: - venn(): - now support matrices of indicator values. Previously indicator values were only supported when supplied as a dataframe. - The 'intersections' attribute returned from venn() has been improved so that goups are labeled using set names instead of indicators, and are ordered from simplest to most complex set intersection. - New angleAxis() function to create axis labels with rotated text. - heatmap.2(): - heatmap.2() can now be used to plot subsets of a previous heatmap. - Decrease the granularity of the carpet in heatmap.2()'s color key to avoid visual artifacts. - Returned object now includes 'layout' element that contains layout information. (Patch provided by Jenny Drnevich.) - lowess(): - New function plotLowess() to display a scatter plot with a superimposed lowess curve. - The lowess() functions now returns a list object of class 'lowess' - A new lowess method for plot() method for 'lowess' objects that generates a scatterplot of the raw data with a lowess curve superimposed. Bug Fixes: - Defunct message for boxplot.n() was recommending the wrong function. - heatmap.2(): - Remove debugging print() statement. - Now properly sets 'srtCol' default if missing and 'colCol' is specified. - Corrected a bug causing "Error in plot.new() : figure margins too large" to occur when 'key=FALSE'. (Reported and patch provided by Sveinung Gundersen.) - Corrected a bug causing an error when "Rowv=FALSE" or "Colv=FALSE". - Corrected message when "Rowv=FALSE" or "Colv=FALSE" and the the "dendrogram" argument requested the corresponding dendrogram. - venn(): - Fix warning message that was missing spaces between words. Other Changes: - The smartlegend(), plot.lm2(), and boxplot.n() functions are now defunct. Please use grephics::legend(), lmplot2() or boxplot2() respectively. Release 2.17.0 - 2015-05-01 --------------------------- New Features: - heatmap.2() has two new arguments, 'colRow' and 'colCol' to control the color of row and column text labels. See the man page for examples. - heatmap.2() has been modified to make it easier to extract and plot subclusters from a large heatmap. Simply pass the dendrogram of the subcluster together with the full data matrix and, optionally, the breaks of the full heatmap in order to obtain the same color scaling. (Suggestion and patch contributed by Ilia Kats.) - venn() now returns a list of the members of each set intersection in the attribute 'intersections'. This can be disabled using the argument 'intersection=FALSE' (Patch by Steffen Möller.) Bug Fixes: - In heatmap.2(), the color key now properly handles color breaks that are not equally spaced. (Issue reported by Tim Richter-Heitmann.) - In heatmap.2(), row/column traces in could be plotted on the wrong row/column. - plotCI() now properly respects the 'type=' argument. (Bug report and correction by Wiktor Żelazny.) - Remove stray browser() call from overplot() - In the balloonplot() examples, explicitly specify the 'neworder' argument to gplots:::reorder.factor to prevent errors. Other Changes: - smartlegend() is now deprecated because the relative positioning feature ('top', 'right') has been added to graphics::legend(). Calling smartlegend() will generate a warning. - boxplot.n() and plot.lm2() are defunct have been removed. Use of these functions will now generate an error. - Update out-of-date URLs in man pages. Release 2.16.0 - 2015-01-02 --------------------------- New Features: - plotmeans() has a new argument, 'text.n.label' which specifies the text used for labeling the number of elements in a group. Bug Fixes: - plotmeans() now respects (optional) graphical arguments captured in '...' when drawing the x axis. Release 2.15.0 - 2014-12-01 --------------------------- New features: - Convert bandplot() to S3-method dispatch and add method for class formula, so that 'bandplot( y ~ x, data=dataframe )' now works as expected. Other changes: - heatmap.2() now uses a local *non-byte-compiled* copy of plot.dengrogram, because the byte-compiled stats:::plot.dendrogram uses a recursive algorithm that generates a 'node stack overflow' error for deeply nested dendrograms and the node stack size cannot be changed at execution time. Instead, tne local non-byte-compiled gplots:::plot.dendrogram will trigger a recursion limit for such dengrograms. heatmap.2() will detect this error and recommend that the user increase the recursion limit (via, e.g. 'options("expressions"=20000)' ) and rerun. Release 2.14.2 - 2014-09-17 --------------------------- Bug Fixes: - heatmap.2() was not respecting key.title=NA when density.info="none". - Correct the man page for heatmap.2 to state that the default color for 'notecol' is cyan. - In heatmap.2(), modify default arguments to 'symbreaks' and 'symkey' to make the logic more evident by replacing min(...) with any(...). (The previous code executed properly, but relied on implicit coercion of logicals to numeric, obscuring the intent.) - Calling heatmap.2 with deeply nested dendrograms could trigger a 'node stack overflow' error. Now, this situation is deteceted, and a message is generated indicating how to increase the relevant recursion limit via options("expressions"=...). Release 2.14.1 - 2014-06-30 --------------------------- Bug Fixes: - Correct heatmap.2() bug in Colv dendrogram object dimension checking introduced in 2.14.0. (Reported by Yong Fuga Li.) Release 2.14.0 - 2014-06-18 --------------------------- Bug Fixes: - heatmap.2(): Fix typo in heatmap.2() that caused an error when 'Rowv=FALSE'. (Reported by Yuanhua Liu.) Enhancements: - heatmap.2(): Add new 'reorderfun' argument to allow the user to specify an alternative function to reorder rows/columns based on row/column dendrogram. (Suggested by Yuanhua Liu.) - heatmap.2(): Center margin labels. - heatmap.2(): Check size of user-provided Rowv and Colv dendrogram objects to ensure they match the dimensions of the data. - Add references to man page for hist2d() and ci2d() to the new r2d2 package which implements an improved algorithm for 2-dimensional emprical confidence regions. Release 2.13.0 - 2014-04-04 --------------------------- Bug Fixes: - heatmap.2 was not properly handling row trace reference line ('hline'). Patch submitted by Ilia Kats. Enhancements: - In heatmap.2, when the row or column trace is enabled, show the corresponding reference line in the color key. - In heatmap.2, a new 'extrafun' argument is provided that allows the user to specify a function to be called before the function returns. This allows the user to add additional plots to the page. Release 2.12.1 - 2013-10-14 --------------------------- API Changes: - boxplot.n() has been renamed to boxplot2() to avoid potential S3 method calling issues. - plot.lm2() has been rename to lmplot2() to avoid potential S3 method calling issues. Enhancements: - Add heatmap.2() parameters to control row and column label rotation ('srtRow', 'srtCol'), justification ('adjRow', 'adjCol'), and space from plot edge ('offsetRow', 'offsetCol'). Bug Fixes: - Fix error in in venn() when all groups contained the same number of TRUE cases. - Correct error in overplot() when that occured when a group-category contained no finite values. Other Changes: - Changes to overplot() to avoid warnings from upcoming enhancements to R CMD check. - Move several packages from Depends to Imports or Suggests. - Packages caTools and KernSmooth now have namespaces, so import needed functions in NAMESPACE. - Mark one example in manual page for ci2d 'dontrun' to avoid timing warning in R CMD check. Release 2.11.3 - 2013-06-27 --------------------------- Enhancements: - Modify sinkplot() to use a local environment rather than the global environment, to conform to CRAN policies. Bug Fixes: - Fixed typo/spelling error in plotmeans() man page. Release 2.11.2 - 2013-03-24 --------------------------- Enhancements: - Add ci.width argument to barplot2() to allow varying the length of the 't' at the end of confidence interval bars. Bug Fixes: - Fix error in heatmap.2 when colsep argument had length 1. Updates: - Update manual page for lowess.default() to match changed argument list for lowess() in R 3.0.0 Release 2.11.1 - 2012-12-14 --------------------------- Bug Fixes: - Replace corrupted BalloonPlot.pdf in inst/doc. Release 2.11.0 - 2012-06-08 --------------------------- New Features: - Objects returned by hist2d() have been changed: 1) $x and $y now contain the n midpoints of the bins in each direction 2) $x.breaks, $y.breaks now contain the n+1 limits of the bins in each direction. - Add lwd argument to plotmeans(). Bug Fixes: - Correct error in handling binning in hist2d(): (N+1)x(N+1) bins were being created instead of NxN bins, and the highest row/column in each direction was being omitted from the results and plot. - Changes to fix R CMD check warnings Release 2.10.1 - 2011-09-02 --------------------------- New features: - Make results of hist2d() and ci2d() into objects, and add print() methods to display them. Release 2.10.0 - 2011-08-26 --------------------------- New Features: - New ci2d() function to create 2-dimensional empirical confidence intervals utilizing KernSmooth:bkde2D and gplots::hist2d(). See ?ci2d for details. - Add 'alpha' argument to rich.colors() to control transparency. Improvements: - Accellerate hist2d by replacing for() loop with tapply(), and allow user to specify summary function applied (per suggestion by Peter Hagedorn). Bug Fixes: - Correct error in heatmap.2() that arises when data includes NA values (identified by Melissa Key). Release 2.8.0 - 2010-06-10 -------------------------- Improvements: - venn() now returns an object of class venn() and a plot method for this class is provided. - Manual page for venn has been improved, based on contributions by Steffen Moeller Release 2.7.5 - ?? -------------------------- Improvements: - Performance of 'hist2d' improved thanks to a suggestion from Joerg van den Hoff. Release 2.7.4 - 2009-11-12 -------------------------- Bug Fixes: - Correct bug reported by Alan Yong: plotmeans() failed when bars=FALSE. Release 2.7.3 - 2009-10-22 -------------------------- Bug Fixes: - Correct bug reported by Rudolf Talens: heatmap.2() incorrectly transposed the displayed matrix when the option symm=TRUE. Release 2.7.2 - 2009-05-08 -------------------------- Bug Fixes: - Correct bug reported by Ken Lo: cox2hex() had blue and green components swapped. Release 2.7.1 - 2009-05-08 -------------------------- New Features: - Enhancements to heatmap.2() - New arguments 'lmat', 'lhei', and 'lwid' that allow controlling component plot layout. Users can now resize and rearrange plot components. - heatmap.2() will now compute color breakpoints that are symmetric about 0 when the new 'symbreak' parameter is TRUE. This parameter, as well as the symkey parameter now default to TRUE whenever negative values of x are present, and to FALSE othewise. - the heatmap.2() return value now includes additional useful information, including: call, rowMeans, rowSDs, colMeans, colSDs, carpet (reordered and scaled 'x' values), rowDendrogram, colDendrogram, breaks, col, vline, hline, and colorTable. Of these, the most useful are breaks, col, and colorTable. The latter is a three-column data frame providing the lower and upper bound and color for each bin. See the manual page for complete details and examples. - New function venn(), contributed by Steffen Moeller (Thanks Steffen!) to generate Venn diagrams for up to 5 sets. See ?venn for details. - Performance of bandplot() has been dramatically improved, in part by using runsd() and runmean() from the caTools package. As a consequence, gplots now depends on the caTools package. - Improved performance of gplots::plot.lm for large lm objects by using the new bandplot() and by using fitted() instead of predict() to obtain y-hat. - Add 'scale.range' argument to balloonplot(), option to scale balloons so [min,max]->[0,1] ('relative') or [0,max] -> [0,1] ('absolute'). Bug Fixes: - balloonplot() now properly handles dimension labels provided by 'xlab' and 'ylab' - plotCI now properly handles 'NULL' and 'NA' values for ui, li, uiw, and liw. - Corrections of minor typos in man pages - Update Greg's email address to 'greg@random-technologies-llc.com' Release 2.6.0 - 2008-04-07 -------------------------- New Features: - heatmap() now allows control of the location of individual plot components (e.g. color key) Bug Fixes: - Fix bug in handling rowsep, per suggestion by Steven Paugh - Fix examples for overplot() - Two letter clarification of help text for heatmap.2() - Restore plot layout settings to default state at end of ooplot() example - Various typo fixes Release 2.5.0 - 2007-11-02 -------------------------- New Features: - textplot() now converts tab characters to spaces before processing to avoid problems with computing height and width of text that includes tabs. - Add col2hex() function to convert color names to rgb hex codes Bug Fixes: - Correct balloonplot.default to properly show specified x and y axis labels when explicitly provided - R/balloonplot.R: Correct error in balloonplot when z contains NA values. - Fix typos and code/doc mismatches identified by the latest R CMD check Other: - Clarify GPL version Release 2.4.0 - 2007-02-08 -------------------------- New Features: - Add parameters to bandplot() to control line width and type. - Add paramaeters to textplot.matrix() to allow specification of the color of the matrix data, rows, and column Bug Fixes: Other: Release 2.3.2 - 2006-11-14 -------------------------- - heatmap.2.Rd: Fix example that was broken by changes in 2.3.0. Release 2.3.1 ------------- - Changed maintainer back to Greg Warnes - Updated Greg's email address - heatmap.2.R: Fixed a bug which displayed warnings when Rowv and Colv were specified as dendrograms Release 2.3.0 ------------- - heatmap.2.R, heatmap.2.Rd: Updated the code and man page to make sure the Rowv and Colv values are properly handled - Added the tests directory Release 2.2.0 ------------- - plotmeans.R: Fixed bug in plotmeans - based on Stefano Calza's suggestion (the function didn't account for factors unused levels, returning an error.) - exported plot.lm to NAMESPACE, Remove .Alias calls in plot.lm.R since .Alias is defunct. - barplot2.R: Changed the default grey colors to heat colors, if height is matrix - Updated Greg's email address - balloonplot.R: Recent changes to align row totals with the overall total broke how the marginal cumulative fractions were displayed. Added example using Titanic data that exercises the multi-factor display. Added -.tex, .pdf files and figuers, and RNEWS article in inst/doc - colorpanel.R: colorpanel now allows only 2 colors to be specified if no 'middle' color is desired. Release 2.0.8 ------------- - Added DESCRIPTION and removed DESCRIPTION.in - Updated barplot2 - Updated heatmap.2 gplots/R/0000755000176200001440000000000013727071153011771 5ustar liggesusersgplots/R/col2hex.R0000644000176200001440000000025112471456250013456 0ustar liggesuserscol2hex <- function(cname) { colMat <- col2rgb(cname) rgb( red=colMat[1,]/255, green=colMat[2,]/255, blue=colMat[3,]/255 ) } gplots/R/plotmeans.R0000644000176200001440000000764512471456250014132 0ustar liggesusers## $Id: plotmeans.R 1912 2015-01-02 20:10:21Z warnes $ plotmeans <- function (formula, data = NULL, subset, na.action, bars=TRUE, p=0.95, minsd=0, minbar=NULL, maxbar=NULL, xlab=names(mf)[2], ylab=names(mf)[1], mean.labels=FALSE, ci.label=FALSE, n.label=TRUE, text.n.label="n=", digits=getOption("digits"), col="black", barwidth=1, barcol="blue", connect=TRUE, ccol=col, legends=names(means), xaxt, use.t = TRUE, lwd=par("lwd"), ...) { if (invalid(formula) || (length(formula) != 3)) stop("formula missing or incorrect") if (invalid(na.action)) na.action <- options("na.action") mf <- match.call(expand.dots = FALSE) if (is.matrix(eval(mf$data, parent.frame()))) mf$data <- as.data.frame(data) m <- match(c("formula", "data", "subset", "na.action"), names(mf), 0L) mf <- mf[c(1L, m)] mf[[1L]] <- quote(stats::model.frame) mf <- eval(mf, parent.frame()) response <- attr(attr(mf, "terms"), "response") ## drop unused levels in factors!!! wFact <- which(attr(attr(mf, "terms"),"dataClasses") == "factor") for(i in wFact) mf[,i] <- factor(mf[,i]) means <- sapply(split(mf[[response]], mf[[-response]]), mean, na.rm=TRUE) ns <- sapply(sapply(split(mf[[response]], mf[[-response]]), na.omit, simplify=FALSE), length ) xlim <- c(0.5, length(means)+0.5) if(!bars) { plot( means, ..., col=col, xlim=xlim) } else { myvar <- function(x) var(x[!is.na(x)]) vars <- sapply(split(mf[[response]], mf[[-response]]), myvar) ## apply minimum variance specified by minsd^2 vars <- ifelse( vars < (minsd^2), (minsd^2), vars) if(use.t) ci.width <- qt( (1+p)/2, ns-1 ) * sqrt(vars/ns) else ci.width <- qnorm( (1+p)/2 ) * sqrt(vars/ns) if(length(mean.labels)==1) { if (mean.labels==TRUE) mean.labels <- format( round(means, digits=digits )) else if (mean.labels==FALSE) mean.labels <- NULL } plotCI(x=1:length(means), y=means, uiw=ci.width, xaxt="n", xlab=xlab, ylab=ylab, labels=mean.labels, col=col, xlim=xlim, lwd=barwidth, barcol=barcol, minbar=minbar, maxbar=maxbar, ... ) if(invalid(xaxt) || xaxt!="n") axis(1, at = 1:length(means), labels = legends, ...) if(ci.label) { ci.lower <- means-ci.width ci.upper <- means+ci.width if(!invalid(minbar)) ci.lower <- ifelse(ci.lower < minbar, minbar, ci.lower) if(!invalid(maxbar)) ci.upper <- ifelse(ci.upper > maxbar, maxbar, ci.upper) labels.lower <- paste( " \n", format(round(ci.lower, digits=digits)), sep="") labels.upper <- paste( format(round(ci.upper, digits=digits)), "\n ", sep="") text(x=1:length(means),y=ci.lower, labels=labels.lower, col=col) text(x=1:length(means),y=ci.upper, labels=labels.upper, col=col) } } if(n.label) { text(x=1:length(means), y=par("usr")[3], labels=paste(text.n.label, ns, "\n", sep="") ) } if(!invalid(connect) & !identical(connect,FALSE)) { if(is.list(connect)) { if(length(ccol)==1) ccol <- rep(ccol, length(connect) ) for(which in 1:length(connect)) lines(x=connect[[which]],y=means[connect[[which]]],col=ccol[which]) } else lines(means, ..., lwd=lwd, col=ccol) } } gplots/R/hist2d.R0000644000176200001440000000374712471456250013324 0ustar liggesusers# $Id: hist2d.R 1555 2012-06-07 16:08:18Z warnes $ hist2d <- function(x, y=NULL, nbins=200, same.scale=FALSE, na.rm=TRUE, show=TRUE, col=c("black", heat.colors(12)), FUN=base::length, xlab, ylab, ... ) { if(is.null(y)) { if(ncol(x) != 2) stop("If y is ommitted, x must be a 2 column matirx") y <- x[,2] x <- x[,1] } if(length(nbins)==1) nbins <- rep(nbins,2) nas <- is.na(x) | is.na(y) if(na.rm) { x <- x[!nas] y <- y[!nas] } else stop("missinig values not permitted if na.rm=FALSE") if(same.scale) { x.cuts <- seq( from=min(x,y), to=max(x,y), length=nbins[1]+1) y.cuts <- seq( from=min(x,y), to=max(x,y), length=nbins[2]+1) } else { x.cuts <- seq( from=min(x), to=max(x), length=nbins[1]+1) y.cuts <- seq( from=min(y), to=max(y), length=nbins[2]+1) } index.x <- cut( x, x.cuts, include.lowest=TRUE) index.y <- cut( y, y.cuts, include.lowest=TRUE) ## tapply is faster than old for() loop, and allows ## use of any user-specified summary function m <- tapply(x,list(index.x,index.y),FUN) ## If we're using length, set empty cells to 0 instead of NA if(identical(FUN,base::length)) m[is.na(m)] <- 0 if(missing(xlab)) xlab <- deparse(substitute(xlab)) if(missing(ylab)) ylab <- deparse(substitute(ylab)) if(show) image( x.cuts, y.cuts, m, col=col, xlab=xlab, ylab=ylab, ...) midpoints <- function(x) (x[-1]+x[-length(x)])/2 retval <- list() retval$counts <- m retval$x.breaks = x.cuts retval$y.breaks = y.cuts retval$x = midpoints(x.cuts) retval$y = midpoints(y.cuts) retval$nobs = length(x) retval$call <- match.call() class(retval) <- "hist2d" retval } gplots/R/heatmap.2.R0000644000176200001440000005560713700407715013706 0ustar liggesusers## $Id: heatmap.2.R 2103 2016-03-25 17:11:26Z warnes $ heatmap.2 <- function (x, ## dendrogram control Rowv = TRUE, Colv=if(symm)"Rowv" else TRUE, distfun = dist, hclustfun = hclust, dendrogram = c("both","row","column","none"), reorderfun = function(d, w) reorder(d, w), symm = FALSE, ## data scaling scale = c("none","row", "column"), na.rm=TRUE, ## image plot revC = identical(Colv, "Rowv"), add.expr, ## mapping data to colors breaks, symbreaks=any(x < 0, na.rm=TRUE) || scale!="none", ## colors col="heat.colors", ## block sepration colsep, rowsep, sepcolor="white", sepwidth=c(0.05,0.05), ## cell labeling cellnote, notecex=1.0, notecol="cyan", na.color=par("bg"), ## level trace trace=c("column","row","both","none"), tracecol="cyan", hline=median(breaks), vline=median(breaks), linecol=tracecol, ## Row/Column Labeling margins = c(5, 5), ColSideColors, RowSideColors, cexRow = 0.2 + 1/log10(nr), cexCol = 0.2 + 1/log10(nc), labRow = NULL, labCol = NULL, srtRow = NULL, srtCol = NULL, adjRow = c(0,NA), adjCol = c(NA,0), offsetRow = 0.5, offsetCol = 0.5, colRow = NULL, colCol = NULL, ## color key + density info key = TRUE, keysize = 1.5, density.info=c("histogram","density","none"), denscol=tracecol, symkey = any(x < 0, na.rm=TRUE) || symbreaks, densadj = 0.25, key.title = NULL, key.xlab = NULL, key.ylab = NULL, key.xtickfun = NULL, key.ytickfun = NULL, key.par=list(), ## plot labels main = NULL, xlab = NULL, ylab = NULL, ## plot layout lmat = NULL, lhei = NULL, lwid = NULL, ## extras extrafun=NULL, ... ) { scale01 <- function(x, low=min(x), high=max(x) ) { x <- (x-low)/(high - low) x } retval <- list() scale <- if(symm && missing(scale)) "none" else match.arg(scale) dendrogram <- match.arg(dendrogram) trace <- match.arg(trace) density.info <- match.arg(density.info) if(length(col)==1 && is.character(col) ) col <- get(col, mode="function") if(!missing(breaks) && any(duplicated(breaks)) ) stop("breaks may not contain duplicate values") if(!missing(breaks) && (scale!="none")) warning("Using scale=\"row\" or scale=\"column\" when breaks are", "specified can produce unpredictable results.", "Please consider using only one or the other.") if ( is.null(Rowv) || any(is.na(Rowv)) ) Rowv <- FALSE if ( is.null(Colv) || any(is.na(Colv)) ) Colv <- FALSE else if( all(Colv=="Rowv") ) Colv <- Rowv if(length(di <- dim(x)) != 2 || !is.numeric(x)) stop("`x' must be a numeric matrix") nr <- di[1] nc <- di[2] if(nr <= 1 || nc <= 1) stop("`x' must have at least 2 rows and 2 columns") if(!is.numeric(margins) || length(margins) != 2) stop("`margins' must be a numeric vector of length 2") if(missing(cellnote)) cellnote <- matrix("", ncol=ncol(x), nrow=nrow(x)) if(!inherits(Rowv, "dendrogram")) { ## Check if Rowv and dendrogram arguments are consistent if ( ( ( is.logical(Rowv) && !isTRUE(Rowv) ) || ( is.null(Rowv) ) ) && ( dendrogram %in% c("both","row") ) ) { warning("Discrepancy: Rowv is FALSE, while dendrogram is `", dendrogram, "'. Omitting row dendogram.") if (dendrogram=="both") dendrogram <- "column" else dendrogram <- "none" } } if(!inherits(Colv, "dendrogram")) { ## Check if Colv and dendrogram arguments are consistent if ( ( (is.logical(Colv) && !isTRUE(Colv) ) || (is.null(Colv)) ) && ( dendrogram %in% c("both","column")) ) { warning("Discrepancy: Colv is FALSE, while dendrogram is `", dendrogram, "'. Omitting column dendogram.") if (dendrogram=="both") dendrogram <- "row" else dendrogram <- "none" } } ## by default order by row/col mean ## if(is.null(Rowv)) Rowv <- rowMeans(x, na.rm = na.rm) ## if(is.null(Colv)) Colv <- colMeans(x, na.rm = na.rm) ## get the dendrograms and reordering indices ## if( dendrogram %in% c("both","row") ) ## { ## dendrogram option is used *only* for display purposes if(inherits(Rowv, "dendrogram")) { ddr <- Rowv ## use Rowv 'as-is', when it is dendrogram rowInd <- order.dendrogram(ddr) if(length(rowInd)>nr || any(rowInd<1 | rowInd > nr )) stop("Rowv dendrogram doesn't match size of x") if (length(rowInd) < nr) nr <- length(rowInd) } else if (is.integer(Rowv)) { ## Compute dendrogram and do reordering based on given vector distr <- distfun(x) hcr <- hclustfun(distr) ddr <- as.dendrogram(hcr) ddr <- reorderfun(ddr, Rowv) rowInd <- order.dendrogram(ddr) if(nr != length(rowInd)) stop("row dendrogram ordering gave index of wrong length") } else if (isTRUE(Rowv)) { ## If TRUE, compute dendrogram and do reordering based on rowMeans Rowv <- rowMeans(x, na.rm = na.rm) distr <- distfun(x) hcr <- hclustfun(distr) ddr <- as.dendrogram(hcr) ddr <- reorderfun(ddr, Rowv) rowInd <- order.dendrogram(ddr) if(nr != length(rowInd)) stop("row dendrogram ordering gave index of wrong length") } else if(!isTRUE(Rowv)) { rowInd <- nr:1 ddr <- as.dendrogram(hclust(dist(diag(nr)))) } else { rowInd <- nr:1 ddr <- as.dendrogram(Rowv) } if(inherits(Colv, "dendrogram")) { ddc <- Colv ## use Colv 'as-is', when it is dendrogram colInd <- order.dendrogram(ddc) if(length(colInd)>nc || any(colInd<1 | colInd > nc )) stop("Colv dendrogram doesn't match size of x") if (length(colInd) < nc) nc <- length(colInd) } else if(identical(Colv, "Rowv")) { if(nr != nc) stop('Colv = "Rowv" but nrow(x) != ncol(x)') if(exists("ddr")) { ddc <- ddr colInd <- order.dendrogram(ddc) } else colInd <- rowInd } else if(is.integer(Colv)) {## Compute dendrogram and do reordering based on given vector distc <- distfun(if(symm)x else t(x)) hcc <- hclustfun(distc) ddc <- as.dendrogram(hcc) ddc <- reorderfun(ddc, Colv) colInd <- order.dendrogram(ddc) if(nc != length(colInd)) stop("column dendrogram ordering gave index of wrong length") } else if (isTRUE(Colv)) {## If TRUE, compute dendrogram and do reordering based on rowMeans Colv <- colMeans(x, na.rm = na.rm) distc <- distfun(if(symm)x else t(x)) hcc <- hclustfun(distc) ddc <- as.dendrogram(hcc) ddc <- reorderfun(ddc, Colv) colInd <- order.dendrogram(ddc) if(nc != length(colInd)) stop("column dendrogram ordering gave index of wrong length") } else if(!isTRUE(Colv)) { colInd <- 1:nc ddc <- as.dendrogram(hclust(dist(diag(nc)))) } else { colInd <- 1:nc ddc <- as.dendrogram(Colv) } retval$rowInd <- rowInd retval$colInd <- colInd retval$call <- match.call() ## reorder x & cellnote x <- x[rowInd, colInd] x.unscaled <- x cellnote <- cellnote[rowInd, colInd] if(is.null(labRow)) labRow <- if(is.null(rownames(x))) (1:nr)[rowInd] else rownames(x) else labRow <- labRow[rowInd] if(is.null(labCol)) labCol <- if(is.null(colnames(x))) (1:nc)[colInd] else colnames(x) else labCol <- labCol[colInd] if(!is.null(colRow)) colRow <- colRow[rowInd] if(!is.null(colCol)) colCol <- colCol[colInd] if(scale == "row") { retval$rowMeans <- rm <- rowMeans(x, na.rm = na.rm) x <- sweep(x, 1, rm) retval$rowSDs <- sx <- apply(x, 1, sd, na.rm = na.rm) x <- sweep(x, 1, sx, "/") } else if(scale == "column") { retval$colMeans <- rm <- colMeans(x, na.rm = na.rm) x <- sweep(x, 2, rm) retval$colSDs <- sx <- apply(x, 2, sd, na.rm = na.rm) x <- sweep(x, 2, sx, "/") } ## Set up breaks and force values outside the range into the endmost bins if(missing(breaks) || is.null(breaks) || length(breaks)<1 ) { if( missing(col) || is.function(col) ) breaks <- 16 else breaks <- length(col)+1 } if(length(breaks)==1) { if(!symbreaks) breaks <- seq( min(x, na.rm=na.rm), max(x,na.rm=na.rm), length=breaks) else { extreme <- max(abs(x), na.rm=TRUE) breaks <- seq( -extreme, extreme, length=breaks ) } } nbr <- length(breaks) ncol <- length(breaks)-1 if(class(col)=="function") col <- col(ncol) min.breaks <- min(breaks) max.breaks <- max(breaks) x[xmax.breaks] <- max.breaks ## Calculate the plot layout if( missing(lhei) || is.null(lhei) ) lhei <- c(keysize, 4) if( missing(lwid) || is.null(lwid) ) lwid <- c(keysize, 4) if( missing(lmat) || is.null(lmat) ) { lmat <- rbind(4:3, 2:1) if(!missing(ColSideColors)) { ## add middle row to layout if(!is.character(ColSideColors) || length(ColSideColors) != nc) stop("'ColSideColors' must be a character vector of length ncol(x)") lmat <- rbind(lmat[1,]+1, c(NA,1), lmat[2,]+1) lhei <- c(lhei[1], 0.2, lhei[2]) } if(!missing(RowSideColors)) { ## add middle column to layout if(!is.character(RowSideColors) || length(RowSideColors) != nr) stop("'RowSideColors' must be a character vector of length nrow(x)") lmat <- cbind(lmat[,1]+1, c(rep(NA, nrow(lmat)-1), 1), lmat[,2]+1) lwid <- c(lwid[1], 0.2, lwid[2]) } lmat[is.na(lmat)] <- 0 } if(length(lhei) != nrow(lmat)) stop("lhei must have length = nrow(lmat) = ", nrow(lmat)) if(length(lwid) != ncol(lmat)) stop("lwid must have length = ncol(lmat) =", ncol(lmat)) ## Graphics `output' ----------------------- op <- par(no.readonly = TRUE) on.exit(par(op)) layout(lmat, widths = lwid, heights = lhei, respect = FALSE) plot.index <- 1 ## draw the side bars if(!missing(RowSideColors)) { par(mar = c(margins[1],0, 0,0.5)) image(rbind(1:nr), col = RowSideColors[rowInd], axes = FALSE) plot.index <- plot.index + 1 } if(!missing(ColSideColors)) { par(mar = c(0.5,0, 0,margins[2])) image(cbind(1:nc), col = ColSideColors[colInd], axes = FALSE) plot.index <- plot.index + 1 } ## draw the main carpet par(mar = c(margins[1], 0, 0, margins[2])) #if(scale != "none" || !symm) # { x <- t(x) cellnote <- t(cellnote) # } if(revC) { ## x columns reversed iy <- nr:1 if(exists("ddr")) ddr <- rev(ddr) x <- x[,iy] cellnote <- cellnote[,iy] } else iy <- 1:nr ## display the main carpet image(1:nc, 1:nr, x, xlim = 0.5+ c(0, nc), ylim = 0.5+ c(0, nr), axes = FALSE, xlab = "", ylab = "", col=col, breaks=breaks, ...) retval$carpet <- x if(exists("ddr")) retval$rowDendrogram <- ddr if(exists("ddc")) retval$colDendrogram <- ddc retval$breaks <- breaks retval$col <- col ## fill 'na' positions with na.color if(!invalid(na.color) & any(is.na(x))) { mmat <- ifelse(is.na(x), 1, NA) image(1:nc, 1:nr, mmat, axes = FALSE, xlab = "", ylab = "", col=na.color, add=TRUE) } ## add column labels if(is.null(srtCol) && is.null(colCol)) axis(1, 1:nc, labels= labCol, las= 2, line= -0.5 + offsetCol, tick= 0, cex.axis= cexCol, hadj=adjCol[1], padj=adjCol[2] ) else { if(is.null(srtCol) || is.numeric(srtCol)) { if(missing(adjCol) || is.null(adjCol)) adjCol=c(1,NA) if(is.null(srtCol)) srtCol <- 90 xpd.orig <- par("xpd") par(xpd=NA) xpos <- axis(1, 1:nc, labels=rep("", nc), las=2, tick=0) text(x=xpos, y=par("usr")[3] - (1.0 + offsetCol) * strheight("M"), labels=labCol, ##pos=1, adj=adjCol, cex=cexCol, srt=srtCol, col=colCol ) par(xpd=xpd.orig) } else warning("Invalid value for srtCol ignored.") } ## add row labels if(is.null(srtRow) && is.null(colRow)) { axis(4, iy, labels=labRow, las=2, line=-0.5+offsetRow, tick=0, cex.axis=cexRow, hadj=adjRow[1], padj=adjRow[2] ) } else { if(is.null(srtRow) || is.numeric(srtRow)) { xpd.orig <- par("xpd") par(xpd=NA) ypos <- axis(4, iy, labels=rep("", nr), las=2, line= -0.5, tick=0) text(x=par("usr")[2] + (1.0 + offsetRow) * strwidth("M"), y=ypos, labels=labRow, adj=adjRow, cex=cexRow, srt=srtRow, col=colRow ) par(xpd=xpd.orig) } else warning("Invalid value for srtRow ignored.") } ## add row and column headings (xlab, ylab) if(!is.null(xlab)) mtext(xlab, side = 1, line = margins[1] - 1.25) if(!is.null(ylab)) mtext(ylab, side = 4, line = margins[2] - 1.25) ## perform user-specified function if (!missing(add.expr)) eval(substitute(add.expr)) ## add 'background' colored spaces to visually separate sections if(!missing(colsep)) for(csep in colsep) rect(xleft =csep+0.5, ybottom=0, xright=csep+0.5+sepwidth[1], ytop=ncol(x)+1, lty=1, lwd=1, col=sepcolor, border=sepcolor) if(!missing(rowsep)) for(rsep in rowsep) rect(xleft =0, ybottom= (ncol(x)+1-rsep)-0.5, xright=nrow(x)+1, ytop = (ncol(x)+1-rsep)-0.5 - sepwidth[2], lty=1, lwd=1, col=sepcolor, border=sepcolor) ## show traces min.scale <- min(breaks) max.scale <- max(breaks) x.scaled <- scale01(t(x), min.scale, max.scale) if(trace %in% c("both","column") ) { retval$vline <- vline vline.vals <- scale01(vline, min.scale, max.scale) for( i in 1:length(colInd) ) { if(!is.null(vline)) { abline(v=i-0.5 + vline.vals, col=linecol, lty=2) } xv <- rep(i, nrow(x.scaled)) + x.scaled[,i] - 0.5 xv <- c(xv[1], xv) yv <- 1:length(xv)-0.5 lines(x=xv, y=yv, lwd=1, col=tracecol, type="s") } } if(trace %in% c("both","row") ) { retval$hline <- hline hline.vals <- scale01(hline, min.scale, max.scale) for( i in 1:length(rowInd) ) { if(!is.null(hline)) { abline(h=i - 0.5 + hline.vals, col=linecol, lty=2) } yv <- rep(i, ncol(x.scaled)) + x.scaled[i,] - 0.5 yv <- rev(c(yv[1], yv)) xv <- length(yv):1-0.5 lines(x=xv, y=yv, lwd=1, col=tracecol, type="s") } } if(!missing(cellnote)) text(x=c(row(cellnote)), y=c(col(cellnote)), labels=c(cellnote), col=notecol, cex=notecex) plot.index <- plot.index + 1 ## increment plot.index and then do ## latout_set( lmat, plot.index ) ## to set to the correct plot region, instead of ## relying on plot.new(). ## the two dendrograms : par(mar = c(margins[1], 0, 0, 0)) if( dendrogram %in% c("both","row") ) { flag <- try( plot.dendrogram(ddr, horiz = TRUE, axes = FALSE, yaxs = "i", leaflab = "none") ) if("try-error" %in% class(flag)) { cond <- attr(flag, "condition") if(!is.null(cond) && conditionMessage(cond)=="evaluation nested too deeply: infinite recursion / options(expressions=)?") stop('Row dendrogram too deeply nested, recursion limit exceeded. Try increasing option("expressions"=...).') } } else plot.new() par(mar = c(0, 0, if(!is.null(main)) 5 else 0, margins[2])) if( dendrogram %in% c("both","column") ) { flag <- try( plot.dendrogram(ddc, axes = FALSE, xaxs = "i", leaflab = "none") ) if("try-error" %in% class(flag)) { cond <- attr(flag, "condition") if(!is.null(cond) && conditionMessage(cond)=="evaluation nested too deeply: infinite recursion / options(expressions=)?") stop('Column dendrogram too deeply nested, recursion limit exceeded. Try increasing option("expressions"=...).') } } else plot.new() ## title if(!is.null(main)) title(main, cex.main = 1.5*op[["cex.main"]]) ## Add the color-key if(key) { mar <- c(5, 4, 2, 1) if (!is.null(key.xlab) && is.na(key.xlab)) mar[1] <- 2 if (!is.null(key.ylab) && is.na(key.ylab)) mar[2] <- 2 if (!is.null(key.title) && is.na(key.title)) mar[3] <- 1 par(mar = mar, cex=0.75, mgp=c(2, 1, 0)) if (length(key.par) > 0) do.call(par, key.par) tmpbreaks <- breaks if(symkey) { max.raw <- max(abs(c(x,breaks)),na.rm=TRUE) min.raw <- -max.raw tmpbreaks[1] <- -max(abs(x), na.rm=TRUE) tmpbreaks[length(tmpbreaks)] <- max(abs(x), na.rm=TRUE) } else { min.raw <- min.breaks max.raw <- max.breaks } z <- seq(min.raw, max.raw, by=min(diff(breaks)/100)) image(z=matrix(z, ncol=1), col=col, breaks=tmpbreaks, xaxt="n", yaxt="n") par(usr=c(0,1,0,1)) if (is.null(key.xtickfun)) { lv <- pretty(breaks) xv <- scale01(as.numeric(lv), min.raw, max.raw) xargs <- list(at=xv, labels=lv) } else { xargs <- key.xtickfun() } xargs$side <- 1 do.call(axis, xargs) if (is.null(key.xlab)) { if(scale=="row") key.xlab <- "Row Z-Score" else if(scale=="column") key.xlab <- "Column Z-Score" else key.xlab <- "Value" } if (!is.na(key.xlab)) { mtext(side=1, key.xlab, line=par("mgp")[1], padj=0.5, cex=par("cex") * par("cex.lab")) } if(density.info=="density") { dens <- density(x, adjust=densadj, na.rm=TRUE, from=min.scale, to=max.scale) omit <- dens$x < min(breaks) | dens$x > max(breaks) dens$x <- dens$x[!omit] dens$y <- dens$y[!omit] dens$x <- scale01(dens$x, min.raw, max.raw) lines(dens$x, dens$y / max(dens$y) * 0.95, col=denscol, lwd=1) if (is.null(key.ytickfun)) { yargs <- list(at=pretty(dens$y)/max(dens$y) * 0.95, labels=pretty(dens$y)) } else { yargs <- key.ytickfun() } yargs$side <- 2 do.call(axis, yargs) if (is.null(key.title)) key.title <- "Color Key\nand Density Plot" if (!is.na(key.title)) title(key.title) par(cex=0.5) if (is.null(key.ylab)) key.ylab <- "Density" if (!is.na(key.ylab)) mtext(side=2,key.ylab, line=par("mgp")[1], padj=0.5, cex=par("cex") * par("cex.lab")) } else if(density.info=="histogram") { h <- hist(x, plot=FALSE, breaks=breaks) hx <- scale01(breaks, min.raw, max.raw) hy <- c(h$counts, h$counts[length(h$counts)]) lines(hx, hy/max(hy)*0.95, lwd=1, type="s", col=denscol) if (is.null(key.ytickfun)) { yargs <- list(at=pretty(hy)/max(hy) * 0.95, labels=pretty(hy)) } else { yargs <- key.ytickfun() } yargs$side <- 2 do.call(axis, yargs) if (is.null(key.title)) key.title <- "Color Key\nand Histogram" if (!is.na(key.title)) title(key.title) par(cex=0.5) if (is.null(key.ylab)) key.ylab <- "Count" if (!is.na(key.ylab)) mtext(side=2,key.ylab, line=par("mgp")[1], padj=0.5, cex=par("cex") * par("cex.lab")) } else if (is.null(key.title)) title("Color Key") if(trace %in% c("both","column") ) { vline.vals <- scale01(vline, min.raw, max.raw) if(!is.null(vline)) { abline(v=vline.vals, col=linecol, lty=2) } } if(trace %in% c("both","row") ) { hline.vals <- scale01(hline, min.raw, max.raw) if(!is.null(hline)) { abline(v=hline.vals, col=linecol, lty=2) } } } else { par(mar=c(0, 0, 0, 0)) plot.new() } ## Create a table showing how colors match to (transformed) data ranges retval$colorTable <- data.frame( low=retval$breaks[-length(retval$breaks)], high=retval$breaks[-1], color=retval$col ) # Store layout information, suggested by Jenny Drnevich retval$layout <- list(lmat = lmat, lhei = lhei, lwid = lwid ) ## If user has provided an extra function, call it. if(!is.null(extrafun)) extrafun() invisible( retval ) } gplots/R/wapply.R0000644000176200001440000000362212471456251013434 0ustar liggesusers# $Id: wapply.R 1012 2006-11-14 22:25:06Z ggorjan $ "wapply" <- function( x, y, fun=mean, method="range", width, n=50, drop.na=TRUE, pts, ...) { method <- match.arg(method, c("width","range","nobs","fraction")) if(missing(width)) if( method=="nobs" ) width <- max(5, length(x)/10 ) else width <- 1/10 if(method == "width" || method == "range" ) { if(method=="range") width <- width * diff(range(x)) if(missing(pts)) pts <- seq(min(x),max(x),length.out=n) result <- sapply( pts, function(pts,y,width,fun,XX,...) { low <- min((pts-width/2),max(XX)) high <- max((pts+width/2), min(XX)) return (fun(y[(XX>= low) & (XX<=high)],...)) }, y=y, width=width, fun=fun, XX = x, ...) if(drop.na) { missing <- is.na(pts) & is.na(result) pts <- pts[!missing] result <- result[!missing] } return(list(x=pts,y=result)) } else # method=="nobs" || method=="fraction" { if( method=="fraction") width <- floor(length(x) * width) ord <- order(x) x <- x[ord] y <- y[ord] n <- length(x) center <- 1:n below <- sapply(center - width/2, function(XX) max(1,XX) ) above <- sapply(center + width/2, function(XX) min(n,XX) ) retval <- list() retval$x <- x retval$y <- apply(cbind(below,above), 1, function(x) fun(y[x[1]:x[2]],...) ) if(drop.na) { missing <- is.na(retval$x) | is.na(retval$y) retval$x <- retval$x[!missing] retval$y <- retval$y[!missing] } return(retval) } } gplots/R/plotNode.R0000644000176200001440000000152013700411374013670 0ustar liggesusershere <- function() {} plot.dendrogram <- stats:::plot.dendrogram environment(plot.dendrogram) <- environment(here) plotNodeLimit <- stats:::plotNodeLimit environment(plotNodeLimit) <- environment(here) # .memberDend <- stats:::.memberDend .memberDend <- function (x) { r <- attr(x, "x.member") if (is.null(r)) { r <- attr(x, "members") if (is.null(r)) r <- 1L } r } environment(.memberDend) <- environment(here) # .midDend <- stats:::.midDend .midDend <- function (x) { if (is.null(mp <- attr(x, "midpoint"))) 0 else mp } environment(.midDend) <- environment(here) unByteCode <- function(fun) { FUN <- eval(parse(text=deparse(fun))) environment(FUN) <- environment(fun) FUN } plotNode <- unByteCode(stats:::plotNode) environment(plotNode) <- environment(here) gplots/R/zzz.R0000644000176200001440000000074613727071650012762 0ustar liggesusers# Make sure to have: # sudo apt-get install texinfo # sudo apt-get install texlive # shell('git log --graph --stat --date=short --pretty=format:"%ad(%an) %s |%h" > ChangeLog', intern = TRUE) # system('git log --graph --stat --date=short --pretty=format:"%ad(%an) %s |%h" > ChangeLog', intern = TRUE) # file.copy("NEWS", "NEWS.md",overwrite = TRUE) # devtools::check_win_devel() # pkgdown::build_home() # pkgdown::build_site(run_dont_run = TRUE) # pkgdown::build_site() # release()gplots/R/ooplot.R0000644000176200001440000005071112471456251013435 0ustar liggesusers# $Id: ooplot.R 1557 2012-06-08 17:56:37Z warnes $ ooplot <- function(data, ...) UseMethod("ooplot") ooplot.default <- function(data, width=1, space=NULL, names.arg=NULL, legend.text=NULL, horiz=FALSE, density=NULL, angle=45, kmg="fpnumkMGTP", kmglim=TRUE, type=c("xyplot", "linear", "barplot", "stackbar"), col=heat.colors(NC), prcol=NULL, border=par("fg"), main=NULL, sub=NULL, xlab=NULL, ylab=NULL, xlim=NULL, ylim=NULL, xpd=TRUE, log="", axes=TRUE, axisnames=TRUE, prval=TRUE, lm=FALSE, cex.axis=par("cex.axis"), cex.names=par("cex.axis"), cex.values=par("cex"),inside=TRUE, plot=TRUE, axis.lty=0, plot.ci=FALSE, ci.l=NULL, ci.u=NULL, ci.color="black", ci.lty="solid", ci.lwd=1, plot.grid=FALSE, grid.inc=NULL, grid.lty="dotted", grid.lwd=1, grid.col="black", add=FALSE, by.row=FALSE, ...) { ## ## oopplot function block ## ## this is the location of the helper functions for this method ## optlim <- function(lim, log=FALSE) { ## define xlim and ylim, adjusting for log-scale if needed factor <- 1.05 if (log) { min <- 10^floor(log10(lim[1]/factor)) max <- 10^ceiling(log10(factor*lim[2])) } else { range <- (factor*lim[2]-lim[1]/factor) if (range>0) { ## we know the range, now find the optimal start and endpoints scale <- 10^floor(log10(range)) min <- scale*(floor((lim[1]/factor)/scale)) max <- scale*(ceiling(factor*lim[2]/scale)) } else { min=0 max=1 } } if (type=="barplot" || type=="stackbar") max=max+1 return(c(min, max)) } linearfitplot <- function(x,y,xlim,col) { ## calculate a linear fit through the datapoints and plot local <- data.frame(x=x,y=y) local.lm <- lm(y ~ x, data=local) summary <- summary(local.lm) xmin=min(x) xmax=max(x) if (xlim[1]xmax) { x2=mean(xlim[2],xmax) } else { x2=min(max(x),xlim[2]) } y1=summary$coefficients[2,1]*x1+summary$coefficients[1,1] y2=summary$coefficients[2,1]*x2+summary$coefficients[1,1] p1=c(x1,x2) p2=c(y1,y2) lines(p1,p2,col=col,lty=2,lwd=2) } castNA <- function(matrix) { newmatrix <- matrix for (j in 1:ncol(matrix)) { for (i in 1:nrow(matrix)) { newmatrix[i,j] <- ifelse(is.na(matrix[i,j]),0,matrix[i,j]) } } return(newmatrix) } ## ## End of function block ## ## In R, most people think about data in columns rather than rows if(by.row) data <- as.matrix(data) else data <- t(as.matrix(data)) ## make sure we only accept the supported plot options type <- match.arg(type) ## check data validity if( nrow(data) < 2 ) stop("At least 2 columns are required.") ## check defaults if (!missing(inside)) .NotYetUsed("inside", error=FALSE)# -> help(.) ## set the beside parameter if (type=="stackbar") { beside <- FALSE data <- castNA(data) } else beside <- TRUE ## split the data into x and y values height <- data[-1,,drop=FALSE] heightscale <- "" heightsymbol <- "" ## if ((kmg!="") && (kmglim==TRUE)){ ## ## auto scale the parameters ## ## now scale the data, valid factors are ## P : peta=1E15 ## T : tera=1E12 ## G : giga=1E09 ## M : mega=1E06 ## k : kilo=1E03 ## m : milli=1E-03 ## u : micro=1E-06 ## n : nano=1E-09 ## p : pico=1E-12 ## f : femto=1E-15 maxheight <- max(abs(height), na.rm=TRUE) heightfactor <- 1 if (maxheight>10E15 && any(grep("P", kmg))) { heightfactor <- 1E15 heightscale <- "Peta" heightsymbol <- "P" } else if (maxheight>1E12 && any(grep("T", kmg))) { heightfactor <- 1E12 heightscale <- "Tera" heightsymbol <- "T" } else if (maxheight>1E09 && any(grep("G", kmg))) { heightfactor <- 1E09 heightscale <- "Giga" heightsymbol <- "G" } else if (maxheight>1E06 && any(grep("M", kmg))) { heightfactor <- 1E06 heightscale <- "Mega" heightsymbol <- "M" } else if (maxheight>1E03 && any(grep("k", kmg))) { heightfactor <- 1E03 heightscale <- "Kilo" heightsymbol <- "k" } else if (maxheight<1E-15 && any(grep("f", kmg))) { heightfactor <- 1E-15 heightscale <- "Femto" heightsymbol <- "f" } else if (maxheight<1E-12 && any(grep("p", kmg))) { heightfactor <- 1E-12 heightscale <- "Pico" heightsymbol <- "p" } else if (maxheight<1E-09 && any(grep("n", kmg))) { heightfactor <- 1E-09 heightscale <- "Nano" heightsymbol <- "n" } else if (maxheight<1E-06 && any(grep("u", kmg))) { heightfactor <- 1E-06 heightscale <- "Micro" heightsymbol <- "u" } else if (maxheight<1E-03 && any(grep("m", kmg))) { heightfactor <- 1E-03 heightscale <- "Milli" heightsymbol <- "m" } height <- height/heightfactor } ## fill the xaxis data set and matching rownames xaxis <- data[1, ] rownames <- rownames(data) ## if (missing(space)) space <- if (is.matrix(height) && beside) c(0, 1) else 0.2 space <- space * mean(width) ## if (plot && axisnames && missing(names.arg)) { if (type=="xyplot") names.arg <- colnames(height) else if (type=="linear") names.arg <- xaxis else if (type=="barplot") names.arg <- xaxis else if (type=="stackbar") names.arg <- xaxis else names.arg <- xaxis } ## set the legend text if it is null if(is.logical(legend.text)) legend.text <- rownames[-c(1)] ## if(legend.text && is.matrix(height)) rownames(height) ## else colnames(height) if (is.vector(height) || is.array(height)) { height <- rbind(height) } else if (!is.matrix(height)) stop("`height' must be a vector or a matrix") ## Check for log scales logx <- FALSE logy <- FALSE if (log !="") { if (any(grep("x", log))) logx <- TRUE if (any(grep("y", log))) logy <- TRUE } ## Cannot "hatch" with rect() when log scales used if ((logx || logy) && !is.null(density)) stop("Cannot use shading lines in bars when log scale is used") ## Set the size of Rows and Columns NR <- nrow(height) NC <- ncol(height) ## w.r, w.l, w.m are the x-axis coordinates if (type=="barplot") { if (NR<1) NR <- 1 if (NC<1) NC <- 1 if (length(space)==2) { space <- rep.int(c(space[2], rep.int(space[1], NR - 1)), NC) } width <- rep(width, length=NR * NC) } else if (type=="stackbar") { width <- rep(width, length=NC) } else { width <- rep(width, length=NC) delta <- width / 2 } ## set the proper x-axis scale ## linear is a switch between equidistant and scaled if (type=="xyplot") { delta <- 0 w.m <- xaxis w.r <- w.m + delta w.l <- w.m - delta } else if (type=="linear") { w.r <- cumsum(width) w.m <- w.r - delta w.l <- w.m - delta xaxis <- w.m } else if(type=="barplot" || type=="stackbar") { delta <- width / 2 w.r <- cumsum(space + width) w.m <- w.r - delta w.l <- w.m - delta ##if graphic will be stacked bars, do not plot ci if (beside && (NR > 1) && plot.ci) plot.ci=FALSE } else stop("Unkown plot type") ## error check ci arguments if (plot && plot.ci) { if ((missing(ci.l)) || (missing(ci.u))) stop("confidence interval values are missing") if (is.vector(ci.l)) ci.l <- cbind(ci.l) else if (is.array(ci.l) && (length(dim(ci.l))==1)) ci.l <- rbind(ci.l) else if (!is.matrix(ci.l)) stop("`ci.l' must be a vector or a matrix") if (is.vector(ci.u)) ci.u <- cbind(ci.u) else if (is.array(ci.u) && (length(dim(ci.u))==1)) ci.u <- rbind(ci.u) else if (!is.matrix(ci.u)) stop("`ci.u' must be a vector or a matrix") if ( any(dim(height) !=dim(ci.u) ) ) stop("'height' and 'ci.u' must have the same dimensions.") else if ( any( dim(height) !=dim(ci.l) ) ) stop("'height' and 'ci.l' must have the same dimensions.") } if (beside) w.m <- matrix(w.m, ncol=NC) ## check height/ci.l if using log scale to prevent log(<=0) error ## adjust appropriate ranges and bar base values if ((logx && horiz) || (logy && !horiz)) { if (min(height, na.rm=TRUE) <=0) stop("log scale error: at least one 'height' value <=0") if (plot.ci && (min(ci.l) <=0)) stop("log scale error: at least one lower c.i. value <=0") if (logx && !is.null(xlim) && (xlim[1] <=0)) stop("log scale error: 'xlim[1]' <=0") if (logy && !is.null(ylim) && (ylim[1] <=0)) stop("'log scale error: 'ylim[1]' <=0") ## arbitrary adjustment to display some of bar for min(height) ## or min(ci.l) if (plot.ci) rectbase <- rangeadj <- (0.9 * min(c(height, ci.l))) else rectbase <- rangeadj <- (0.9 * min(height)) ## if axis limit is set to < above, adjust bar base value ## to draw a full bar if (logy && !is.null(ylim)) rectbase <- ylim[1] else if (logx && !is.null(xlim)) rectbase <- xlim[1] ## if stacked bar, set up base/cumsum levels, adjusting for log scale if (type=="stackbar") { heightdata <- height ## remember the original values height <- rbind(rectbase, apply(height, 2, cumsum)) } ## if plot.ci, be sure that appropriate axis limits are set to ## include range(ci) lim <- if (plot.ci) c(height, ci.l, ci.u) else height } else { ## Use original bar base value rectbase <- 0 ## if stacked bar, set up base/cumsum levels if (type=="stackbar") { heightdata <- height ## remember the original values height <- rbind(rectbase, apply(height, 2, cumsum)) } ## if plot.ci, be sure that appropriate axis limits are set to ## include range(ci) lim <- if (plot.ci) c(height, ci.l, ci.u) else height ## use original range adjustment factor rangeadj <- (-0.01 * lim) } ## calculate the ranges ourselves if (missing(xlim)) xlim <- optlim(range(w.l, w.r, na.rm=TRUE), logx) if (missing(ylim)) ylim <- optlim(range(height, na.rm=TRUE), logy) ## if(plot) ##-------- Plotting : { if (type=="barplot" || type=="stackbar") { if (horiz) rectbase <- xlim[1] ## make sure the xlimit and the rectbase ## are in sync else rectbase <- ylim[1] ## make sure the ylimit and rectbase are in sync opar <- if (horiz) par(xaxs="i", xpd=xpd) else par(yaxs="i", xpd=xpd) } else { opar <- if (horiz) par(xaxs="r", yaxs="r", xpd=xpd) else par(xaxs="r", yaxs="r", xpd=xpd) } on.exit(par(opar)) ## If add=FALSE open new plot window ## else allow for adding new plot to existing window if (!add) { plot.new() plot.window(xlim, ylim, log=log, ...) } ## Set plot region coordinates usr <- par("usr") ## adjust par("usr") values if log scale(s) used if (logx) { usr[1] <- 10 ^ usr[1] usr[2] <- 10 ^ usr[2] } if (logy) { usr[3] <- 10 ^ usr[3] usr[4] <- 10 ^ usr[4] } ## if prcol specified, set plot region color if (!missing(prcol)) rect(usr[1], usr[3], usr[2], usr[4], col=prcol) ## if plot.grid, draw major y-axis lines if vertical or x axis ## if horizontal R V1.6.0 provided axTicks() as an R equivalent ## of the C code for CreateAtVector. Use this to determine ## default axis tick marks when log scale used to be consistent ## when no grid is plotted. Otherwise if grid.inc is specified, ## use pretty() if (plot.grid) { par(xpd=FALSE) if (is.null(grid.inc)) { if (horiz) { grid <- axTicks(1) abline(v=grid, lty=grid.lty, lwd=grid.lwd, col=grid.col) } else { grid <- axTicks(2) abline(h=grid, lty=grid.lty, lwd=grid.lwd, col=grid.col) } } else { if (horiz) { grid <- pretty(xlim, n=grid.inc) abline(v=grid, lty=grid.lty, lwd=grid.lwd, col=grid.col) } else { grid <- pretty(ylim, n=grid.inc) abline(h=grid, lty=grid.lty, lwd=grid.lwd, col=grid.col) } } par(xpd=xpd) } ## ## end of the general setup, now get ready to plot the elements ## ## cycle through all the sets and plot the lines if (type=="xyplot" || type=="linear") { pch <- c() for (i in 1:NR) { list <- is.finite(height[i, ]) xrange <- xaxis[list] yrange <- height[i, list] lines(xrange, yrange, col=col[i]) if ((type=="xyplot") && (lm==TRUE)) linearfitplot(xrange,yrange,xlim,col[i]) symbol=21+(i %% 5) points(xrange, yrange, pch=symbol, bg=col[i], col=col[i]) pch <- c(pch, symbol) ## if (prval) { values=paste(format(yrange, digits=4), heightsymbol, sep="") chh <- par()$cxy[2] chw <- par()$cxy[1] if (logy) { factor=(yrange+chh)/yrange text(xrange, 1.1*yrange, labels=values, adj=c(0, 1), srt=0, cex=cex.values, bg="white", col="navy") } else { text(xrange, yrange+chh, labels=values, adj=c(0, 1), srt=0, cex=cex.values, bg="white", col="navy") } } } } if (type=="barplot" || type=="stackbar") { xyrect <- function(x1, y1, x2, y2, horizontal=TRUE, ...) { if(horizontal) rect(x1, y1, x2, y2, ...) else rect(y1, x1, y2, x2, ...) } chh <- par()$cxy[2] chw <- par()$cxy[1] if (type=="barplot") { xyrect(rectbase, w.l, c(height), w.r, horizontal=horiz, angle=angle, density=density, col=col, border=border) if (prval) { values=paste(format(c(height), digits=4), heightsymbol, sep="") if (horiz) { text(c(height)+chw, w.l, labels=values, adj=c(0, 1), srt=0, cex=cex.values, bg="white", col="navy") } else { text(w.l, c(height)+chh, labels=values, adj=c(0, 1), srt=0, cex=cex.values, bg="white", col="navy") } } } else if (type=="stackbar") { for (i in 1:NC) { xyrect(height[1:NR, i], w.l[i], height[-1, i], w.r[i], horizontal=horiz, angle=angle, density=density, col=col, border=border) if (prval) { for (j in 1:NR) { values=paste(format(c(heightdata[j, i]), digits=4), heightsymbol, sep="") if (horiz) { text(c(height[j, i])+chw, w.m[i], labels=values, adj=c(0, 1), srt=0, cex=cex.values, bg="white", col="navy") } else { text(w.m[i], c(height[j, i])+chh, labels=values, adj=c(0, 1), srt=0, cex=cex.values, bg="white", col="navy") } } } } } } if (plot.ci) { ## CI plot width=barwidth / 2 ci.width=width / 4 if (horiz) { segments(ci.l, w.m, ci.u, w.m, col=ci.color, lty=ci.lty, lwd=ci.lwd) segments(ci.l, w.m - ci.width, ci.l, w.m + ci.width, col=ci.color, lty=ci.lty, lwd=ci.lwd) segments(ci.u, w.m - ci.width, ci.u, w.m + ci.width, col=ci.color, lty=ci.lty, lwd=ci.lwd) } else { segments(w.m, ci.l, w.m, ci.u, col=ci.color, lty=ci.lty, lwd=ci.lwd) segments(w.m - ci.width, ci.l, w.m + ci.width, ci.l, col=ci.color, lty=ci.lty, lwd=ci.lwd) segments(w.m - ci.width, ci.u, w.m + ci.width, ci.u, col=ci.color, lty=ci.lty, lwd=ci.lwd) } } if (axisnames && !is.null(names.arg)) # specified or from {col}names { at.l <- if (length(names.arg) !=length(w.m)) { if (length(names.arg)==NC) # i.e. beside (!) colMeans(w.m) else if ((type=="barplot") && (NR==1)) { median(w.m) } else if ((type=="linear") && (NR==1)) { median(w.m) } else { stop("incorrect number of names now") } } else w.m ##axis(if(horiz) 2 else 1, at=at.l, labels=names.arg, ## lty=axis.lty, cex.axis=cex.names, ...) } if(!is.null(legend.text)) { legend.col <- rep(col, length=length(legend.text)) if((horiz & beside) || (!horiz & !beside)) { legend.text <- rev(legend.text) legend.col <- rev(legend.col) density <- rev(density) angle <- rev(angle) } ## adjust legend x and y values if log scaling in use if (logx) legx <- usr[2] - ((usr[2] - usr[1]) / 10) else legx <- usr[2] - xinch(0.1) if (logy) legy <- usr[4] - ((usr[4] - usr[3]) / 10) else legy <- usr[4] - yinch(0.1) if (type=="barplot" || type=="stackbar") { legend(legx, legy, legend=legend.text, angle=angle, density=density, fill=legend.col, xjust=1, yjust=1) } else { legend(legx, legy, legend=legend.text, ##angle=angle, ##density=density, lwd=1, col=legend.col, pch=pch, pt.bg=legend.col, xjust=1, yjust=1) } } title(main=main, sub=sub, xlab=xlab, ylab=paste(heightscale, ylab), ...) ## if axis is to be plotted, adjust for grid "at" values if (axes) { par(lab=c(10, 10, 7)) if (type=="barplot" || type=="stackbar") { axis(if(horiz) 2 else 1, at=at.l, labels=names.arg, lty=axis.lty, cex.axis=cex.names, ...) if(plot.grid) axis(if(horiz) 1 else 2, at=grid, cex.axis=cex.axis, ...) else axis(if(horiz) 1 else 2, cex.axis=cex.axis, ...) } else if (type=="linear") { if(plot.grid) { axis(if(horiz) 1 else 2, at=grid, cex.axis=cex.axis, ...) axis(if(horiz) 2 else 1, at=at.l, labels=names.arg, lty=axis.lty, cex.axis=cex.names, ...) } else { axis(if(horiz) 1 else 2, pos=0, cex.axis=cex.axis, ...) axis(if(horiz) 2 else 1, pos=ylim[1], at=at.l, labels=names.arg, cex.axis=cex.names, ...) } } else if (type=="xyplot") { if(plot.grid) { axis(if(horiz) 1 else 2, at=grid, cex.axis=cex.axis, ...) axis(if(horiz) 2 else 1, cex.axis=cex.axis, ) } else { if (horiz) { axis(1, pos=ylim[1], cex.axis=cex.axis, ...) axis(2, pos=xlim[1], cex.axis=cex.axis, ...) } else { axis(2, pos=xlim[1], cex.axis=cex.axis, ...) axis(1, pos=ylim[1], cex.axis=cex.axis, ...) } } } } invisible(w.m) } else w.m } gplots/R/nobs.R0000644000176200001440000000112513003720415013041 0ustar liggesusers# $Id: nobs.R 1799 2014-04-05 18:38:23Z warnes $ ## Redefine here, so that the locally defined methods (particularly ## nobs.default) take precidence over the ones now defined in the ## stats package nobs <- function(object, ...) UseMethod("nobs") nobs.default <- function(object, ...) { if(is.numeric(object) || is.logical(object)) sum( !is.na(object) ) else stats::nobs(object, ...) } nobs.data.frame <- function(object, ...) sapply(object, nobs.default) ## Now provided by 'stats' package, so provide alias to satisfy ## dependencies nobs.lm <- stats:::nobs.lm gplots/R/angleAxis.R0000644000176200001440000000132012664117416014025 0ustar liggesusersangleAxis <- function(side, labels, at=1:length(labels), srt=45, adj, xpd=TRUE, ...) { usr <- par("usr") emH <- strheight("M") emW <- strwidth("M") if(missing(adj)) adj <- switch(side, 1, 1, 0, 0) switch(side, #1 - below text(x=at, y=usr[3]-emH/2, labels=labels, srt=srt, adj=adj, xpd=xpd, ...), #2 - left text(x=usr[1]-emW/2, y=at, labels=labels, srt=srt, adj=adj, xpd=xpd, ...), #3 - above text(x=at, y=usr[4]+emH/2, labels=labels, srt=srt, adj=adj, xpd=xpd, ...), #4 - right text(x=usr[2]+emW/2, y=at, labels=labels, srt=srt, adj=adj, xpd=xpd, ...) ) invisible(NULL) }gplots/R/qqnorm.aov.R0000644000176200001440000000175412471456250014224 0ustar liggesusers# $Id: qqnorm.aov.R 625 2005-06-09 14:20:30Z nj7w $ if(is.R()) qqnorm.aov <- function (y, full = FALSE, label = FALSE, omit = NULL, xlab = paste(if(full) "" else "Half", " Normal plot"), ylab = "Effects", ...) { r <- y$rank eff <- if (full) effects(y, set.sign = TRUE)[1:r] else abs(effects(y))[1:r] na <- names(eff) int <- match("(Intercept)", na) if (!is.null(omit)) { if (is.character(omit)) { int <- c(int, match(omit, na)) } else int <- c(int, omit) } int <- int[!is.na(int)] if (length(int)) eff <- eff[-int] n <- length(eff) if (n <= 0) stop("Not enough effects") ord <- order(eff) na <- names(eff) P <- if (full) ppoints(n) else ((1:n) + n)/(2 * n + 1) Q <- qnorm(P) plot(x = Q, y = eff[ord], xlab = xlab, ylab = ylab, ...) if (label && dev.interactive()) identify(Q, eff[ord], names(eff)[ord]) } gplots/R/print.hist2d.R0000644000176200001440000000107612471456250014450 0ustar liggesusers# $Id: hist2d.R 1471 2011-08-16 01:03:31Z warnes $ print.hist2d <- function(x, ...) { cat("\n") cat("----------------------------\n") cat("2-D Histogram Object\n") cat("----------------------------\n") cat("\n") cat("Call: ") print(x$call) cat("\n") cat("Number of data points: ", x$nobs, "\n") cat("Number of grid bins: ", length(x$x), "x", length(x$y), "\n") cat("X range: (", min(x$x.breaks), ",", max(x$x.breaks), ")\n") cat("Y range: (", min(x$y.breaks), ",", max(x$y.breaks), ")\n") cat("\n") } gplots/R/replaceTabs.R0000644000176200001440000000157012471456250014344 0ustar liggesusers## Function to replace all tabs in a string with an appropriate number of spaces. # handle a single character string replaceTabs.inner <- function( text, width=8 ) { spaces <- " " if(nchar(text)<1) return(text) text.split <- strsplit(text,"\t")[[1]] if(length(text.split)==1) return(text) else { nSpaceAdd <- 8 - nchar(text.split) %% 8 nSpaceAdd[length(nSpaceAdd)] <- 0 nSpaceAdd[nSpaceAdd==8] <- 0 retval <- "" for(i in 1:length(text.split)) { tmp.text <- chartr("\t"," ", text.split[i]) # one space here retval <- paste(retval, tmp.text, substr(spaces,0,nSpaceAdd[i]-1 ), sep='' ) # rest here } return(retval) } } replaceTabs <- function(text, width=8) { text <- as.character(text) retval <- sapply(text, replaceTabs.inner) names(retval) <- names(text) retval } gplots/R/baseOf.R0000644000176200001440000000077112471456250013320 0ustar liggesusers # transform base # v = value of base 10 to be transformed # b = new base # l = minimal length of returned array (default is 1) # return value: array of factors, highest exponent first baseOf<-function(v,b,l=1) { remainder<-v i<-l ret<-NULL while(remainder>0 || i>0) { #print(paste("i=",i," remainder=",remainder)) m<-remainder%%b if (is.null(ret)) { ret<-m } else { ret<-c(m,ret) } remainder <- remainder %/% b i<-i-1 } return(ret) } gplots/R/textplot.R0000644000176200001440000001547212471456250014010 0ustar liggesusers# $Id: textplot.R 1213 2007-11-01 20:20:10Z warnes $ textplot <- function(object, halign="center", valign="center", cex, ... ) UseMethod('textplot') textplot.default <- function(object, halign=c("center","left","right"), valign=c("center","top","bottom"), cex, ... ) { if (is.matrix(object) || (is.vector(object) && length(object)>1) ) return(textplot.matrix(object, halign, valign, cex, ... )) halign <- match.arg(halign) valign <- match.arg(valign) textplot.character(object, halign, valign, cex, ...) } textplot.data.frame <- function(object, halign=c("center","left","right"), valign=c("center","top","bottom"), cex, ... ) textplot.matrix(object, halign, valign, cex, ... ) textplot.matrix <- function(object, halign=c("center","left","right"), valign=c("center","top","bottom"), cex, cmar=2, rmar=0.5, show.rownames=TRUE, show.colnames=TRUE, hadj=1, vadj=1, mar= c(1,1,4,1)+0.1, col.data=par("col"), col.rownames=par("col"), col.colnames=par("col"), ... ) { if(is.vector(object)) object <- t(as.matrix(object)) else object <- as.matrix(object) # check dimensions of col.data, col.rownames, col.colnames if(length(col.data)==1) col.data <- matrix(col.data, nrow=nrow(object), ncol=ncol(object)) else if( nrow(col.data)!=nrow(object) || ncol(col.data)!=ncol(object) ) stop("Dimensions of 'col.data' do not match dimensions of 'object'.") if(length(col.rownames)==1) col.rownames <- rep(col.rownames, nrow(object)) if(length(col.colnames)==1) if(show.rownames) col.colnames <- rep(col.colnames, ncol(object)+1) else col.colnames <- rep(col.colnames, ncol(object)) halign=match.arg(halign) valign=match.arg(valign) opar <- par()[c("mar","xpd","cex")] on.exit( par(opar) ) par(mar=mar, xpd=FALSE ) # setup plot area plot.new() plot.window(xlim=c(0,1),ylim=c(0,1), log = "", asp=NA) # add 'r-style' row and column labels if not present if( is.null(colnames(object) ) ) colnames(object) <- paste( "[,", 1:ncol(object), "]", sep="" ) if( is.null(rownames(object)) ) rownames(object) <- paste( "[", 1:nrow(object), ",]", sep="") # extend the matrix to include row and column labels if( show.rownames ) { object <- cbind( rownames(object), object ) col.data <- cbind( col.rownames, col.data ) } if( show.colnames ) { object <- rbind( colnames(object), object ) col.data <- rbind( col.colnames, col.data ) } # set the character size if( missing(cex) ) { cex <- 1.0 lastloop <- FALSE } else { lastloop <- TRUE } for (i in 1:20) { oldcex <- cex width <- sum( apply( object, 2, function(x) max(strwidth(x,cex=cex) ) ) ) + strwidth('M', cex=cex) * cmar * ncol(object) height <- strheight('M', cex=cex) * nrow(object) * (1 + rmar) if(lastloop) break cex <- cex / max(width,height) if (abs(oldcex - cex) < 0.001) { lastloop <- TRUE } } # compute the individual row and column heights rowheight<-strheight("W",cex=cex) * (1 + rmar) colwidth<- apply( object, 2, function(XX) max(strwidth(XX, cex=cex)) ) + strwidth("W")*cmar width <- sum(colwidth) height <- rowheight*nrow(object) # setup x alignment if(halign=="left") xpos <- 0 else if(halign=="center") xpos <- 0 + (1-width)/2 else #if(halign=="right") xpos <- 0 + (1-width) # setup y alignment if(valign=="top") ypos <- 1 else if (valign=="center") ypos <- 1 - (1-height)/2 else #if (valign=="bottom") ypos <- 0 + height x <- xpos y <- ypos # iterate across elements, plotting them xpos<-x for(i in 1:ncol(object)) { xpos <- xpos + colwidth[i] for(j in 1:nrow(object)) { ypos<-y-(j-1)*rowheight if( (show.rownames && i==1) || (show.colnames && j==1) ) text(xpos, ypos, object[j,i], adj=c(hadj,vadj), cex=cex, font=2, col=col.data[j,i], ... ) else text(xpos, ypos, object[j,i], adj=c(hadj,vadj), cex=cex, font=1, col=col.data[j,i], ... ) } } par(opar) } textplot.character <- function (object, halign = c("center", "left", "right"), valign = c("center", "top", "bottom"), cex, fixed.width=TRUE, cspace=1, lspace=1, mar=c(0,0,3,0)+0.1, tab.width=8, ...) { object <- paste(object,collapse="\n",sep="") object <- replaceTabs(object, width=tab.width) halign = match.arg(halign) valign = match.arg(valign) plot.new() opar <- par()[c("mar","xpd","cex","family")] on.exit( par(opar) ) par(mar=mar,xpd=FALSE ) if(fixed.width) par(family="mono") plot.window(xlim = c(0, 1), ylim = c(0, 1), log = "", asp = NA) slist <- unlist(lapply(object, function(x) strsplit(x,'\n'))) slist <- lapply(slist, function(x) unlist(strsplit(x,''))) slen <- sapply(slist, length) slines <- length(slist) if (missing(cex)) { lastloop <- FALSE cex <- 1 } else lastloop <- TRUE for (i in 1:20) { oldcex <- cex #cat("cex=",cex,"\n") #cat("i=",i,"\n") #cat("calculating width...") cwidth <- max(sapply(unlist(slist), strwidth, cex=cex)) * cspace #cat("done.\n") #cat("calculating height...") cheight <- max(sapply(unlist(slist), strheight, cex=cex)) * ( lspace + 0.5 ) #cat("done.\n") width <- strwidth(object, cex=cex) height <- strheight(object, cex=cex) if(lastloop) break cex <- cex / max(width, height) if (abs(oldcex - cex) < 0.001) { lastloop <- TRUE } } if (halign == "left") xpos <- 0 else if (halign == "center") xpos <- 0 + (1 - width)/2 else xpos <- 0 + (1 - width) if (valign == "top") ypos <- 1 else if (valign == "center") ypos <- 1 - (1 - height)/2 else ypos <- 1 - (1 - height) text(x=xpos, y=ypos, labels=object, adj=c(0,1), cex=cex, ...) par(opar) invisible(cex) } gplots/R/ci2d.R0000644000176200001440000001051512471456250012737 0ustar liggesusers# $Id: ci2d.R 1471 2011-08-16 01:03:31Z warnes $ ## first(...) selects the first element of which(...) first <- function(x,...) { w <- which(x,...) if(length(x)>1) w[1] else w } ## first(...) selects the first element of which(...) last <- function(x,...) { w <- which(x,...) if(length(x)>1) rev(w)[1] else w } ## non-parametric 2 dimensional approximate confidence interval ci2d <- function(x, y = NULL, nbins=51, method=c("bkde2D","hist2d"), bandwidth, factor=1.0, ci.levels=c(0.50,0.75,0.90,0.95,0.975), show=c("filled.contour","contour","image","none"), col=topo.colors(length(breaks)-1), show.points=FALSE, pch=par("pch"), points.col="red", xlab, ylab, ...) { show <- match.arg(show) method <- match.arg(method) breaks <- unique(c(0, ci.levels, 1.0)) # get labels for x and y if (missing(xlab)) xlab <- if (missing(x)) "" else deparse(substitute(x)) if (missing(ylab)) ylab <- if (missing(y)) "" else deparse(substitute(y)) if(!is.null(y)) x <- cbind(x,y) if(method=="hist2d") { h2d <- hist2d(x, show=FALSE, nbins=nbins, ...) ## normalize h2d$density <- h2d$counts / sum(h2d$counts, na.rm=TRUE) } else if (method=="bkde2D") { if(length(nbins)==1) nbins <- c(nbins, nbins) if(missing(bandwidth)) { h.x = dpik(x[,1]) h.y = dpik(x[,2]) bandwidth <- c(h.x, h.y) } est <- bkde2D(x, bandwidth=bandwidth*factor, gridsize=nbins, ... ) h2d <- list() h2d$x <- est$x1 h2d$y <- est$x2 h2d$counts <- est$fhat h2d$nobs <- nrow(x) h2d$density <- est$fhat / sum(est$fhat) # normalize } else stop("Unknown method: '", method, "'") uniqueVals <- rev(unique(sort(h2d$density))) cumProbs <- sapply(uniqueVals, function(val) sum( h2d$density[h2d$density>=val] ) ) names(cumProbs) <- uniqueVals h2d$cumDensity <- matrix(nrow=nrow(h2d$density), ncol=ncol(h2d$density)) h2d$cumDensity[] <- cumProbs[as.character(h2d$density)] if(show=="image") { image(h2d$x, h2d$y, h2d$cumDensity, xlab=xlab, ylab=ylab, breaks=breaks, col=col) if(show.points) points(x[,1], x[,2], pch=pch, col=points.col); } else if(show=="filled.contour") { if(show.points) plot.title <- function() { points(x[,1], x[,2], pch=pch, col=points.col); } else plot.title <- function() {} filled.contour(h2d$x, h2d$y, h2d$cumDensity, levels=breaks, col=col, xlab=xlab, ylab=ylab, plot.title=plot.title(), key.title=title("\nCI Level"), key.axes=axis(4, at=breaks) ) } else if(show=="contour") { tmpBreaks <- breaks[breaks<1] # avoid having 1.0 line contour(h2d$x, h2d$y, h2d$cumDensity, levels=tmpBreaks, labels=tmpBreaks, xlab=xlab, ylab=ylab, nlevels=length(tmpBreaks), col=col ) if(show.points) points(x[,1], x[,2], pch=pch, col=points.col); } h2d$contours <- contourLines(h2d$x, h2d$y, h2d$cumDensity, levels=breaks, nlevels=length(breaks)) # use the confidence level value as the name in the contour list names(h2d$contours) <- sapply(h2d$contours, function(x) x$level) # convert each contour into a (x,y) dataframe h2d$contours <- lapply( h2d$contours, function(J) data.frame(x=J$x, y=J$y) ) h2d$call <- match.call() class(h2d) <- "ci2d" invisible(h2d) } gplots/R/layout_set.R0000644000176200001440000000035412610002016014264 0ustar liggesuserslayout_set <- function(mat, index) { mfg <- par("mfg") mfg[1:2] = which(mat==index, arr.ind=TRUE)[1,] par(mfg=mfg) invisible(mfg) } layout_show <- function(mat) { graphics::layout.show( max(mat) ) mat } gplots/R/residplot.R0000644000176200001440000000064512471456250014126 0ustar liggesusers# $Id: residplot.R 1012 2006-11-14 22:25:06Z ggorjan $ residplot <- function(model, formula, ...) { data <- expand.model.frame( model, formula, na.expand=TRUE) newform <- eval(parse( text=paste("as.call(", "resid(model) ~", formula[-1],")" ))) plot( newform, data=data, ylab="Residuals") lines(lowess( newform, data=data ), col="red") bandplot(newform,data=data) } gplots/R/plot.venn.R0000644000176200001440000002073512675272210014044 0ustar liggesusers plot.venn <- function(x, y, ..., small=0.7, showSetLogicLabel=FALSE, simplify=FALSE ) { drawVennDiagram( data=x, small=small, showSetLogicLabel=showSetLogicLabel, simplify=simplify ) } ## data should be a matrix. ## - The first column of the matrix is the ## count of the number of objects with the specified pattern. ## - The second and subsequent columns contain 0-1 indicators ## giving the pattern of group membership drawVennDiagram <-function(data, small=0.7, showSetLogicLabel=FALSE, simplify=FALSE) { numCircles<-NA data.colnames<-NULL data.rownames<-NULL if(is.matrix(data)) { numCircles<-ncol(data)-1 data.colnames<-colnames(data)[2:(ncol(data))] # Order is reverted since later indexing starts with # the "lowest bit" and that is expected at the left data.rownames<-rownames(data) } else { if (is.list(data)) { stop("gplots.drawVennDiagram: This internal function is used wrongly. ", "Please call the function 'venn' with the same arguments, instead.\n") } warning("drawVennDiagram: Testing only, presuming first argument to specify", "the number of circles to draw.\n") numCircles<-data } m<-(0:(-1+2^numCircles)) if (! is.matrix(data)) { ##cat("prepare randomised data\n") data<-t(sapply(X=m,FUN=function(v){ l<-baseOf(v,2,numCircles) #print(l) return(l) })) #print(data) #data.names<-apply(data,1,function(X){ # return(paste(X),collapse="") #}) for(i in m) { n<-paste(data[i+1,],collapse="") if (is.null(data.rownames)) { data.rownames<-n } else { data.rownames<-c(data.rownames,n) } } #print(data.rownames) data<-cbind(sample(1:100,size=2^numCircles,replace=TRUE),data) #print(data) rownames(data)<-data.rownames data.colnames<-LETTERS[1:numCircles] colnames(data)<-c("num",data.colnames) } plot.new() h<-400 plot.window(c(0,h), c(0,h), ylab="", xlab="") if ((2 <= numCircles && numCircles <= 3) || (4 == numCircles && simplify)) { circle <- function(x,y=NULL,r=1) { elps=cbind(r*cos(seq(0,2*pi,len=1000)), r*sin(seq(0,2*pi,len=1000))); if (!is.null(y)) { if (length(x) != length(y)) stop("circle: both x and y need to be of same length") if (is.matrix(x) && ncol(x)>1) stop("circle: if y is not NULL, then x must not be a matrix") x<-cbind(x,y) } for(i in 1:nrow(x)) { ax<-elps[,1]+rep(x[i,1],1000) ay<-elps[,2]+rep(x[i,2],1000) polygon(ax,ay) } } #nolongerreguired#require(grid) ##cat("drawing circles\n") # draw circles with radius 1.7 equally distributed # with centers on a circle of radius 1 degrees<-2*pi/numCircles*(1:numCircles) # scaling factor s<-1/8*h # radius for circles r<-3/12*h x<-sapply(degrees,FUN=sin)*s + 0.5*h y<-sapply(degrees,FUN=cos)*s + 0.5*h ##cat("filling data\n") circle(x,y,r) distFromZero<-rep(NA,2^numCircles) degrees<-rep(NA,2^numCircles) degrees[(2^numCircles)]<-0 distFromZero[(2^numCircles)]<-0 for (i in 0:(numCircles-1)) { distFromZero[2^i+1] <- r degrees[2^i+1] <- 2*pi/numCircles*i d<-degrees[2^i+1] #print(data.colnames) text( # starting from the lowest bit, hence reading # lables from the right label=data.colnames[numCircles - i], x=sin(d)*5/12*h+0.5*h, y=cos(d)*5/12*h+0.5*h ) } if (4==numCircles) { for (i in 0:(numCircles-1)) { # Current set bit plus the bit left of it and the bit right of it distFromZero[2^i +2^((i+numCircles-1)%%numCircles) +2^((i+1)%%numCircles)+1] <- 2/12*h distFromZero[2^i+1] <- 3.5/12*h degrees[2^i +2^((i+numCircles-1)%%numCircles) +2^((i+1)%%numCircles)+1] <- degrees[2^i+1] } } #degrees[2^i+1] + degrees[2^((i+1)%%numCircles)+1])/2 if (3 <=numCircles) { for (i in 0:(numCircles-1)) { distFromZero[(2^i+2^((i+1)%%numCircles))+1]<- 2.2/12*h distFromZero[2^i+1] <- 3/12*h if (i == (numCircles-1)) { degrees[(2^i+2^((i+1)%%numCircles))+1] <- ( degrees[2^i+1] + 2*pi+ degrees[1+1])/2 } else { degrees[(2^i+2^((i+1)%%numCircles))+1] <- ( degrees[2^i+1] + degrees[2^((i+1)%%numCircles)+1])/2 } } } for(i in 1:2^numCircles) { n<-paste(baseOf((i-1),2,numCircles),collapse="") v<-data[n,1] d<-degrees[i] if (1 == length(d) && is.na(d)) { if (v>0) warning("Not shown: ",n," contains ",v,"\n") } else { l<-distFromZero[i] x<-sin(d)*l+0.5*h y<-cos(d)*l+0.5*h #cat("i=",i," x=",x," y=",y," label=",n,"\n") l<-v if (showSetLogicLabel) l<-paste(n,"\n",v,sep="") text(label=l,x=x,y=y) } } } else if ( (4 == numCircles && !simplify) || numCircles <= 5 ) { # Function to turn and move ellipses/circles relocate_elp <- function(e, alpha, x, y){ phi=(alpha/180)*pi; xr=e[,1]*cos(phi)+e[,2]*sin(phi) yr=-e[,1]*sin(phi)+e[,2]*cos(phi) xr=x+xr; yr=y+yr; return(cbind(xr, yr)) } lab<-function (identifier, data, showLabel=showSetLogicLabel) { r<-data[identifier,1] if (showLabel) { return(paste(identifier,r,sep="\n")) } else { return(r) } } if (4 == numCircles) { elps=cbind(162*cos(seq(0,2*pi,len=1000)), 108*sin(seq(0,2*pi,len=1000))); #plot(c(0, 400), c(0, 400), type="n", axes=F, ylab="", xlab=""); polygon(relocate_elp(elps, 45,130,170)); polygon(relocate_elp(elps, 45,200,200)); polygon(relocate_elp(elps,135,200,200)); polygon(relocate_elp(elps,135,270,170)); text( 35, 315, data.colnames[1],cex=1.5) text(138, 347, data.colnames[2],cex=1.5) text(262, 347, data.colnames[3],cex=1.5) text(365, 315, data.colnames[4],cex=1.5) elps <- cbind(130*cos(seq(0,2*pi,len=1000)), 80*sin(seq(0,2*pi,len=1000))) text( 35, 250, lab("1000",data)); text(140, 315, lab("0100",data)); text(260, 315, lab("0010",data)); text(365, 250, lab("0001",data)); text( 90, 280, lab("1100",data), cex=small) text( 95, 110, lab("1010",data) ) text(200, 50, lab("1001",data), cex=small) text(200, 290, lab("0110",data)) text(300, 110, lab("0101",data)) text(310, 280, lab("0011",data), cex=small) text(130, 230, lab("1110",data)) text(245, 75, lab("1101",data),cex=small) text(155, 75, lab("1011",data),cex=small) text(270, 230, lab("0111",data)) text(200,150,lab("1111",data)) } else if (5 == numCircles) { elps <- cbind(150*cos(seq(0,2*pi,len=1000)), 60*sin(seq(0,2*pi,len=1000))) polygon(relocate_elp(elps, 90,200, 250)) polygon(relocate_elp(elps, 162,250, 220)) polygon(relocate_elp(elps, 234,250, 150)) polygon(relocate_elp(elps, 306,180, 125)) polygon(relocate_elp(elps, 378,145, 200)) text( 20, 295, data.colnames[1],cex=1.5) text(140, 380, data.colnames[2],cex=1.5) text(350, 318, data.colnames[3],cex=1.5) text(350, 2, data.colnames[4],cex=1.5) text( 50, 10, data.colnames[5],cex=1.5) text( 61, 228, lab("10000",data)); text(194, 329, lab("01000",data)); text(321, 245, lab("00100",data)); text(290, 81, lab("00010",data)); text(132, 69, lab("00001",data)); text(146, 250, lab("11000",data), cex=small) text(123, 188, lab("10100",data), cex=small) text(275, 152, lab("10010",data), cex=small) text(137, 146, lab("10001",data), cex=small) text(243, 268, lab("01100",data), cex=small) text(175, 267, lab("01010",data), cex=small) text(187, 117, lab("01001",data), cex=small) text(286, 188, lab("00110",data), cex=small) text(267, 235, lab("00101",data), cex=small) text(228, 105, lab("00011",data), cex=small) text(148, 210, lab("11100",data),cex=small) text(159, 253, lab("11010",data),cex=small) text(171, 141, lab("11001",data),cex=small) text(281, 175, lab("10110",data),cex=small) text(143, 163, lab("10101",data),cex=small) text(252, 145, lab("10011",data),cex=small) text(205, 255, lab("01110",data),cex=small) text(254, 243, lab("01101",data),cex=small) text(211, 118, lab("01011",data),cex=small) text(267, 211, lab("00111",data),cex=small) text(170, 231,lab("11110",data),cex=small) text(158, 169,lab("11101",data),cex=small) text(212, 139,lab("11011",data),cex=small) text(263, 180,lab("10111",data),cex=small) text(239, 232,lab("01111",data),cex=small) text(204,190,lab("11111",data)) } } else { stop(paste("Venn diagrams for ",numCircles," dimensions are not yet supported.\n")) } } gplots/R/boxplot2.R0000644000176200001440000000240712533376770013677 0ustar liggesusers# $Id: boxplot2.R 2052 2015-06-02 19:03:20Z warnes $ boxplot.n <- function( ..., top=FALSE, shrink=1.0, textcolor=NULL ) { .Defunct("boxplot2", package="gplots") } boxplot2 <- function( ..., top=FALSE, shrink=1.0, textcolor=NULL ) { boxcall <- match.call() # get call boxcall$top <- boxcall$shrink <- boxcall$textcolor <- NULL boxcall[[1]] <- as.name("boxplot") if(is.R()) { box <- eval(boxcall, parent.frame()) mids <- 1:length(box$n) } else { mids <- eval(boxcall, parent.frame()) boxcall$plot <- FALSE box <- eval(boxcall, parent.frame()) } if(top) { where <- par("usr")[4] adj <- c(0.5,1) } else { where <- par("usr")[3] adj <- c(0.5,0) } tcex <- par("cex") par(cex=shrink*tcex) if(is.R()) text( x=mids, y=where, labels=paste("n=",box$n,sep=""), adj=adj, col=textcolor) else { if( is.null(textcolor) ) textcolor <- 1 space <- ifelse(top, -1, 1) * par("1em")[2] / 2 text( x=mids, y=where + space, labels=paste("n=",box$n,sep=""), adj=adj[1], col=textcolor) } par(cex=tcex) invisible(box) } gplots/R/lowess.R0000644000176200001440000000342312675270660013437 0ustar liggesusers# make stats::lowess into a generic base-function lowess.default <- function (x, y = NULL, f = 2/3, iter = 3L, delta = 0.01 * diff(range(x)), ...) { m <- match.call() m[[1L]] <- quote(stats::lowess) retval <- eval(m, envir=parent.frame()) class(retval) <- "lowess" retval$call <- match.call() retval } lowess <- function(x,...) UseMethod("lowess") "lowess.formula" <- function (formula, data = parent.frame(), ..., subset, f=2/3, iter=3, delta=.01*diff(range(mf[-response])) ) { if (missing(formula) || (length(formula) != 3)) stop("formula missing or incorrect") m <- match.call(expand.dots = FALSE) eframe <- parent.frame() md <- eval(m$data, eframe) if (is.matrix(md)) m$data <- md <- as.data.frame(data) dots <- lapply(m$..., eval, md, eframe) nmdots <- names(dots) m$... <- m$f <- m$iter <- m$delta <- NULL subset.expr <- m$subset m$subset <- NULL m <- as.list(m) m[[1L]] <- stats::model.frame.default m <- as.call(c(m, list(na.action = NULL))) mf <- eval(m, eframe) if (!missing(subset)) { s <- eval(subset.expr, data, eframe) l <- nrow(mf) dosub <- function(x) if (length(x) == l) x[s] else x dots <- lapply(dots, dosub) mf <- mf[s, ] } mf <- na.omit(mf) response <- attr(attr(mf, "terms"), "response" ) retval <- stats::lowess(mf[[-response]], mf[[response]], f=f, iter=iter, delta=delta) class(retval) <- "lowess" retval$call <- match.call() retval } gplots/R/overplot.R0000644000176200001440000001170512516260671013772 0ustar liggesusers# $Id: overplot.R 1947 2015-04-23 21:18:42Z warnes $ panel.overplot <- function(formula, data, subset, col, lty, ...) { m <- match.call() m[[1]] <- as.name("plot") eval(m, parent.frame() ) m[[1]] <- as.name("lowess") tmp <- eval(m, parent.frame() ) lines( tmp, col=col, lwd=2, lty=lty ) } overplot <- function (formula, data = parent.frame(), same.scale=FALSE, xlab, ylab, xlim, ylim, min.y, max.y, log='', panel='panel.overplot', subset, plot=TRUE, groups, main, f=2/3, ... ) { ### # check that the formula had the right form ### if( length(formula)!=3 || length(formula[[3]]) != 3 || formula[[3]][[1]] != as.name("|") ) stop("Formula must be of the form y ~ x1 | x2") if(!missing(subset)) { flag <- eval(substitute(subset), envir=data) data <- data[flag,] } ### # Get the actual formula values ### cond <- eval(formula[[3]][[3]], envir=data, parent.frame()) x <- eval(formula[[3]][[2]], envir=data, parent.frame()) y <- eval(formula[[2]], envir=data, parent.frame()) #print(data.frame(cond,x,y)) y.all.min <- min(y, na.rm=TRUE) y.all.max <- max(y, na.rm=TRUE) x.all.min <- min(x, na.rm=TRUE) x.all.max <- max(x, na.rm=TRUE) if (length(cond) == 0) { cond <- list(as.factor(rep(1, length(x)))) } if (!is.factor(cond)) { cond <- factor(cond) } ### # create a new call to the requested function ### mycall <- match.call(expand.dots=FALSE) mycall$panel <- mycall$plot <- mycall$groups <- mycall$same.scale <- NULL mycall$min.y <- mycall$max.y <- NULL mycall$data <- data # remove condition from formula mycall$formula[3] <- formula[[3]][2] # function name if(is.character(panel)) panel <- as.name(panel) else panel <- deparse(substitute(panel)) mycall[[1]] <- as.name(panel) # ylim if(same.scale) { if(missing(ylim)) mycall$ylim <- range(y[y>0],na.rm=TRUE) } # xlim is always the same for all graphs if(missing(xlim)) if(log %in% c("x","xy")) mycall$xlim <- range(x[x>0],na.rm=TRUE) else mycall$xlim <- range(x,na.rm=TRUE) ### # Only plot groups with non-na entries ## tmp <- na.omit(data.frame(x,y,cond)) leveln <- sapply( split(tmp, tmp$cond), nrow ) if(missing(groups)) groups <- names(leveln) ngroups <- length(groups) if(!missing(min.y) && length(min.y==1)) min.y <- rep(min.y, length=ngroups) if(!missing(max.y) && length(max.y==1)) max.y <- rep(max.y, length=ngroups) ### # Set up the plot regions ### oldpar <- par()['mar'] on.exit(par(oldpar)) par(mar=par("mar") +c(0,ngroups*2.5,0,0)) ### # Ok. Now iterate over groups ## i <- 1 for(level in groups) { if(i>1) { par(new=TRUE) } mycall$subset <- (cond==level) mycall$ylab <- '' mycall$xlab <- '' mycall$xaxt = 'n' mycall$yaxt = 'n' mycall$pch = i mycall$col = i mycall$lty = i tmp.y <- y[mycall$subset & cond==level] ## If nothing to plot, skip to next level if(!any(is.finite(tmp.y))) next min.tmp.y <- min(tmp.y, na.rm=TRUE) max.tmp.y <- max(tmp.y, na.rm=TRUE) if( !missing(min.y) || !missing(max.y) ) { if(!missing(min.y) && !missing(max.y) ) { mycall$ylim <- c(min.y[i], max.y[i]) } else if(missing(min.y) && !missing(max.y)) { if(same.scale) mycall$ylim <- c(y.all.min, max.y[i]) else mycall$ylim <- c(min.tmp.y, max.y[i]) } else # !missing(min.y) && missing(max.y) { if(same.scale) mycall$ylim <- c(min.y[i], y.all.max) else mycall$ylim <- c(min.y[i], max.tmp.y) } } if(plot) { status <- try( eval(mycall, parent.frame()) ) if('try-error' %in% class(status)) break; } usr <- par("usr") axis(side=2,line=2.5*(i-1),lty=i,col=i,lwd=2) title(ylab=level, line=2.5*(i-1)) if(i == 1) axis(side=1) i <- i+1 } if(missing(xlab)) xlab <- as.character(formula[[3]][[2]]) if(missing(ylab)) ylab <- as.character(formula[[2]]) if(missing(main)) main <- paste("plot of ", xlab, "vs.", ylab, "by", as.character(formula[[3]][[3]])) if(i>1) { title(main=main,xlab=xlab) title(ylab=ylab, line=2.5*(i-1)) } par(oldpar) invisible( split(data.frame(x,y),cond) ) } gplots/R/lmplot2.R0000644000176200001440000001330312675263172013512 0ustar liggesusersplot.lm2 <- function( x, which = 1:5, caption = c("Residuals vs Fitted", "Normal Q-Q plot", "Scale-Location plot", "Cook's distance plot"), panel = panel.smooth, sub.caption = deparse(x$call), main = "", ask, ..., id.n = 3, labels.id = names(residuals(x)), cex.id = 0.75, band=TRUE, rug=TRUE, width=1/10, max.n=5000 ) { .Defunct("lmplot2", "gplots") } lmplot2 <- function( x, which = 1:5, caption = c("Residuals vs Fitted", "Normal Q-Q plot", "Scale-Location plot", "Cook's distance plot"), panel = panel.smooth, sub.caption = deparse(x$call), main = "", ask = interactive() && nb.fig < length(which) && .Device != "postscript", ..., id.n = 3, labels.id = names(residuals(x)), cex.id = 0.75, band=TRUE, rug=TRUE, width=1/10, max.n=5000 ) { if (!inherits(x, "lm")) stop("Use only with 'lm' objects") show <- rep(FALSE, 5) if(!is.numeric(which) || any(which < 1) || any(which > 5)) stop("`which' must be in 1:5") show[which] <- TRUE r <- residuals(x) n <- length(r) if(inherits(x,"glm")) yh <- predict(x) # != fitted() for glm else yh <- fitted(x) if (any(show[2:4])) s <- if(inherits(x, "rlm")) x$s else sqrt(deviance(x)/df.residual(x)) if (any(show[2:3])) { ylab23 <- if(inherits(x, "glm")) "Std. deviance resid." else "Standardized residuals" hii <- lm.influence(x)$hat w <- weights(x) # r.w := weighted.residuals(x): r.w <- if(is.null(w)) r else (sqrt(w)*r)[w!=0] rs <- r.w/(s * sqrt(1 - hii)) } if (any(show[c(1,3)])) l.fit <- if(inherits(x,"glm")) "Predicted values" else "Fitted values" if (is.null(id.n)) id.n <- 0 else { id.n <- as.integer(id.n) if(id.n < 0 || id.n > n) stop(paste("`id.n' must be in { 1,..,",n,"}")) } if(id.n > 0) { if(is.null(labels.id)) labels.id <- paste(1:n) iid <- 1:id.n show.r <- order(-abs(r))[iid] if(any(show[2:3])) show.rs <- order(-abs(rs))[iid] text.id <- function(x,y, ind, adj.x = FALSE) text(x - if(adj.x) strwidth(" ")*cex.id else 0, y, labels.id[ind], cex = cex.id, xpd = TRUE, adj = if(adj.x) 1) } nb.fig <- prod(par("mfcol")) one.fig <- prod(par("mfcol")) == 1 if (ask) { op <- par(ask = TRUE) on.exit(par(op)) } ##---------- Do the individual plots : ---------- if (show[1]) { ylim <- range(r) if(id.n > 0) ylim <- ylim + c(-1,1)* 0.08 * diff(ylim) plot(yh, r, xlab = l.fit, ylab = "Residuals", main = main, ylim = ylim, type = "n", ...) panel(yh, r, ...) if(rug) rug(yh) ## GRW 2001-06-08 if(band) bandplot(yh,r,add=TRUE,width=width) ## GRW 2001-06-08 if (one.fig) title(sub = sub.caption, ...) mtext(caption[1], 3, 0.25) if(id.n > 0) { y.id <- r[show.r] y.id[y.id < 0] <- y.id[y.id < 0] - strheight(" ")/3 text.id(yh[show.r], y.id, show.r, adj.x = TRUE) } abline(h = 0, lty = 3, col = "gray") } if (show[2]) { ylim <- range(rs) ylim[2] <- ylim[2] + diff(ylim) * 0.075 qq <- qqnorm(rs, main = main, ylab = ylab23, ylim = ylim, ...) qqline(rs) if (one.fig) title(sub = sub.caption, ...) mtext(caption[2], 3, 0.25) if(id.n > 0) text.id(qq$x[show.rs], qq$y[show.rs], show.rs, adj.x = TRUE) } if (show[3]) { sqrtabsr <- sqrt(abs(rs)) ylim <- c(0, max(sqrtabsr)) yl <- as.expression(substitute(sqrt(abs(YL)), list(YL=as.name(ylab23)))) yhn0 <- if(is.null(w)) yh else yh[w!=0] plot(yhn0, sqrtabsr, xlab = l.fit, ylab = yl, main = main, ylim = ylim, type = "n", ...) panel(yhn0, sqrtabsr, ...) abline(h=mean(sqrtabsr),lty = 3, col = "gray") if(rug) rug(yh) ## GRW 2001-06-08 if(band) bandplot(yhn0,sqrtabsr,add=TRUE) ## GRW 2001-06-08 if (one.fig) title(sub = sub.caption, ...) mtext(caption[3], 3, 0.25) if(id.n > 0) text.id(yhn0[show.rs], sqrtabsr[show.rs], show.rs, adj.x = TRUE) } if (show[4]) { cook <- cooks.distance(x, sd=s) if(id.n > 0) { show.r <- order(-cook)[iid]# index of largest `id.n' ones ymx <- cook[show.r[1]] * 1.075 } else ymx <- max(cook) plot(cook, type = "h", ylim = c(0, ymx), main = main, xlab = "Obs. number", ylab = "Cook's distance", ...) if (one.fig) title(sub = sub.caption, ...) mtext(caption[4], 3, 0.25) if(id.n > 0) text.id(show.r, cook[show.r] + 0.4*cex.id * strheight(" "), show.r) } if (show[5]) { ## plot residuals against each predictor ## data <- model.frame(x) for( i in 1:ncol(data) ) { test <- try( { plot.default( x=data[,i], y=r, xlab=names(data)[i], ylab="Residuals", type="n") panel( data[,i], r, ... ) if(rug) rug(data[,i]) if(band) bandplot(data[,i],r,add=TRUE) abline(h=0,lty = 3, col = "gray") } ) } } if (!one.fig && par("oma")[3] >= 1) mtext(sub.caption, outer = TRUE, cex = 1.25) invisible() } gplots/R/venn.R0000644000176200001440000001303212674776565013104 0ustar liggesusers# This code plots Venn Diagrams for up to 5 sets. The # function getVennCounts is passed a list of vectors. # This is transformed into a table indicating the # number of intersections for each intersection. This table # is generated for any number of sets. # The function drawVennDiagram plots circles (up to three # sets) or ellipses (4 and 5 sets) to depict the sets. # The sum of values placed is the number of entries of # each set. # Function to determine values of a venn diagram # It works for an arbitrary large set of input sets. # getVennCounts <- function(l, universe, verbose=F, ...) UseMethod("getVennCounts") getVennCounts.data.frame <- function(l, universe=NA, verbose=F, ...) { if (verbose) cat("Interpreting data as data.frame.\n") if( !all(unique(unlist(l)) %in% c(0,1)) ) stop("Only indicator columns permitted") l <- lapply( l, function(x) which(as.logical(x))) getVennCounts.list(l, universe=universe, verbose=verbose) } getVennCounts.matrix <- function(l, universe=NA, verbose=F, ...) { getVennCounts.data.frame(as.data.frame(l), universe=NA, verbose=F, ...) } # l offers a list of arrays, their values are to # be tested for the size of their intersects. getVennCounts.list<-function(l, universe=NA, verbose=F, intersections=TRUE) { if (verbose) cat("Interpreting data as list.\n") numSets<-length(l) result.table<-NULL result.table.names<-NULL memberList <- list() # Iteration over all possible intersections involving all sets # or the complement (negation) of those sets. for (i in 0:(-1 + 2^numSets)) { # i2 is a binary representation of that number i2<-baseOf(i,2,numSets) # some debug output #print(paste(i,":",paste(i2,collapse="",sep=""))) # p.pos determines the position in number # which is also the set that is inspected sel<-universe # positive selection first for (p.pos in which(1 == i2) ) { current.set<-l[[p.pos]] if (!is.null(dim(current.set))) { # circumventing strange experiences with data.frames warning(paste("List element [[",p.pos,"]] has dimensions, but all elements are considered.\n",sep="")) current.set<-as.character(as.matrix(current.set)) dim(current.set)<-NULL } #print(paste("set ",p.pos,", val=1: ",paste(current.set,collapse=","))) if (is.null(sel)) { #print("Sel is null") } else if (1 == length(sel) && is.na(sel)) { sel<-current.set } else { w<-which(sel %in% current.set) if (length(w)>0) { sel<-sel[w] } else { sel<-NULL } } } # something should be in sel now, otherwise # the number will be 0 # negative selection for (p.pos in which(0 == i2) ) { if (is.null(sel) || ( 1 == length(sel) && is.na(sel))) { # The complement is not known, hence no checks done } else { current.set<-l[[p.pos]] if (!is.null(dim(current.set))) { warning(paste("List element [[",p.pos,"]] has dimensions, but all elements are considered.\n",sep="")) current.set<-as.character(as.matrix(current.set)) dim(current.set)<-NULL } w<-which( ! sel %in% current.set) #print(paste("set ",p.pos,", val=1: ",paste(current.set,collapse=","))) if (length(w)>0) { sel<-sel[w] } else { sel<-NULL } } } #print(paste("sel:",paste(sel,collapse=","))) if(is.null(sel) || (1 == length(sel) && is.na(sel))) { sel<-NULL } r.name<-paste(i2,collapse="") if (intersections) { memberList[[r.name]] <- sel } r<-length(sel) result.row<-c(r,i2) dim(result.row)<-c(1,length(result.row)) rownames(result.row)<-c(r.name) #print(paste("Adding ",r.name)) if (is.null(result.table)) { result.table<-result.row } else { result.table<-rbind(result.table,result.row) } #if (is.null(result.table)) { # result.table<-r # result.table.names<-r.name #} #else { # result.table<-c(result.table,r) # result.table.names<-c(result.table.names,r.name) #} } #names(result.table)<-result.table.names if (is.null(names(l))) { colnames(result.table)<-c("num",LETTERS[1:numSets]) } else{ colnames(result.table)<-c("num",names(l)) } if (intersections) { attr(result.table,"intersections") <- memberList } class(result.table) <- "venn" return(result.table) } #print(getVennCounts(list(A,B,C,D))) #print(getVennCounts(list(a=A,b=B,c=C,d=D))) venn <- function(data, universe=NA, small=0.7, showSetLogicLabel=FALSE, simplify=FALSE, show.plot=TRUE, intersections=TRUE, names, ... ) { counts <- getVennCounts(data, universe=universe, intersections=intersections ) if(show.plot) drawVennDiagram(data=counts, small=small, showSetLogicLabel=showSetLogicLabel, simplify=simplify, ... ) # use VennMemberNames to properly label and order the 'intersection' table if(intersections) attr(counts, "intersections") <- vennMembers(l=data, universe=universe, names=names ) invisible(counts) } gplots/R/smartlegend.R0000644000176200001440000000036212674770005014424 0ustar liggesusers# $Id: smartlegend.R 2089 2016-03-24 13:47:48Z warnes $ smartlegend <- function(x=c("left","center","right"), y=c("top","center","bottom"), ..., inset=0.05 ) .Defunct('legend', 'gplots') gplots/R/bandplot.R0000644000176200001440000000735212471456250013726 0ustar liggesusers# $Id: bandplot.R 1906 2014-12-02 01:46:35Z warnes $ bandplot <- function(x, ...) UseMethod("bandplot") bandplot.default <- function(x, y, ..., add=FALSE, sd=c(-2:2), sd.col=c("magenta","blue","red", "blue","magenta"), sd.lwd=c(2,2,3,2,2), sd.lty=c(2,1,1,1,2), method="frac", width=1/5, n=50 ) { if(length(sd.col)1) xnames <- xnames[-1] } else xnames <- names(x) if(is.null(names(y))) { ynames <- as.character(substitute(y)) if(length(ynames)>1) ynames <- ynames[-1] } else ynames <- names(y) #### ## Handle arguments #### scale.method <- match.arg(scale.method) scale.range <- match.arg(scale.range) if( scale.method=="absolute" && any(z < 0, na.rm=TRUE ) ) warning("z value(s) below zero detected.", " No balloons will be displayed for these cells.") if(missing(main)) { if(scale.method=="volume") main <- paste("Balloon Plot for ", paste(xnames, collapse=", "), " by ", paste(ynames, collapse=", "), ".\nArea is proportional to ", zlab, ".", sep='') else main <- paste("Balloon Plot for ", paste(ynames, collapse=", "), " by ", paste(ynames, collapse=", "), ".\nDiameter is proportional to ", zlab, ".", sep='') } if(length(dotcolor) maxbar, maxbar, ui) if(err=="y") { if(is.null(ylim)) ylim <- range(c(y, ui, li), na.rm=TRUE) if(is.null(xlim) && !is.R() ) xlim <- range( x, na.rm=TRUE) } else if(err=="x") { if(is.null(xlim)) xlim <- range(c(x, ui, li), na.rm=TRUE) if(is.null(ylim) && !is.R() ) ylim <- range( x, na.rm=TRUE) } if(!add) { if(invalid(labels) || any(labels==FALSE) ) plot(x, y, ylim = ylim, xlim=xlim, col=col, xlab=xlab, ylab=ylab, type="n", ...) else { plot(x, y, ylim = ylim, xlim=xlim, col=col, type="n", xlab=xlab, ylab=ylab, ...) text(x, y, label=labels, col=col, ... ) } } if(err=="y") { if(gap!=FALSE) gap <- strheight("O") * gap smidge <- par("fin")[1] * sfrac # draw upper bar if(!is.null(li)) arrows(x , li, x, pmax(y-gap,li), col=barcol, lwd=lwd, lty=lty, angle=90, length=smidge, code=1) # draw lower bar if(!is.null(ui)) arrows(x , ui, x, pmin(y+gap,ui), col=barcol, lwd=lwd, lty=lty, angle=90, length=smidge, code=1) } else { if(gap!=FALSE) gap <- strwidth("O") * gap smidge <- par("fin")[2] * sfrac # draw left bar if(!is.null(li)) arrows(li, y, pmax(x-gap,li), y, col=barcol, lwd=lwd, lty=lty, angle=90, length=smidge, code=1) if(!is.null(ui)) arrows(ui, y, pmin(x+gap,ui), y, col=barcol, lwd=lwd, lty=lty, angle=90, length=smidge, code=1) } ## _now_ draw the points (to avoid having lines drawn 'through' points) points(x, y, col = col, lwd = lwd, bg = pt.bg, type = type, ...) invisible(list(x = x, y = y)) } gplots/R/plot.lowess.R0000644000176200001440000000123412676546007014414 0ustar liggesusersplotLowess <- function (formula, data=parent.frame(), ..., subset=parent.frame(), col.lowess="red", lty.lowess=2 ) { m <- match.call(expand.dots=TRUE) m[[1]] <- as.name("plot") eframe <- parent.frame() eval(m, eframe) m[[1]] <- as.name("lowess") lw <- eval(m, eframe) lines(lw, col=col.lowess, lty=lty.lowess) grid() invisible(lw) } plot.lowess <- function(x, y, ..., col.lowess="red", lty.lowess=2) { m <- x$call m[[1]] <- quote(plot) m <- as.call(append(as.list(m), list(...))) eval(m, envir = parent.frame()) lines(x$x, x$y, col=col.lowess, lty=lty.lowess) grid() invisible(x) } gplots/R/rich.colors.R0000644000176200001440000000270012471456250014340 0ustar liggesusersrich.colors <- function(n, palette="temperature", alpha=1, rgb=FALSE, plot=FALSE) { if(n <= 0) return(character(0)) palette <- match.arg(palette, c("temperature","blues")) x <- seq(0, 1, length=n) if(palette == "temperature") { r <- 1 / (1+exp(20-35*x)) g <- pmin(pmax(0,-0.8+6*x-5*x^2), 1) b <- dnorm(x,0.25,0.15) / max(dnorm(x,0.25,0.15)) } else { r <- 0.6*x + 0.4*x^2 g <- 1.5*x - 0.5*x^2 b <- 0.36 + 2.4*x - 2.0*x^2 b[x>0.4] <- 1 } rgb.m <- matrix(c(r,g,b), ncol=3, dimnames=list(NULL,c("red","green","blue"))) col <- mapply(rgb, r, g, b, alpha) if(rgb) attr(col, "rgb") <- cbind(rgb.m, alpha) if(plot) { opar <- par("fig", "plt") par(fig=c(0,1,0,0.7), plt=c(0.15,0.9,0.2,0.95)) plot(NA, xlim=c(-0.01,1.01), ylim=c(-0.01,1.01), xlab="Spectrum", ylab="", xaxs="i", yaxs="i", axes=FALSE) title(ylab="Value", mgp=c(3.5,0,0)) matlines(x, rgb.m, col=colnames(rgb.m), lty=1, lwd=3) matpoints(x, rgb.m, col=colnames(rgb.m), pch=16) axis(1, at=0:1) axis(2, at=0:1, las=1) par(fig=c(0,1,0.75,0.9), plt=c(0.08,0.97,0,1), new=TRUE) midpoints <- barplot(rep(1,n), col=col, border=FALSE, space=FALSE, axes=FALSE) axis(1, at=midpoints, labels=1:n, lty=0, cex.axis=0.6) par(opar) } return(col) } gplots/R/reorder.R0000644000176200001440000000226313003720415013546 0ustar liggesusersreorder.factor <- function(x, X, FUN, ..., order=is.ordered(x), new.order, sort=mixedsort) { constructor <- if (order) ordered else factor if(!missing(X) || !missing(FUN)) { if(missing(FUN)) FUN <- 'mean' ## I would prefer to call stats::reorder.default directly, ## but it exported from stats, so the relevant code is ## replicated here: ## --> scores <- tapply(X = X, INDEX = x, FUN = FUN, ...) levels <- names(base::sort(scores, na.last = TRUE)) if(order) ans <- ordered(x, levels=levels) else ans <- factor(x, levels=levels) attr(ans, "scores") <- scores ## <-- return(ans) } else if (!missing(new.order)) { if (is.numeric(new.order)) new.order <- levels(x)[new.order] else new.order <- new.order } else new.order <- sort(levels(x)) constructor(x, levels=new.order) } gplots/R/space.R0000644000176200001440000000265412471456250013216 0ustar liggesusers# $Id: space.R 625 2005-06-09 14:20:30Z nj7w $ # When there are two or more points with the same (x,y) value (or # within x+-s[1] and x+-s[2]), space these out in the y direction so # that the points are separated by at least distance s. space <- function(x,y,s=1/50, na.rm=TRUE, direction="x") { if(direction!='x') { tmp <- y y <- x x <- tmp } if(na.rm) { ind <- is.na(x) | is.na(y) x <- x[!ind] y <- y[!ind] } if (length(s)==1) s <- c(s,s) spacing.x <- (max(x) - min(x))*s[1] spacing.y <- (max(y) - min(y))*s[2] within <- function(x,y,delta) { abs(x-y) < delta } # sort x,y so we can do the work ord <- order(x,y) undo <- order(ord) x <- x[ord] y <- y[ord] startsame <- 1 same.x <- x[1] same.y <- y[1] for( i in 1:length(x) ) { if(i>1 && within(x[i],same.x,spacing.x) && within(y[i],same.y,spacing.y) ) { if(x[startsame] == same.x ) x[startsame] <- x[startsame] cumrun <- i - startsame x[i] <- x[i] + (-1)^(cumrun+1) * floor((cumrun+1) /2) * spacing.x } else { startsame <- i same.x <- x[i] same.y <- y[i] } } if(direction!='x') { tmp <- y y <- x x <- tmp } return( list(x=x[undo], y=y[undo]) ) } gplots/R/print.ci2d.R0000644000176200001440000000202012471456251014063 0ustar liggesusers## $Id$ print.ci2d <- function(x, ...) { cat("\n") cat("----------------------------\n") cat("2-D Confidence Region Object\n") cat("----------------------------\n") cat("\n") cat("Call: ") print(x$call) cat("\n") cat("Number of data points: ", x$nobs, "\n") cat("Number of grid points: ", length(x$x), "x", length(x$y), "\n") cat("Number of confidence regions:", length(x$contours), "\n") cat("\n") tab <- data.frame( "Region"=1:length(x$contours), "CI Level"=as.numeric(names(x$contours)), "X Min"=sapply(x$contours, function(XX) min(XX$x)), "X Max"=sapply(x$contours, function(XX) max(XX$x)), "Y Min"=sapply(x$contours, function(XX) min(XX$y)), "Y Max"=sapply(x$contours, function(XX) max(XX$y)) ) print(tab, row.names=FALSE, ...) x$summary <- tab class(x) <- c("ci2d.summary", "ci2d") return(x) } gplots/R/barplot2.R0000644000176200001440000003123512471456250013645 0ustar liggesusers# Revision 2.1 2005/06/06 # - Modified default behavior with 0's and NA's in # 'height' so that these values are not plotted. # - Warning messages added in the case of the above. # Revision 2.0 2005/04/27 # - Added panel.first and panel.last arguments # - As per R 2.0.0, the default barplot() method by default uses a # gamma-corrected grey palette (rather than the heat color # palette) for coloring its output when given a matrix. barplot2 <- function(height, ...) UseMethod("barplot2") barplot2.default <- function( height, width = 1, space = NULL, names.arg = NULL, legend.text = NULL, beside = FALSE, horiz = FALSE, density = NULL, angle = 45, col = NULL, prcol = NULL, border = par("fg"), main = NULL, sub = NULL, xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, xpd = TRUE, log = "", axes = TRUE, axisnames = TRUE, cex.axis = par("cex.axis"), cex.names = par("cex.axis"), inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0, plot.ci = FALSE, ci.l = NULL, ci.u = NULL, ci.color = "black", ci.lty = "solid", ci.lwd = 1, ci.width = 0.5, plot.grid = FALSE, grid.inc = NULL, grid.lty = "dotted", grid.lwd = 1, grid.col = "black", add = FALSE, panel.first = NULL, panel.last = NULL, ...) { if (!missing(inside)) .NotYetUsed("inside", error = FALSE)# -> help(.) if (missing(space)) space <- if (is.matrix(height) && beside) c(0, 1) else 0.2 space <- space * mean(width) if (plot && axisnames && missing(names.arg)) names.arg <- if(is.matrix(height)) colnames(height) else names(height) if (is.vector(height) || (is.array(height) && (length(dim(height)) == 1))) { ## Treat vectors and 1-d arrays the same. height <- cbind(height) beside <- TRUE ## The above may look strange, but in particular makes color ## specs work as most likely expected by the users. if(is.null(col)) col <- "grey" } else if (is.matrix(height)) { ## In the matrix case, we use " heat colors" by default. if(is.null(col)) col <- heat.colors(nrow(height)) } else stop(paste(sQuote("height"), "must be a vector or a matrix")) if(is.logical(legend.text)) legend.text <- if(legend.text && is.matrix(height)) rownames(height) # Check for log scales logx <- FALSE logy <- FALSE if (log != "") { if (any(grep("x", log))) logx <- TRUE if (any(grep("y", log))) logy <- TRUE } # Cannot "hatch" with rect() when log scales used if ((logx || logy) && !is.null(density)) stop("Cannot use shading lines in bars when log scale is used") NR <- nrow(height) NC <- ncol(height) if (beside) { if (length(space) == 2) space <- rep.int(c(space[2], rep.int(space[1], NR - 1)), NC) width <- rep(width, length.out = NR) } else width <- rep(width, length.out = NC) offset <- rep(as.vector(offset), length.out = length(width)) delta <- width / 2 w.r <- cumsum(space + width) w.m <- w.r - delta w.l <- w.m - delta #if graphic will be stacked bars, do not plot ci if (!beside && (NR > 1) && plot.ci) plot.ci = FALSE # error check ci arguments if (plot && plot.ci) { if ((missing(ci.l)) || (missing(ci.u))) stop("confidence interval values are missing") if (is.vector(ci.l) || (is.array(ci.l) && (length(dim(ci.l)) == 1))) ci.l <- cbind(ci.l) else if (!is.matrix(ci.l)) stop(paste(sQuote("ci.l"), "must be a vector or a matrix")) if (is.vector(ci.u) || (is.array(ci.u) && (length(dim(ci.u)) == 1))) ci.u <- cbind(ci.u) else if (!is.matrix(ci.u)) stop(paste(sQuote("ci.u"), "must be a vector or a matrix")) if (any(dim(height) != dim(ci.u))) stop(paste(sQuote("height"), "and", sQuote("ci.u"), "must have the same dimensions.")) else if (any(dim(height) != dim(ci.l))) stop(paste(sQuote("height"), "and", sQuote("ci.l"), "must have the same dimensions.")) } # check height + offset/ci.l if using log scale to prevent log(<=0) error # adjust appropriate ranges and bar base values if ((logx && horiz) || (logy && !horiz)) { # Check for NA values and issue warning if required height.na <- sum(is.na(height)) if (height.na > 0) { warning(sprintf("%.0f values == NA in 'height' omitted from logarithmic plot", height.na), domain = NA) } # Check for 0 values and issue warning if required # _FOR NOW_ change 0's to NA's so that other calculations are not # affected. 0's and NA's affect plot output in the same way anyway, # except for stacked bars, so don't change those. height.lte0 <- sum(height <= 0, na.rm = TRUE) if (height.lte0 > 0) { warning(sprintf("%0.f values <=0 in 'height' omitted from logarithmic plot", height.lte0), domain = NA) # If NOT stacked bars, modify 'height' if (beside) height[height <= 0] <- NA } if (plot.ci && (min(ci.l) <= 0)) stop("log scale error: at least one lower c.i. value <= 0") if (logx && !is.null(xlim) && (xlim[1] <= 0)) stop("log scale error: 'xlim[1]' <= 0") if (logy && !is.null(ylim) && (ylim[1] <= 0)) stop("'log scale error: 'ylim[1]' <= 0") # arbitrary adjustment to display some of bar for min(height) since # 0 cannot be used with log scales. If plot.ci, also check ci.l if (plot.ci) { rectbase <- c(height[is.finite(height)], ci.l) rectbase <- min(0.9 * rectbase[rectbase > 0]) } else { rectbase <- height[is.finite(height)] rectbase <- min(0.9 * rectbase[rectbase > 0]) } # if axis limit is set to < above, adjust bar base value # to draw a full bar if (logy && !is.null(ylim) && !horiz) rectbase <- ylim[1] else if (logx && !is.null(xlim) && horiz) rectbase <- xlim[1] # if stacked bar, set up base/cumsum levels, adjusting for log scale if (!beside) height <- rbind(rectbase, apply(height, 2, cumsum)) # if plot.ci, be sure that appropriate axis limits are set to include range(ci) lim <- if (plot.ci) c(height, ci.l, ci.u) else height rangeadj <- c(0.9 * lim + offset, lim + offset) rangeadj <- rangeadj[rangeadj > 0] } else { # Use original bar base value rectbase <- 0 # if stacked bar, set up base/cumsum levels if (!beside) height <- rbind(rectbase, apply(height, 2, cumsum)) # if plot.ci, be sure that appropriate axis limits are set to include range(ci) lim <- if (plot.ci) c(height, ci.l, ci.u) else height # use original range adjustment factor rangeadj <- c(-0.01 * lim + offset, lim + offset) } # define xlim and ylim, adjusting for log-scale if needed if (horiz) { if (missing(xlim)) xlim <- range(rangeadj, na.rm=TRUE) if (missing(ylim)) ylim <- c(min(w.l), max(w.r)) } else { if (missing(xlim)) xlim <- c(min(w.l), max(w.r)) if (missing(ylim)) ylim <- range(rangeadj, na.rm=TRUE) } if (beside) w.m <- matrix(w.m, ncol = NC) if(plot) ##-------- Plotting : { opar <- if (horiz) par(xaxs = "i", xpd = xpd) else par(yaxs = "i", xpd = xpd) on.exit(par(opar)) # If add = FALSE open new plot window # else allow for adding new plot to existing window if (!add) { plot.new() plot.window(xlim, ylim, log = log, ...) } # Execute the panel.first expression. This will work here # even if 'add = TRUE' panel.first # Set plot region coordinates usr <- par("usr") # adjust par("usr") values if log scale(s) used if (logx) { usr[1] <- 10 ^ usr[1] usr[2] <- 10 ^ usr[2] } if (logy) { usr[3] <- 10 ^ usr[3] usr[4] <- 10 ^ usr[4] } # if prcol specified, set plot region color if (!missing(prcol)) rect(usr[1], usr[3], usr[2], usr[4], col = prcol) # if plot.grid, draw major y-axis lines if vertical or x axis if horizontal # R V1.6.0 provided axTicks() as an R equivalent of the C code for # CreateAtVector. Use this to determine default axis tick marks when log # scale used to be consistent when no grid is plotted. # Otherwise if grid.inc is specified, use pretty() if (plot.grid) { par(xpd = FALSE) if (is.null(grid.inc)) { if (horiz) { grid <- axTicks(1) abline(v = grid, lty = grid.lty, lwd = grid.lwd, col = grid.col) } else { grid <- axTicks(2) abline(h = grid, lty = grid.lty, lwd = grid.lwd, col = grid.col) } } else { if (horiz) { grid <- pretty(xlim, n = grid.inc) abline(v = grid, lty = grid.lty, lwd = grid.lwd, col = grid.col) } else { grid <- pretty(ylim, n = grid.inc) abline(h = grid, lty = grid.lty, lwd = grid.lwd, col = grid.col) } } par(xpd = xpd) } xyrect <- function(x1,y1, x2,y2, horizontal = TRUE, ...) { if(horizontal) rect(x1,y1, x2,y2, ...) else rect(y1,x1, y2,x2, ...) } if (beside) xyrect(rectbase + offset, w.l, c(height) + offset, w.r, horizontal=horiz, angle = angle, density = density, col = col, border = border) else { for (i in 1:NC) xyrect(height[1:NR, i] + offset[i], w.l[i], height[-1, i] + offset[i], w.r[i], horizontal=horiz, angle = angle, density = density, col = col, border = border) } # Execute the panel.last expression here panel.last if (plot.ci) { # CI plot width = barwidth / 2 half.ci.width = width * ci.width / 2 if (horiz) { segments(ci.l, w.m, ci.u, w.m, col = ci.color, lty = ci.lty, lwd = ci.lwd) segments(ci.l, w.m - half.ci.width, ci.l, w.m + half.ci.width, col = ci.color, lty = ci.lty, lwd = ci.lwd) segments(ci.u, w.m - half.ci.width, ci.u, w.m + half.ci.width, col = ci.color, lty = ci.lty, lwd = ci.lwd) } else { segments(w.m, ci.l, w.m, ci.u, col = ci.color, lty = ci.lty, lwd = ci.lwd) segments(w.m - half.ci.width, ci.l, w.m + half.ci.width, ci.l, col = ci.color, lty = ci.lty, lwd = ci.lwd) segments(w.m - half.ci.width, ci.u, w.m + half.ci.width, ci.u, col = ci.color, lty = ci.lty, lwd = ci.lwd) } } if (axisnames && !is.null(names.arg)) # specified or from {col}names { at.l <- if (length(names.arg) != length(w.m)) { if (length(names.arg) == NC) # i.e. beside (!) colMeans(w.m) else stop("incorrect number of names") } else w.m axis(if(horiz) 2 else 1, at = at.l, labels = names.arg, lty = axis.lty, cex.axis = cex.names, ...) } if(!is.null(legend.text)) { legend.col <- rep(col, length = length(legend.text)) if((horiz & beside) || (!horiz & !beside)) { legend.text <- rev(legend.text) legend.col <- rev(legend.col) density <- rev(density) angle <- rev(angle) } # adjust legend x and y values if log scaling in use if (logx) legx <- usr[2] - ((usr[2] - usr[1]) / 10) else legx <- usr[2] - xinch(0.1) if (logy) legy <- usr[4] - ((usr[4] - usr[3]) / 10) else legy <- usr[4] - yinch(0.1) legend(legx, legy, legend = legend.text, angle = angle, density = density, fill = legend.col, xjust = 1, yjust = 1) } title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...) # if axis is to be plotted, adjust for grid "at" values if (axes) { if(plot.grid) axis(if(horiz) 1 else 2, at = grid, cex.axis = cex.axis, ...) else axis(if(horiz) 1 else 2, cex.axis = cex.axis, ...) } invisible(w.m) } else w.m } gplots/R/vennMembers.R0000644000176200001440000000213612674776750014416 0ustar liggesusers# Extract intersections vennMembers <- function(l, universe=NA, names, ...) { venn_object <- getVennCounts(l, universe, intersections=TRUE, ...) map <- attr(venn_object, "intersections") if(missing(names)) names <- colnames(venn_object)[-1] if(is.matrix(l) || is.data.frame(l)) { ids <- rownames(l) retval <- list() for(i in names(map)) retval[[i]] <- ids[map[[i]]] } else if(is.list(l)) retval <- map flags <- do.call(rbind, strsplit(names(map), character(0), fixed=TRUE)) rownames(flags) <- names(map) colnames(flags) <- names nameList <- list() for(i in 1:nrow(flags)) nameList[[i]] <- ifelse(flags[i,]=="1", colnames(flags), "") nameList <- do.call(data.frame,nameList) nameList <- apply(nameList, 2, paste, collapse=":") nameList <- gsub('::+', ':', nameList) nameList <- gsub('^:+', '', nameList) nameList <- gsub(':+$', '', nameList) names(retval) <- nameList sortTab <- cbind(sapply(nameList, nchar), nameList) ord <- order(sortTab[,1], sortTab[,2]) retval <- retval[ord] retval <- lapply(retval, as.character) retval } gplots/NEWS.md0000644000176200001440000004145413727071466012705 0ustar liggesusersRelease 3.1.0 - 2020-09-12 -------------------------- Major change: - Removed gdata from imports by bringing into the package the functions nobs and reorder.factor. - Removed the gdata package from "imports" since it is currently broken and is scheduled to archive in 2020-09-25 (leading to gplots to be archived as well, unless this is resolved). By removing this connection, gplots will be able to remain safely on CRAN. In prectice, I've moved reorder.factor and nobs into this package, as well as removed the use of 'nobs' from some examples. - Added the reorder.factor and nobs function (from gdata) Release 3.0.4 - 2020-07-05 -------------------------- Bug Fixes: - Fix "no visible global function definition for '%||%'": The package imports .memberDend and .midDend from stats in an unsafe way (i.e. using :::). I've moved to manually copy-pasting the functions into the package in order to keep it a bit safer. It has the downside of not using whartever improvements/bugfixes are intrudced to these functions moving forward. But for the time being, it's a reasonable solution. Release 3.0.3 - 2020-02-26 -------------------------- Misc - Tal Galili took over to make sure the package stays on CRAN. - Moved to knitr Release 3.0.1 - 2016-03-30 -------------------------- Bug Fixes: - An error in plotLowess() prevented it from finding objects in the caller's environment. - The manual page for heatmap.2() stated the incorrect type for the 'layout' element of the return list. It is a named list, not a named numeric vector. Release 3.0.0 - 2016-03-28 --------------------------- New Features: - venn(): - now support matrices of indicator values. Previously indicator values were only supported when supplied as a dataframe. - The 'intersections' attribute returned from venn() has been improved so that goups are labeled using set names instead of indicators, and are ordered from simplest to most complex set intersection. - New angleAxis() function to create axis labels with rotated text. - heatmap.2(): - heatmap.2() can now be used to plot subsets of a previous heatmap. - Decrease the granularity of the carpet in heatmap.2()'s color key to avoid visual artifacts. - Returned object now includes 'layout' element that contains layout information. (Patch provided by Jenny Drnevich.) - lowess(): - New function plotLowess() to display a scatter plot with a superimposed lowess curve. - The lowess() functions now returns a list object of class 'lowess' - A new lowess method for plot() method for 'lowess' objects that generates a scatterplot of the raw data with a lowess curve superimposed. Bug Fixes: - Defunct message for boxplot.n() was recommending the wrong function. - heatmap.2(): - Remove debugging print() statement. - Now properly sets 'srtCol' default if missing and 'colCol' is specified. - Corrected a bug causing "Error in plot.new() : figure margins too large" to occur when 'key=FALSE'. (Reported and patch provided by Sveinung Gundersen.) - Corrected a bug causing an error when "Rowv=FALSE" or "Colv=FALSE". - Corrected message when "Rowv=FALSE" or "Colv=FALSE" and the the "dendrogram" argument requested the corresponding dendrogram. - venn(): - Fix warning message that was missing spaces between words. Other Changes: - The smartlegend(), plot.lm2(), and boxplot.n() functions are now defunct. Please use grephics::legend(), lmplot2() or boxplot2() respectively. Release 2.17.0 - 2015-05-01 --------------------------- New Features: - heatmap.2() has two new arguments, 'colRow' and 'colCol' to control the color of row and column text labels. See the man page for examples. - heatmap.2() has been modified to make it easier to extract and plot subclusters from a large heatmap. Simply pass the dendrogram of the subcluster together with the full data matrix and, optionally, the breaks of the full heatmap in order to obtain the same color scaling. (Suggestion and patch contributed by Ilia Kats.) - venn() now returns a list of the members of each set intersection in the attribute 'intersections'. This can be disabled using the argument 'intersection=FALSE' (Patch by Steffen Möller.) Bug Fixes: - In heatmap.2(), the color key now properly handles color breaks that are not equally spaced. (Issue reported by Tim Richter-Heitmann.) - In heatmap.2(), row/column traces in could be plotted on the wrong row/column. - plotCI() now properly respects the 'type=' argument. (Bug report and correction by Wiktor Żelazny.) - Remove stray browser() call from overplot() - In the balloonplot() examples, explicitly specify the 'neworder' argument to gplots:::reorder.factor to prevent errors. Other Changes: - smartlegend() is now deprecated because the relative positioning feature ('top', 'right') has been added to graphics::legend(). Calling smartlegend() will generate a warning. - boxplot.n() and plot.lm2() are defunct have been removed. Use of these functions will now generate an error. - Update out-of-date URLs in man pages. Release 2.16.0 - 2015-01-02 --------------------------- New Features: - plotmeans() has a new argument, 'text.n.label' which specifies the text used for labeling the number of elements in a group. Bug Fixes: - plotmeans() now respects (optional) graphical arguments captured in '...' when drawing the x axis. Release 2.15.0 - 2014-12-01 --------------------------- New features: - Convert bandplot() to S3-method dispatch and add method for class formula, so that 'bandplot( y ~ x, data=dataframe )' now works as expected. Other changes: - heatmap.2() now uses a local *non-byte-compiled* copy of plot.dengrogram, because the byte-compiled stats:::plot.dendrogram uses a recursive algorithm that generates a 'node stack overflow' error for deeply nested dendrograms and the node stack size cannot be changed at execution time. Instead, tne local non-byte-compiled gplots:::plot.dendrogram will trigger a recursion limit for such dengrograms. heatmap.2() will detect this error and recommend that the user increase the recursion limit (via, e.g. 'options("expressions"=20000)' ) and rerun. Release 2.14.2 - 2014-09-17 --------------------------- Bug Fixes: - heatmap.2() was not respecting key.title=NA when density.info="none". - Correct the man page for heatmap.2 to state that the default color for 'notecol' is cyan. - In heatmap.2(), modify default arguments to 'symbreaks' and 'symkey' to make the logic more evident by replacing min(...) with any(...). (The previous code executed properly, but relied on implicit coercion of logicals to numeric, obscuring the intent.) - Calling heatmap.2 with deeply nested dendrograms could trigger a 'node stack overflow' error. Now, this situation is deteceted, and a message is generated indicating how to increase the relevant recursion limit via options("expressions"=...). Release 2.14.1 - 2014-06-30 --------------------------- Bug Fixes: - Correct heatmap.2() bug in Colv dendrogram object dimension checking introduced in 2.14.0. (Reported by Yong Fuga Li.) Release 2.14.0 - 2014-06-18 --------------------------- Bug Fixes: - heatmap.2(): Fix typo in heatmap.2() that caused an error when 'Rowv=FALSE'. (Reported by Yuanhua Liu.) Enhancements: - heatmap.2(): Add new 'reorderfun' argument to allow the user to specify an alternative function to reorder rows/columns based on row/column dendrogram. (Suggested by Yuanhua Liu.) - heatmap.2(): Center margin labels. - heatmap.2(): Check size of user-provided Rowv and Colv dendrogram objects to ensure they match the dimensions of the data. - Add references to man page for hist2d() and ci2d() to the new r2d2 package which implements an improved algorithm for 2-dimensional emprical confidence regions. Release 2.13.0 - 2014-04-04 --------------------------- Bug Fixes: - heatmap.2 was not properly handling row trace reference line ('hline'). Patch submitted by Ilia Kats. Enhancements: - In heatmap.2, when the row or column trace is enabled, show the corresponding reference line in the color key. - In heatmap.2, a new 'extrafun' argument is provided that allows the user to specify a function to be called before the function returns. This allows the user to add additional plots to the page. Release 2.12.1 - 2013-10-14 --------------------------- API Changes: - boxplot.n() has been renamed to boxplot2() to avoid potential S3 method calling issues. - plot.lm2() has been rename to lmplot2() to avoid potential S3 method calling issues. Enhancements: - Add heatmap.2() parameters to control row and column label rotation ('srtRow', 'srtCol'), justification ('adjRow', 'adjCol'), and space from plot edge ('offsetRow', 'offsetCol'). Bug Fixes: - Fix error in in venn() when all groups contained the same number of TRUE cases. - Correct error in overplot() when that occured when a group-category contained no finite values. Other Changes: - Changes to overplot() to avoid warnings from upcoming enhancements to R CMD check. - Move several packages from Depends to Imports or Suggests. - Packages caTools and KernSmooth now have namespaces, so import needed functions in NAMESPACE. - Mark one example in manual page for ci2d 'dontrun' to avoid timing warning in R CMD check. Release 2.11.3 - 2013-06-27 --------------------------- Enhancements: - Modify sinkplot() to use a local environment rather than the global environment, to conform to CRAN policies. Bug Fixes: - Fixed typo/spelling error in plotmeans() man page. Release 2.11.2 - 2013-03-24 --------------------------- Enhancements: - Add ci.width argument to barplot2() to allow varying the length of the 't' at the end of confidence interval bars. Bug Fixes: - Fix error in heatmap.2 when colsep argument had length 1. Updates: - Update manual page for lowess.default() to match changed argument list for lowess() in R 3.0.0 Release 2.11.1 - 2012-12-14 --------------------------- Bug Fixes: - Replace corrupted BalloonPlot.pdf in inst/doc. Release 2.11.0 - 2012-06-08 --------------------------- New Features: - Objects returned by hist2d() have been changed: 1) $x and $y now contain the n midpoints of the bins in each direction 2) $x.breaks, $y.breaks now contain the n+1 limits of the bins in each direction. - Add lwd argument to plotmeans(). Bug Fixes: - Correct error in handling binning in hist2d(): (N+1)x(N+1) bins were being created instead of NxN bins, and the highest row/column in each direction was being omitted from the results and plot. - Changes to fix R CMD check warnings Release 2.10.1 - 2011-09-02 --------------------------- New features: - Make results of hist2d() and ci2d() into objects, and add print() methods to display them. Release 2.10.0 - 2011-08-26 --------------------------- New Features: - New ci2d() function to create 2-dimensional empirical confidence intervals utilizing KernSmooth:bkde2D and gplots::hist2d(). See ?ci2d for details. - Add 'alpha' argument to rich.colors() to control transparency. Improvements: - Accellerate hist2d by replacing for() loop with tapply(), and allow user to specify summary function applied (per suggestion by Peter Hagedorn). Bug Fixes: - Correct error in heatmap.2() that arises when data includes NA values (identified by Melissa Key). Release 2.8.0 - 2010-06-10 -------------------------- Improvements: - venn() now returns an object of class venn() and a plot method for this class is provided. - Manual page for venn has been improved, based on contributions by Steffen Moeller Release 2.7.5 - ?? -------------------------- Improvements: - Performance of 'hist2d' improved thanks to a suggestion from Joerg van den Hoff. Release 2.7.4 - 2009-11-12 -------------------------- Bug Fixes: - Correct bug reported by Alan Yong: plotmeans() failed when bars=FALSE. Release 2.7.3 - 2009-10-22 -------------------------- Bug Fixes: - Correct bug reported by Rudolf Talens: heatmap.2() incorrectly transposed the displayed matrix when the option symm=TRUE. Release 2.7.2 - 2009-05-08 -------------------------- Bug Fixes: - Correct bug reported by Ken Lo: cox2hex() had blue and green components swapped. Release 2.7.1 - 2009-05-08 -------------------------- New Features: - Enhancements to heatmap.2() - New arguments 'lmat', 'lhei', and 'lwid' that allow controlling component plot layout. Users can now resize and rearrange plot components. - heatmap.2() will now compute color breakpoints that are symmetric about 0 when the new 'symbreak' parameter is TRUE. This parameter, as well as the symkey parameter now default to TRUE whenever negative values of x are present, and to FALSE othewise. - the heatmap.2() return value now includes additional useful information, including: call, rowMeans, rowSDs, colMeans, colSDs, carpet (reordered and scaled 'x' values), rowDendrogram, colDendrogram, breaks, col, vline, hline, and colorTable. Of these, the most useful are breaks, col, and colorTable. The latter is a three-column data frame providing the lower and upper bound and color for each bin. See the manual page for complete details and examples. - New function venn(), contributed by Steffen Moeller (Thanks Steffen!) to generate Venn diagrams for up to 5 sets. See ?venn for details. - Performance of bandplot() has been dramatically improved, in part by using runsd() and runmean() from the caTools package. As a consequence, gplots now depends on the caTools package. - Improved performance of gplots::plot.lm for large lm objects by using the new bandplot() and by using fitted() instead of predict() to obtain y-hat. - Add 'scale.range' argument to balloonplot(), option to scale balloons so [min,max]->[0,1] ('relative') or [0,max] -> [0,1] ('absolute'). Bug Fixes: - balloonplot() now properly handles dimension labels provided by 'xlab' and 'ylab' - plotCI now properly handles 'NULL' and 'NA' values for ui, li, uiw, and liw. - Corrections of minor typos in man pages - Update Greg's email address to 'greg@random-technologies-llc.com' Release 2.6.0 - 2008-04-07 -------------------------- New Features: - heatmap() now allows control of the location of individual plot components (e.g. color key) Bug Fixes: - Fix bug in handling rowsep, per suggestion by Steven Paugh - Fix examples for overplot() - Two letter clarification of help text for heatmap.2() - Restore plot layout settings to default state at end of ooplot() example - Various typo fixes Release 2.5.0 - 2007-11-02 -------------------------- New Features: - textplot() now converts tab characters to spaces before processing to avoid problems with computing height and width of text that includes tabs. - Add col2hex() function to convert color names to rgb hex codes Bug Fixes: - Correct balloonplot.default to properly show specified x and y axis labels when explicitly provided - R/balloonplot.R: Correct error in balloonplot when z contains NA values. - Fix typos and code/doc mismatches identified by the latest R CMD check Other: - Clarify GPL version Release 2.4.0 - 2007-02-08 -------------------------- New Features: - Add parameters to bandplot() to control line width and type. - Add paramaeters to textplot.matrix() to allow specification of the color of the matrix data, rows, and column Bug Fixes: Other: Release 2.3.2 - 2006-11-14 -------------------------- - heatmap.2.Rd: Fix example that was broken by changes in 2.3.0. Release 2.3.1 ------------- - Changed maintainer back to Greg Warnes - Updated Greg's email address - heatmap.2.R: Fixed a bug which displayed warnings when Rowv and Colv were specified as dendrograms Release 2.3.0 ------------- - heatmap.2.R, heatmap.2.Rd: Updated the code and man page to make sure the Rowv and Colv values are properly handled - Added the tests directory Release 2.2.0 ------------- - plotmeans.R: Fixed bug in plotmeans - based on Stefano Calza's suggestion (the function didn't account for factors unused levels, returning an error.) - exported plot.lm to NAMESPACE, Remove .Alias calls in plot.lm.R since .Alias is defunct. - barplot2.R: Changed the default grey colors to heat colors, if height is matrix - Updated Greg's email address - balloonplot.R: Recent changes to align row totals with the overall total broke how the marginal cumulative fractions were displayed. Added example using Titanic data that exercises the multi-factor display. Added -.tex, .pdf files and figuers, and RNEWS article in inst/doc - colorpanel.R: colorpanel now allows only 2 colors to be specified if no 'middle' color is desired. Release 2.0.8 ------------- - Added DESCRIPTION and removed DESCRIPTION.in - Updated barplot2 - Updated heatmap.2 gplots/MD50000644000176200001440000001032613760452612012102 0ustar liggesusers3c13bc895d5f867a4cc4568cd6094737 *ChangeLog 42e60b4917b21ab93c8db6f064f0be2b *DESCRIPTION fe43ec7f5c0258713ca8c10d48d1aad1 *NAMESPACE b26fcf48aed2704406b9cf796aaf465a *NEWS 74f573930aa756c15071197a5d0808fc *NEWS.md f30de3e3672ace857495bd9e83ad6783 *R/angleAxis.R 4040a0e9adf5cc4b201e9d35ab57154f *R/balloonplot.R e7563bfb16bf84fd65deb26b4392a5b7 *R/bandplot.R 0a8af37ac076fafb2d055495ea1359b0 *R/barplot2.R 094d92ec0e847019b5b3f4daf7dc7a13 *R/baseOf.R 580427c93275057b134bec3523ee80a2 *R/boxplot2.R a6370e76fc39377d1da08507b03e219f *R/ci2d.R 6d3d19d92abdf9638c5b5313cde8eacc *R/col2hex.R 36b2f3fe28745943577ad95f07142cab *R/colorpanel.R 5554dc1fb6c388d476f501466359b401 *R/heatmap.2.R 69b838cf6230b0394a4ef3565a8c8d75 *R/hist2d.R 12690b374f6b35445d8a087421e8409d *R/layout_set.R cd504b2b384f0c142db36e5c20407d6d *R/lmplot2.R f4f58ee7d4836d6bf8f8500167bac3e6 *R/lowess.R 4bb20d225902c5b0a36cbb36a14f85f7 *R/nobs.R a36e8910568c8476351e5dd5c1ce56fa *R/ooplot.R 3ee488d1e8fdde249a097de645e8c557 *R/overplot.R feb2286e91ead55c28817b131de146cc *R/plot.lowess.R 2316c0b78dc75db34629167387ea9539 *R/plot.venn.R 34877b3ccc43afe22355f96e8cd2ad61 *R/plotCI.R 308a4d875e0931e8f1a8110bef3db520 *R/plotNode.R d1633902e4c3a75f8a24ef9dab1d82e9 *R/plotmeans.R 3b72bccb6f4d15624f8aea8f41353d43 *R/print.ci2d.R bc77c69c15391aef883b3e902d9df36e *R/print.hist2d.R 5d67f9fd015317c36be94d1570c23eb5 *R/qqnorm.aov.R 54fa890d6dea94a2a0a70e9a568030be *R/reorder.R f583369cc05bb20cca9a8d19effde4ef *R/replaceTabs.R 33bc311749bfbb7748909de1bfd2b6fd *R/residplot.R 9a4ac1bce19cf513efc3332a97d6ccd3 *R/rich.colors.R e24b2bb9b1db91aa0a2ba374fbcd7c6b *R/sinkplot.R 27613e8d8ee05ab39f35fdcefe9d8984 *R/smartlegend.R 3996c273f3d9d6750b76a53955b57a8a *R/space.R dde8f47321c837268c65a37cc374482f *R/textplot.R 6cc6424e19833d5b39e51c51aee7f5e3 *R/venn.R 1ba0dd8cf2a2aa2f56c4cc292b542a13 *R/vennMembers.R 9dc3e18aa37028e64ad53b8692a0f789 *R/wapply.R 2c8ffc65585c592a2afd816b93e0af4e *R/zzz.R db65444a9787aa53eba563ef5efa1822 *README.md e28142fd2631d8aba7e5b1ec828908f6 *TODO 2cedce0edf704ee344a7dd76edc04873 *build/vignette.rds 911fe14e710b53812c930feb1f2676d4 *data/rtPCR.rda 3c13bc895d5f867a4cc4568cd6094737 *inst/ChangeLog be4f21a7b13b75d3d3bae7d80eaa5bda *inst/NEWS e28142fd2631d8aba7e5b1ec828908f6 *inst/TODO e56b781db37dad15f3dd76f402a38f26 *inst/doc/venn.R a5b4d8fe9270825a6f63d5499adf4ece *inst/doc/venn.Rnw 2064fedc861e5e370163a5e644225c8e *inst/doc/venn.pdf ac9a06e0352957b04a5ad4d460ba5049 *man/angleAxis.Rd 6ca51490d5d3cd6e9051a4089d5512fc *man/balloonplot.Rd 76fcaaee5e7dfa17c31c406f2c16dda2 *man/bandplot.Rd 9d3fdaf3cfff865c2db62bc07d51066c *man/barplot2.Rd a04e345d06c3c530f184bb018ee82c1c *man/boxplot2.Rd ef4ef18b922315a8c64acb393669e54d *man/ci2d.Rd ab9babb4cca73672c7eae3e46325db28 *man/col2hex.Rd 1e6e7f6434636be7b28f98867b602bd0 *man/colorpanel.Rd d523fe2877418252bc262d9ad77fa3c0 *man/gplots-defunct.Rd 65b7aea6a192059189b7bb3c9afbe95d *man/gplots-deprecated.Rd e24221a6b23f4818519249964931bc42 *man/heatmap.2.Rd 99fd3b402c4c1d17839ff49626cd3ed3 *man/hist2d.Rd 95b3bf1124b3b5694f91195708b9abdd *man/lmplot2.Rd 97b96792191f87858bf8b4792172c836 *man/lowess.Rd 8bbabb1ce9310650bebee176617e2056 *man/ooplot.Rd f46f562c6daf8992b39a9201f6095417 *man/overplot.Rd f6692d0456ee55bc29adec44c165b197 *man/plotCI.Rd 2dcf49fefa25be0d0df503304afdd645 *man/plotmeans.Rd 5a0523318ce97c93d7ee729cd6b95c22 *man/qqnorm.aov.Rd da64c27965060d0f35bed084a416a57a *man/reorder.Rd 8be9406a3844978e05e5832921e52279 *man/residplot.Rd 00dc4c29f2c0eed9d3557ff0c9ab6a9f *man/rich.colors.Rd 3e0736e6f89e7466ccbeb412135b01b8 *man/rtPCR.Rd 7ea76e2257a7fa7fe96d3ce40e182c5d *man/sinkplot.Rd 752a53002d3674f2f15ecc8a87f0bfd1 *man/space.Rd 8544cb97a8f2f6abc64a1535b511b8ba *man/textplot.Rd b7255ea739962eb4895183c5d318fdce *man/venn.Rd 5bdab99eb81d4c50fd63a9e5f2ab71f1 *man/wapply.Rd 0742f6f621cb8fcabd249c79499e8ab0 *tests/dat.csv 02de40e6b689ba49f4d823ddaf4a4b3f *tests/heatmap2Test.R b03e5e87d58289c7982231969040b11e *tests/heatmap2Test.Rout.save 0c000b8175ee7588d6d36ad33de54385 *tests/heatmap_to_heatmap.2_test.R 9a1b66168b0ff6a168d1aa1d5739bfc7 *tests/plotmeans_nobars.R 8211fdd9b45a56f1f7ab466c1d1a8c39 *tests/test.reorder.factor.R 5441933dc7184eb6327121145eb4e26d *tests/test_plottingDeepDendrogram.R a5b4d8fe9270825a6f63d5499adf4ece *vignettes/venn.Rnw gplots/inst/0000755000176200001440000000000013760445300012541 5ustar liggesusersgplots/inst/ChangeLog0000644000176200001440000013231112676760017014326 0ustar liggesusers2016-03-30 warnes * [r2122] R/plot.lowess.R: plotLowess() wasn't finding objects in the caller's environment. 2016-03-28 warnes * [r2121] DESCRIPTION, inst/NEWS: Update gplots version to 3.0.0. * [r2120] man/heatmap.2.Rd: The 'layout' element of the list returned from heatmap.2 is a named list, not a named vector. * [r2119] man/gplots-deprecated.Rd: Used wrong comment character. * [r2118] man/gplots-deprecated.Rd: Comment out arguments section to avoid R CMD check warning. 2016-03-25 warnes * [r2112] man/heatmap.2.Rd: Update URL for RColorBrewer * [r2111] DESCRIPTION: Fix typos and quote uncommon words to make R CMD check happy * [r2110] DESCRIPTION, inst/ChangeLog, inst/NEWS: Update files for gplots 2.18.0 * [r2109] NAMESPACE: Add imports recommended by R CMD check on WinBuilder * [r2108] man/heatmap.2.Rd: Add trailing slash to make R CMD check's URL testing happy. * [r2107] tests/heatmap2Test.Rout.save: Update test output to match corrected messages * [r2106] R/plot.venn.R: Warning message didn't have spaces between words. Minor code reformatting. * [r2105] R/lowess.R: Remove obsolete function to add '...' to argument list for stats::lowess(). * [r2104] man/lowess.Rd, man/venn.Rd: Fix errors identified by R CMD check * [r2103] R/heatmap.2.R: Fix error when Rowv=FALSE or Colv=FALSE * [r2102] man/gplots-defunct.Rd, man/gplots-deprecated.Rd: Fix documenation issues identified by 'R CMD check' * [r2101] man/venn.Rd: Correct discrepencies in man page * [r2100] man/venn.Rd: Correct discrepencies in man page * [r2099] man/lowess.Rd: Correct differences between calls on man page and in code * [r2098] R/lmplot2.R: Fix name of replacement functon in defuct message generated by plot.lm2 * [r2097] man/lowess.Rd: Improve lowess() man page * [r2096] NAMESPACE: Add plotLowess() and plot.lowess() to the NAMESPACE * [r2095] R/plot.lowess.R: Ensure lowess plot methods (invisibly) return the lowess object. * [r2094] man/lowess.Rd: Update man page for lowess to reflect new lowess method for plot(). * [r2093] R/plot.lowess.R: Ensure extra arguments are properly passed to the plot call. * [r2092] R/heatmap.2.R: Corrected a bug causing "Error in plot.new() : figure margins too large" to occur when 'key=FALSE'. (Reported and patch provided by Sveinung Gundersen.) 2016-03-24 warnes * [r2091] R/lowess.R, R/plot.lowess.R: Rename plot.lowess to plotLowess to avoid confusions with plot() method for class 'lowess', create a plot() method for class 'lowess' and modify the lowess.default() and lowess.formula() to add the 'lowess' class to the returned object, along with a 'call' list element. * [r2090] R/venn.R, R/vennMembers.R, man/venn.Rd: The 'intersections' attribute returned from venn() has been improved to use set names instead of indicators, and is ordered from simplest to most complex set interactions. * [r2089] R/smartlegend.R, man/gplots-defunct.Rd, man/gplots-deprecated.Rd: The smartlegend() function has been made defunct and is no longer available. * [r2088] R/lmplot2.R: Indentation changes * [r2087] man/heatmap.2.Rd: Update heatmap.2() man page to reflect addition of to the returned object. * [r2086] R/lowess.R: Remove observations with missing values when lowess is called using the formula interface. * [r2085] R/heatmap.2.R: Add layout infromation to object returned from heatmap.2() (patch provided by Jenny Drnevich). * [r2084] DESCRIPTION: Correct spelling 2016-03-08 warnes * [r2083] R/plot.lowess.R: Add function to plot points and lowess using formula interface. * [r2082] R/lowess.R: Remove old code for S-Plus and modernize formula handling code. * [r2081] R/heatmap.2.R: Set srtCol default if missing and colCol is set 2016-02-26 warnes * [r2080] R/venn.R: venn() now support matrix arguments. * [r2079] R/angleAxis.R, man/angleAxis.Rd: New angleAxis() function to create axis labels with rotated text. * [r2078] R/heatmap.2.R: - heatmap.2() can now be used to plot subsets of a previous heatmap. - Remove stray 'browser()' debuggint statement from heatmap.2() code. - Decrease the granularity of the carpet in heatmap.2()'s color key to avoid visual artifacts. 2015-11-23 warnes * [r2070] R/heatmap.2.R: Remove debugging print() statement. 2015-07-22 warnes * [r2062] DESCRIPTION, R/heatmap.2.R, R/layout_set.R: Renamed 'test' directory to 'tests', commented out tests for lme4 which has a changed API 2015-06-02 warnes * [r2052] R/boxplot2.R: Defunct message for boxplot.n was recommending the wrong function 2015-05-02 warnes * [r2018] Rename 'trunk' to 'pkg' for compatibility with R-forge 2015-05-01 warnes * [r2014] Again... * [r2013] Update ChangeLog (again) * [r2012] Summary: Correct man page name * [r2011] Summary: Forgot to add \alias for smartlegend. * [r2010] Remove leftover alias * [r2009] Commit ChangeLog * [r2008] Update NEWS again. * [r2007] Mark boxplot.n and() plot.lm2() as defunct. * [r2006] Make ballonplot.n() and plot.lm2() 'defunct'. * [r2005] Update NEWS and ChangeLog again. * [r2004] Summary: Punctuation. * [r2003] Correct URLs in man pages. * [r2002] Correct URLs in man pages. * [r2001] Update NEWS again. * [r2000] Improve package description. * [r1999] Mark 'smartlegend' as deprecated * [r1998] Summary: Mark smartlegend() as deprecated. * [r1997] Summary: venn example used 'F' instead of 'FALSE'. * [r1996] Update DESCRIPTION, NEWS, and ChangeLog again for gplots 2.17.0. * [r1995] - heatmap.2: row traces could be plotted in the wrong order. * [r1994] - heatmap.2: column traces could be plotted in the wrong order. - heatmap.2: add support for plotting sub-clusters of the full row and column dendrograms 2015-04-23 warnes * [r1955] Update NEWS and ChangeLog * [r1954] In heatmap.2(), the color key now properly handles color breaks that are not equally spaced. (Issue reported by Tim Richter-Heitmann.) * [r1948] - plotCI() was not properly respecting the 'type=' argument. This has been corrected. * [r1947] - Remove stray browser() call from overplot() * [r1943] Explicitly specify argument to gplots:::reorder.factor to prevent error. * [r1942] - The returned object from venn() now includes a 'interesection' attribution containing a list of which items are in each set intersection. This can be turned off by settting 'intersection=FALSE'. * [r1941] Patch submitted by Ilia Kats: - easily extract and plot subclusters from a big heatmap using the same colorkey, by passing a dendgrogram of the subcluster together with the full data matrix and, optionally, the breaks of the full heatmap in order to obtain the same color scaling. This is useful if one wants to plot several subclusters as different panels in a paper, but maintain consistent color coding. - Improves the behavior of the color key axis labels, as they now honor par("cex") and par("cex.lab"). * [r1940] In heatmap.2() split calls to distfun() and hclustfun() into separate steps to make debugging easier 2015-04-22 warnes * [r1931] Update DESCRIPTION, ChangeLog, and NEWS for gplots 2.17.0 * [r1930] heatmap.2: add new 'colRow' and 'colCol' arguments to control the color of row and column text labels 2015-04-06 warnes * [r1916] Add ChangeLog files to repository 2015-01-02 warnes * [r1913] Update for gplots release 2.16.0. * [r1912] Change default group count lable back to 'n='. * [r1911] - plotmeans: Pass optional graphical arguments captured in '...' axis function used to draw the x axis. - plotmeans: Add an new argument 'text.n.label' to specify the text used for labelingthe number of elements in a group. * [r1910] - Remove S-Plus-specific code - Simplify model frame code 2014-12-03 warnes * [r1909] Update stored test output to account for new startup message from KernSmooth package * [r1908] Fix package title capitalization. 2014-12-02 warnes * [r1907] Add descrioption of node stack overflow issue and work-around. * [r1906] Move '...' argument to bandplot.formula to match man page. * [r1905] plot.dendrogram isn't exported by gplots, so it must be referenced using the ':::' notation. * [r1904] Man page fixes. * [r1903] Add exports of new bandplot methods to NAMESPACE file. * [r1902] Code cleanup. * [r1901] Simplify model.frame code for bandplot.formula. 2014-12-01 warnes * [r1900] Update for 2.15.0 * [r1899] Convert bandplot to S3-method dispatch and add method for class formula. * [r1898] Improve whitespace 2014-09-17 warnes * [r1895] Minor reformatting. * [r1894] Explicitly reset namespace for dendrogram functions copied from stats. * [r1893] Update DESCRIPTION and NEWS for gplots 2.14.2 * [r1892] To work around recursion limit issues triggered by deeply nested dendrograms, (1) create a local *intepreted* copy of stats:::plotNode(), (2) detect recursion limit error message within heatmap.2() and generate a more user-friendly message. * [r1891] Add test case for exceeding recursion limits when plotting deeply nested dendrograms * [r1890] heatmap.2 was not properly handling integer vectors for Rowv and Colv. * [r1889] key.title=NA was not being honored when density.info=NA. 2014-09-16 warnes * [r1888] Add plotNode code to allow modificaiton of algorithm from recursive to iterative for the purpose of avoiding node stack overflow. * [r1887] - Correct statement of default color for 'notecol' argumemt to 'heatmap.2'. - Modify default arguments to 'symbreaks' and 'symkey' to make the logic more evident by replacing min() with any(). (The previous code executed properly, but relied on implicit coercion of logicals to numeric, obscuring the intent.) 2014-06-30 warnes * [r1823] Fix typo in dendrogram size checking code. 2014-06-19 warnes * [r1822] Fix typo 'ColInd' --> 'colInd'. * [r1821] Update for gplots 2.14.0 2014-06-17 warnes * [r1820] - Document new 'key.title', 'key.xlab', 'key.ylab', 'key.xtickfun', 'key.ytickfun', 'key.par' arguments to heatmap.2 (belated commit). - Document new 'reorderfun' argument to heatmap.2. * [r1819] Allow user to specify function used to reorder based on the dendogram via a new 'reorderfun' argument. Suggested by Yuanhua Liu. * [r1818] Fix typo in heatmap.2() reported by Yuanhua Liu. 2014-06-05 warnes * [r1817] Check size of Rowv and Colv dendogram objects to ensure they matches data. 2014-04-17 warnes * [r1812] Add see also to r2d2::freq2d. * [r1811] Add reference to r2d2::conf2d. 2014-04-09 warnes * [r1802] Add padj=0.5 to better align margin labels. 2014-04-05 warnes * [r1781] Update NEWS * [r1780] Add 'extrafun' argument to heatmap.2 to allow the user to perform additional customization by providing a function to be called before heatmap.2 exits. 2014-04-04 warnes * [r1779] Update for gplots 2.13.0 * [r1778] Fix handling of row trace (hline). Bug report and patch provided by Ilia Kats. 2013-10-21 warnes * [r1744] Handle 'ask' argument in lmplot2 function proper, rather than in (depreciated) plot.lm2 wrapper. * [r1743] Correct release number * [r1742] Handle 'ask' argument in lmplot2 function proper, rather than in (depreciated) plot.lm2 wrapper. * [r1741] Fix typo 2013-10-15 warnes * [r1740] Add boxplot2 and lmplot2 to NAMESPACE * [r1739] Update for gplots release 2.12.1 * [r1738] Rename boxplot.n to boxplt2 and plot.lm2 to lmplot2 * [r1737] Make lmplot2 manual page from plot.lm.2 manual page. * [r1736] Make boxplot2 manual page from boxplot.n manual page. * [r1735] Create deprecated man page from boxplot.n man page 2013-10-12 warnes * [r1734] Update NEWS with latest changes * [r1733] Mark one example dontrun to avoid --as-cran warning. 2013-10-11 warnes * [r1732] Allow standard S3 method handling to locate the correct function. * [r1731] Fix error when a subgroup contains no finite values * [r1730] Update test output * [r1729] Move several packages from Depends to Imports, Suggests * [r1728] Use gdata::nobs in example * [r1727] caTools and KernSmooth now have namespaces, so import from them. * [r1726] Update files for gplots 2.12.0 * [r1725] Update files for gplots 2.12.0 * [r1724] Add parameters to control row and column label positioning, rotation, justification, and offset. * [r1723] Fix bug in getVennCounts.data.frame when number of TRUE cases in each variable are equal. 2013-06-28 warnes * [r1680] Update PDF file, including new email addresses 2013-06-27 warnes * [r1679] Update for gplots 2.11.3 * [r1678] Update for release 2.11.3 * [r1677] Update with tests for only 1 row/column separator * [r1676] Fix typo * [r1675] Add test for one row/column separator * [r1674] Add more in-line comments * [r1673] Modify sinkplot to use a local environement to store its information instead of the global environment. 2013-03-24 warnes * [r1647] Update news for release 2.11.2 * [r1646] Add ci.width argument to barplot2() to allow varying the length of the 't' at the end of confidence interval bars. * [r1642] Update for release 2.11.2 * [r1641] Update manual page for lowess.default() to match changed argument list for lowess() in R 3.0.0 2012-12-14 warnes * [r1631] Fix typo: warn() instead of warning(). * [r1630] Fix syntax of VignetteIndexEntry in venn.Rnw. * [r1629] Add generated vignette pdf. * [r1628] Add required VignetteIndexEntry metadata to venn vignette code. * [r1627] Update DESCRIPTION and NEWS for release 2.11.1. * [r1626] Improve venn() to work with PDF and Sweave/pdflatex. Provide a vignette for venn(). * [r1625] Fix error in processing the colsep argument to heatmap.2. * [r1624] Clarify that plotmeans is intended for a *continuous* outcome based on a *factor* grouping level. * [r1623] Replace corrupted BalloonPlot.pdf file and remove svn properties that were causing it to be corrupted. 2012-06-08 warnes * [r1558] Update NEWS for 2.11.0 release. * [r1557] Fix R CMD check warnings. * [r1556] Move incorrectly placed closing brace. 2012-06-07 warnes * [r1555] Object returned by hist2d() has been changed: - $x and $y now contain the n midpoints of the bins in each direction - $x.breaks, $y.breaks now contain the n+1 limits of the bins in each direction The function print.hist2d() has been updated appropriately. * [r1554] Correct error in handling binning: (N+1)x(N+1) bins were being created instead of NxN bins, and the highest row/column in each direction was being omitted from the results and plot. * [r1553] Add default value for lwd argument to plotmeans() 2012-05-31 warnes * [r1533] Properly mark up S3 method. 2011-12-09 warnes * [r1519] Add 'lwd' (linewidth) to arguments handled by plotmeans. 2011-09-02 warnes * [r1505] Update NEWS for release 2.10.1. * [r1504] Increment version counter. * [r1503] Add necessary alias statment to man files for for 'hist2d' and 'ci2d' print methods. * [r1502] Fix naming error * [r1501] Provide print() methods for 'hist2d' and 'ci2d' objects. * [r1498] Correct dependence on R >= 2.10 2011-09-01 warnes * [r1491] - Correct issues in ci2d() man page. * [r1490] - Comment out import from KernSmooth in NAMESPACES, since KernSmooth doesn't provide a namespace. - Update a test output. * [r1489] - Update NEWS file and correct version number * [r1488] - Depend on KernSmooth package. Increment version number. * [r1487] - Depend on KernSmooth package and import 'bkdeD2' and 'dpik'. * [r1486] Improvements to ci2d(): - Add option to utilize KernDensity::bkde2D to estimate the 2-d density (now the default). - Add option to display points for original data on generated plots - Name elements of returned contour list according to the significance level to make it easier to select desired contours. - Improve handling of x and y labels * [r1485] Remove log tag and comments from top of the file. 2011-08-26 warnes * [r1478] Update NEWS for 2.10.0 release * [r1477] Add dependency on R>= 2.10 to handle compressed Rda data file. * [r1476] Compress rtPCR example data set to make distributed package smaller. * [r1475] Remove '1.0' confidence line from ci2d(..,show="contour"). 2011-08-25 warnes * [r1474] - Add 'ci2d()' to compute 2-dimensional emipirical confidence interval. - Fix parse error in help page for 'rich.colors()'. 2011-08-16 warnes * [r1473] Update DESCRIPTION file for 2.8.1. * [r1472] Add 'alpha' argument to rich.colors() to control transparency. * [r1471] Accellerate hist2d by replacing for() loop with tapply(), and allow user to specify summary function applied, per suggestion by Peter Hagedorn (PHA -at- santaris -dot- com). 2011-05-02 arnima * [r1470] Added argument 'alpha' and removed argument 'rgb' in rich.colors() 2010-12-13 warnes * [r1463] Correct error that arises when data includes NA values, identified by Melissa Key 2010-06-11 warnes * [r1446] Fix errors detected by R CMD check * [r1445] Fix errors detected by R CMD check * [r1444] Use 'TRUE' instead of 'T' for true in venn man page * [r1443] Update for gplots 2.8.0 * [r1442] Moved baseOf() into a separate file * [r1441] Update Greg's email address * [r1440] - venn() now returns an object of class venn() and a plot method for this class is provided. - Manual page for venn has been improved, based on contributions by Steffen Moeller 2010-02-17 warnes * [r1420] Improve performance of hist2d thanks to suggestion by Joerg van den Hoff. 2010-01-22 arnima * [r1372] Renamed files rich.color.* to rich.colors.* and renamed rich.colors args 2009-11-16 arnima * [r1367] Minor reformatting only. 2009-11-12 warnes * [r1365] Correct bug reported by Alan Yong: plotmeans() crashed when 'bars=FALSE'. 2009-10-22 warnes * [r1364] Fixed typo in bug fix. * [r1363] Update NEWS and DESCRIPTION for gplots 2.7.3 * [r1362] Fix transposed display of data (but not labels) in heatmap.2 when symm=TRUE 2009-10-12 warnes * [r1361] Update version number to 2.7.2, 2.7.1 was already up but apparently DESCRIPTION wasn't commited with change. 2009-10-10 warnes * [r1360] Various minor changes to remove new R CMD CHECK warnings. * [r1359] Update DESCRIPTION and NEWS file for 2.7.1 * [r1358] Fix bug reported by Ken Lo: col2hex had blue and green components swapped. 2009-05-08 warnes * [r1324] Add test of using a dendrogram created by heatmap() with heatmap.2() * [r1323] heatmap.2: handle NA for RowV or ColV the same way as NULL * [r1322] Fix typo * [r1321] Update NEWS for release 2.7.0 * [r1320] We don't want the Changelog in svn, since it is autogenerated from svn logs! * [r1319] Update Greg's email address to 'greg@random-technologies-llc.com' * [r1318] plotCI now properly handles 'NULL' and 'NA' values for ui, li, uiw, and liw. * [r1317] heatmap.2: Add option to create breakpoints symmetric around 0, provide additional information in the return value * [r1316] Fix Rd syntax error 2009-04-22 warnes * [r1315] VADeaths data set has move to dataset package 2008-08-14 warnes * [r1302] balloonpot() was incorrectly displaying warning about z values below 0 when scale.method="relative". Fixed. 2008-08-07 warnes * [r1301] Update DESCRIPTION NAMESPACE and NEWS for 2.7.0 release 2008-06-16 warnes * [r1296] Add TODO list to gplots 2008-05-20 warnes * [r1274] Update man page to match recent changes to plot.lm2() * [r1273] More work on documentation for venn() * [r1272] Fix code/doc mismatch due to recent changes to bandplot() * [r1271] Add Venn Diagram plot submitted by Steffen Moeller 2008-05-07 warnes * [r1264] Improve performance of bandplot by calculating running standard deviation using caTools::runsd() instead of (ver slow) window() call. In addtion, the standard deviations are now only calculated once, rather than once for each band. * [r1263] Improve performance of plot.lm for large lm objects by using fitted() instead of predict() to get y-hat 2008-05-05 warnes * [r1262] Use caTools's runsd in bandplot for a dramatic speedup for large data * [r1261] Add import of gtools::reorder.factor for ballonplot man page * [r1260] balloonplot: Add option to scale balloons so [min,max]->[0,1] (relative) or so [0,max] <- [0,1] (absolute) 2008-04-07 warnes * [r1254] Fix typo in barplot2() man page * [r1253] Updates for gplots 2.6.0 * [r1252] Add ability to control location of individual heatmap.2 components 2008-03-27 warnes * [r1251] Fix bug in handling rowsep, per suggestion by Steven Paugh 2008-01-04 warnes * [r1238] Fix examples for overplot() 2008-01-02 warnes * [r1237] Update Marc's email address 2007-12-20 warnes * [r1235] Two letter clarification of help text for heatmap.2() * [r1234] Restore plot layout at end of ooplot() example 2007-11-06 warnes * [r1222] Remove extraneous closing brace in the hist2d documentation file 2007-11-05 warnes * [r1221] Fix typo in NEWS: col2hex() is the new function, not col2rgb() which is part of grDevices 2007-11-02 warnes * [r1219] Updates for gplots 2.5.0 * [r1218] Update saved test output due to changes in how R reports warnings * [r1217] Create soft links of gmodels/ChangeLog -> gmodels/inst/ChangeLog, and gmodels/NEWS -> gmodels/inst/NEWS for my convenience * [r1216] Move actual ChangeLog and NEWS files to gmodels/inst so they will be copied into the installed R package area * [r1215] Fix code/doc mismatches * [r1214] Update plot.lm2 to match changes made to bandplot 2007-11-01 warnes * [r1213] in textplot(), convert tab characters to spaces before processing to avoid problems with computing height and width of text including tabs when using pdf() * [r1212] Minor reformatting of overplot code and docs 2007-10-22 warnes * [r1196] Clarify GPL version 2007-08-14 warnes * [r1141] Correct error in balloonplot when z contains NA values. * [r1140] Augment balloonplot() with control of character size and color for text and label items * [r1139] Correct balloonplot.default to properly show specified x and y axis labels when explicitly provided 2007-03-09 ggorjan * [r1073] use of \method in Rd markup - issues a warning with _R_CHECK_RD_STYLE_=TRUE env. variable with R 2.5.0 2007-02-08 warnes * [r1052] Bump version number * [r1051] Update documentation for textplot() * [r1050] Add col2rgb() function to convert color names to rgb hex codes * [r1049] Add paramaeters 'col.data', 'col.rows', and 'col.columns' to textplot.matrix to allow specification of the color of the matrix data, rows, and columns. * [r1048] Add parameters to control line width and line type. 2006-11-14 ggorjan * [r1012] Removed executable property 2006-11-14 warnes * [r1010] Update output file to match (trivial) changes in the test code. * [r1008] Update ChangeLog and NEWS files for release 2.3.2. * [r1007] Update version number * [r1006] Update version number and maintainer * [r1005] Correct problem with labeled correlation matrix example. Thanks to Jean Vidal for reporting the error.. 2006-08-02 warnes * [r977] Update my email address 2006-06-26 nj7w * [r967] Fixed a bug which displayed warnings when Rowv and Colv were specified as dendrograms 2006-03-10 warnes * [r937] Remove code that added a local path 2006-03-09 nj7w * [r935] Added the correct library path where gplots is installed locally and corresponding .save file * [r934] Updated the tests file * [r933] Removed the condition Colv != Rowv as it has already been taken care of * [r932] Deleted rtPCR.rda from the main directory * [r931] Added ChangeLog 2006-03-07 nj7w * [r919] Updated ChangeLog and NEWS * [r918] Added the tests and fixed corrupted files * [r917] Replaced the corrupted rtPCR.rda file in data directory * [r916] Removed the corrputed tests directory * [r915] Replaced the corrupted rtPCR.rda file in data directory 2006-03-03 nj7w * [r914] Updated the code and man page to make sure the Rowv and Colv values are properly handled 2006-03-02 warnes * [r908] Adjust row total placement to adjust for width of the totals * [r907] Row totals in ballonplot were in reverse order. Fixed. 2006-02-23 nj7w * [r899] Add ability to scale the color key using the new 'keysize' argument. * [r898] Add tests for heatmap.2 * [r897] Move heatmap and ballonplot paper source materials to their respective cvs modules * [r896] Moved balloonplot paper materials to BallonPlotPaper cvs module * [r891] Remove heatmap paper files and move them to the HeatmapPaper cvs module. * [r888] Added figures for heatmap2 paper * [r887] Added the .Rda files for the heatmap2 paper * [r886] Added the source - (tex file) of the heatmap paper * [r885] Added the code for the figures of heatmap paper 2006-02-21 nj7w * [r884] Minor updates to heatmap.2 - fixed Rowv, Colv and dendrogram behaviour. Now Rowv=NULL or FALSE both imply no dendrogram computation. 2006-01-12 warnes * [r844] more updates * [r843] Add Biometrica bibliography style file * [r842] A little more. * [r841] Updates to respond to referee. 2006-01-12 nj7w * [r840] Added references 2005-12-13 nj7w * [r811] Fixed Nitin's company name * [r809] Updated NEWS and removed ChangeLog 2005-12-12 nj7w * [r802] Fixed bug in plotmeans - based on Stefano Calza's suggestion 2005-12-07 nj7w * [r787] Updated version number * [r786] Added plot.lm * [r785] Changed the default grey colors to heat colors, if height is matrix * [r784] Changed the default greay colors to heat colors, if height is matrix 2005-12-06 nj7w * [r783] Fixed minor error in documentation of barplot2 2005-12-02 warnes * [r777] Remove .Alias calls, since .Alias is defunct. 2005-12-01 nj7w * [r776] Updated Greg's email address 2005-11-23 nj7w * [r764] Updated Figure 2 colors 2005-11-18 warnes * [r743] Latest version of the pdf files * [r742] Nitin works for the Cambrige Group, not Pfizer. * [r741] Minor text rewording. * [r740] More edits. * [r739] Recent changes to align row totals with the overall total broke how the marginal cumulative fractions were displayed. This patch fixes the problem. * [r737] - Update documentation for balloonplot to match the latest code. - Correct spelling of 'show.zeroes' to 'show.zeros' * [r736] More changes: colorpanel now allows only 2 colors to be specified if no 'middle' color is desired. 2005-11-17 warnes * [r735] Allow user to control removal of duplicate entries in balloonplot. * [r734] Extend colorpanel to handle just two-colors in addition to three. 2005-11-09 nj7w * [r733] Updated the pdf file * [r732] Updated the changes * [r731] Modified figure 4 * [r730] Updated code * [r729] Modified figure 3 * [r728] Modified figure 2 * [r727] Modified figure 1 2005-11-08 nj7w * [r726] Updated Greg's email 2005-11-07 nj7w * [r725] Minor modifications to fit the code properly on pdf 2005-11-07 warnes * [r724] Add R code that generates plots * [r723] Add figures to CVS * [r722] Text changes 2005-11-04 warnes * [r721] Fix some alignment issues. * [r720] Remove Table.pdf since it is no longer needed * [r719] Nitin's Changes * [r718] Add figure plots * [r717] Fix paths 2005-10-20 nj7w * [r705] added the eps version of figures * [r704] Updated BallonPlot.pdf * [r703] Removed Old Figure * [r702] Added the new figure - for total popluation - Balloonplot * [r701] Modified the BallonPlot article * [r700] Added references 2005-10-19 arnima * [r697] The last example now displays the correct heat.colors. Default 'palette' argument is now a single string, not a vector. * [r696] Default 'palette' argument is now a single string, not a vector. 2005-10-14 warnes * [r694] Formatting fixes: - Handle multiple row or column category variables - Separate rows/columns of category labels by lines - Fix handling of 'cumsum' plots on row/column labels - Improve display of row/column sums 2005-10-13 warnes * [r693] Add example using Titanic data that exercises the multi-factor display. 2005-10-11 warnes * [r692] Initial changes to allow multiple x and y factor variables. Yet to be done: 1) remove extra 'boxes'. 2) omit duplicated values 2005-10-04 warnes * [r691] more minor fixes * [r690] fix spacing * [r689] Inlcude Rnews.sty * [r688] Some textual edits. 2005-10-03 nj7w * [r687] Added figures for the R-News Article 2005-09-29 nj7w * [r680] Updated the documentation - added the name of the person who asked the question * [r679] Added R-news article 2005-09-12 nj7w * [r671] Updated Greg's email * [r670] Updated version of balloonplot - by Romain Francois 2005-09-09 nj7w * [r669] Updated the version and ChangeLog * [r668] Changes in ballon plot based on Romain Francois (francoisromain@free.fr) suggestions 2005-09-06 nj7w * [r666] Updated package dependencies * [r665] Added NEWS 2005-09-02 nj7w * [r655] Added ChangeLog 2005-08-31 nj7w * [r644] Added DESCRIPTION file * [r643] removed DESCRIPTION.in 2005-06-09 nj7w * [r625] Updating the version number, and various help files to synchronize splitting of gregmisc bundle in 4 individual components. * [r624] Changes based on Marc Schwartz's suggestions to handel 0's and NA's appropriately. 2005-05-13 nj7w * [r621] 1) Using dQuote.ascii function in read.xls as the new version of dQuote doesn't work proprly with UTF-8 locale. 2) Modified CrossTable.Rd usage in gmodels 3) Modified heatmap.2 usage in gplots. 2005-04-04 warnes * [r603] Explicitly reference package containing lowess.formula in panel.overplot(). This should fix the error reported by Troels Ring . 2005-02-26 nj7w * [r565] *** empty log message *** 2005-02-25 warnes * [r563] Integrate changes submitted by Arni Magnusson * [r559] Add dependency imports from 'stats' package. 2005-02-22 warnes * [r555] Fix problem in passing graphical parameters (xlim,etc).@ 2005-02-08 warnes * [r541] Improve package title. * [r540] Ignore missing values when computing symmetric range. 2005-02-02 warnes * [r530] Add more extensive example. 2005-01-14 warnes * [r516] Code can be simplified because R now supports selecting a fixed width font. 2005-01-12 warnes * [r515] Add dependency on R 1.9.0+ to prevent poeple from installing on old versions of R which don't support namespaces. 2004-11-30 warnes * [r495] 1. Add new parameters for controlling color key: - If `symkey==TRUE', the color key will be made symmetric about 0. - The `densadj' parameter can be used to modify the smoother width (see the `adjust' parameter under `help(density)') for the density plotted in the key. 2. Fix handling of rowsep/colsep. 3. Vector of length 2 giving the width (colsep) or height (rowsep) the separator box drawn by colsep and rowsep as a function of the width (colsep) or height (rowsep) of a cell. 4. Appropriate changes to the corresponding help page, plus some minor formatting changes. 2004-11-03 warnes * [r474] Fix bugs in layout of cell notes. They were being plotted top down rather than bottom up. Further reordering of the x matrix didn't also reorder the notes. Both issues should now be resolved. 2004-09-27 warneg * [r461] Updated to pass R CMD check. 2004-09-03 warneg * [r453] Provide explicit package for call to nobs. * [r452] Fix typos. * [r446] initial bundle checkin 2004-09-02 warneg * [r442] Initial revision 2004-07-29 warnes * [r426] Integrate changes from the version of plotCI maintained by Martin Maechler. 2004-06-30 warnes * [r393] Remove commented-out code. * [r392] Fixed text size calculations 2004-06-28 warnes * [r391] - Default 2-d color set to grey as in (v2.0.0) r-devel - The default (v1.9.1) barplot method now handles vectors and 1-d arrays (e.g., obtained by table()) the same, and uses grey instead of heat color palettes in these cases. (Also fixes PR#6776.) - Updated to reflect the addition of 'offset' argument in base - Fix bug in stacked barplots, which would not be plotted properly 2004-06-24 warnes * [r385] Add ability to specify color of NA cells. 2004-05-27 warnes * [r349] Fix spelling error. 2004-05-26 warnes * [r347] One more fix to get it right. * [r346] Use triple-colon operator ':::' to access plot.formula from the graphics package. * [r344] Replace 'F' by 'FALSE' to pass R CMD check. 2004-05-25 warnes * [r338] Work around bug in R 1.9.X due to plot.formula() not having the same arguments as plot(). * [r336] Add rich.colors() submitted by Arni Magnusson . * [r328] ?? 2004-05-24 warnes * [r324] Modified to use invalid() to check arguments instead of missing(). This fixes some build errors under R-1.9.0-Patched. 2004-04-22 warnes * [r319] Integrate changes from Lodewijk Bonebakker 2004-04-13 warnes * [r318] Add ability to space points along 'y' direction. 2004-04-02 warnes * [r313] Fixed smartlegend() positioning when x and/or y axis are log-scale. 2004-03-30 warnes * [r311] - Fix bug in textplot() reported by Wright, Kevin . 2004-03-26 warnes * [r305] Update to match changes in textplot() code. * [r304] Remove Windows EOL characters. * [r302] - Remove some commented-out code. - Remove cvs log tag. * [r300] Misc changes. 2004-02-17 warnes * [r290] Minor fix to ooplot documentation. * [r289] Integrate ooplot updates provided by Lodewijk Bonebakker 2004-02-02 warnes * [r287] - Add colorpanel function, which generates a smoothly varying band of colors over a three color range (lo, mid, high). 2004-01-21 warnes * [r283] - Correct arguments to halign to match code. * [r281] Track R 1.9.0's move of 'lowess' from the base package to the (new) stats package. * [r279] - Fix sinkplot() example by replacing 'T' with 'TRUE'. * [r278] - Add some more details to the ooplot() documentation. The documentation is *not* complete. * [r277] - Mark sprint() as depreciated. - Replace references to sprint with capture.output() - Use match.arg for halign and valign arguments to textplot.default. - Fix textplot.character so that a vector of characters is properly displayed. Previouslt, character vectors were plotted on top of each other. 2004-01-19 warnes * [r276] New function sinkplot(), as requested on R-devel by Kevin Wright in https://www.stat.math.ethz.ch/pipermail/r-devel/2004-January/028483.html. 2004-01-15 warnes * [r274] Add initial code and docs for ooplot() function submitted by Lodewijk Bonebakker . 2003-12-03 warnes * [r253] - match function argument defaults with 'usage' * [r252] - Fix buglets in heatmap function - Make a slight enhancement to the example code. 2003-12-02 warnes * [r251] Integrated some suggestions from Sean Davis . * [r250] - Make final example use 16 colors instead of 8. This looks nicer. * [r248] - Remove '%' character from example code to avoid errors. * [r247] - Add '...' parameter to call to text to allow user to control size/color/etc. 2003-12-01 warnes * [r246] - updated to match changes to barplot() in base. * [r245] - Renamed rtPCR.Rda to rtPCR.rda so that R will properly load the file when data(rtPCR) is executed. * [r243] - Follow patches applied to barplot() in base. 2003-11-24 warnes * [r242] Fix unbalanced braces. * [r240] Fix errors reported by R CMD check. 2003-11-21 warnes * [r239] Added missing closing brace. * [r238] Initial addition of these files. Used in examples of overplot(). * [r236] Applied my enhancements to the heatmap() code from R 1.8.0, and added documentation of these changes. * [r235] - Discovered that axis(N) does the right thing without needing to be given location for tick marks. This allowed simplification of the code. - Minor other changes for distribution - Addition of overplot.Rd documentation. * [r231] - Integrated my extensions into the R 1.8.0 version of heatmap. - Add Rd documentation. 2003-11-19 warnes * [r228] Remove extranious NULL that confused R CMD check. 2003-11-18 warnes * [r226] - Tiny fix to remove R CMD check error. * [r225] - Added missing closing brace. * [r224] - Convert from MS-Dos to Unix line endings. - Reformat to 80 columns. 2003-11-10 warnes * [r220] - Add files contributed by Arni Magnusson . As well as some of my own. 2003-08-19 warnes * [r219] - Copy of local changes. * [r218] - Checkin before re-integrating local changes. 2003-06-19 warnes * [r201] - Added enhanced heatmap function. 2003-06-09 warnes * [r200] - Add help text for smartlegend. * [r199] - New function smartlegend(). 2003-04-22 warnes * [r191] - Fixeed warning messing caused when 'connect' is a vector. * [r187] Update from Marc Schwartz, modified by Gregory Warnes: - Modified dim() checks for 'ci.l' and 'ci.u' against 'height' to remove R v1.7.0 if() based error msgs for vector conditions. 2003-04-04 warnes * [r182] - Change occurences of 'T' to 'TRUE' * [r179] - Updated to match changes in textplot function: - Added textplot.character - Renamed arguments "col.margin" and "row.margin" to "cmar", and "rmar" so that specifying "col='red'" is possible. - Fixed R CMD check errors - Improve comments in example - Add textplot.matrix example * [r178] - Added textplot.character to handle character strings. - Moved test for vector and matrix arguments to textplot.default. - Renamed arguments "col.margin" and "row.margin" to "cmar", and "rmar" so that specifying "col='red'" is possible. 2003-04-02 warnes * [r175] - Added textplot function and friends, as well as documentation. 2003-03-08 warnes * [r171] - Forgot to update arglist in \usage section. * [r169] - Added parameters for rotation of and amount of space allocated for the row and column labels. 2003-03-07 warnes * [r168] - Minor changes to code to allow the package to be provided as an S-Plus chapter. * [r167] - Add 'NULL' as the last element of if statement that defines lowess.default so that when the file is sourced, S-Plus doesn't display the function definition. * [r166] - Specify where the defualt lowess function should be found. - Use getFunction in S-Plus instead of 'get' 2003-01-30 warnes * [r159] - Added argument 'add' to allow for the addition of a barplot to an existing graphic. Default is FALSE 2003-01-20 warnes * [r156] - Updated balloonplot help page. * [r155] - Updated wapply.R to allow specification of evaluation points when method is 'width' or 'range' using the 'pts' argument. - Updated wapply.Rd to add 'pts' argument - Fixed typos, spelling errors, gramatical errors and lack of clarity in wapply.Rd help text. 2003-01-03 warnes * [r154] - Initial checkin of balloonplot functions and documentation. * [r153] - Added reference to and comparison example of sunflowerplot. - Added code to put example plots on same plot window using par(mfrow=...). 2003-01-02 warnes * [r150] - Changed assignment statements that used "=" to "<-" to avoid syntax errors in older versions of the S language. * [r149] - Added wrapper code so that R-specific fiddling won't be executed under S-Plus. * [r147] - Renamed first parameter to match qqnorm generic. * [r146] Added additional help text from Kjeitl. 2002-12-31 warnes * [r145] Initial checkin of qqnorm.aov function and documentation submitted by Kjetil Halvorsen . 2002-11-04 warnes * [r143] Updates from Marc Schwartz: - Updated underlying code to be based upon the new barplot() in R v1.6.1 - This now uses the 'axis.lty' and 'border' arguments - In R v1.6.0, R Core introduced a new function called axTicks(). This is an R equivalent of the C code for CreateAtVector in plot.c. This now enables me to get the axis tick mark positions consistently when the 'height' related axis is either linear or log. Thus, I can now have consistent tick marks and can plot grid lines in either situation. If 'plot.grid = TRUE' and 'grid.inc' is specified, then I still use pretty() to determine the tick marks and lines. - This code now depends on R 1.6.0 or later. 2002-10-30 warnes * [r139] - Commented out plot.lm() code since recent changes in R have broken it. 2002-10-11 warnes * [r131] - Fixed log scale errors in legend() call 2002-10-01 warnes * [r130] - Added examples of using 'contour' and 'filled.contour' for display. 2002-09-24 warnes * [r121] - Changed digits=options("digits") which produces a list of length 1 to digits=getOption("digits") which returns a vector of length one. The former was causing an error when passed to round(). 2002-09-23 warnes * [r119] - Fixed syntax errors in barplot2.Rd and CrossTable.Rd - Fixed incorrect translation of 'F' (distribution) to 'FALSE' in glh.test.Rd * [r117] - Modified all files to include CVS Id and Log tags. * [r116] - Added CrossTable() and barplot2() code and docs contributed by Marc Schwartz. - Permit combinations() to be used when r>n provided repeat.allowed=TRUE - Bumped up version number 2002-08-01 warnes * [r114] - Corrected documentation mismatch for ci, ci.default. - Replaced all occurences of '_' for assignment with '<-'. - Replaced all occurences of 'T' or 'F' for 'TRUE' and 'FALSE' with the spelled out version. - Updaded version number and date. 2002-04-09 warneg * [r109] Checkin for version 0.5.3 2002-03-27 warneg * [r107] Added "..." argument to lowess.default. * [r106] - Added code to append "..." to the argument list of lowess.default. - Fixed a wrong default for f in lowess.formula. Was 3, but should have been 2/3. 2002-03-26 warneg * [r104] - Changed methods to include '...' to match the generic. - Updated for version 0.5.1 * [r100] Initial checkin. 2002-03-20 warneg * [r94] - Changes to add compatibility with S-Plus 2000 * [r93] - Changes to add compatibility with S-Plus 2000. * [r92] - Updated to work in S-Plus 2000 as well as R. 2002-03-05 warneg * [r88] - Replace "T" with "TRUE". Problems arrive when there is a variable named "T". 2002-02-20 warneg * [r81] Minor changes, typo and formatting fixes. * [r80] - Generalized to allow specification of the multiples of the standard deviation levels to be plotted (0=mean, 1=1 sd, ..). - Now (invisibly) returnes computed smooths. 2002-02-16 warneg * [r78] Added bandplot documentation. * [r77] - Fixed Bug: When method=="range", the absolute range of x was being used to compute the relative width instead of the (correct) relative range. * [r76] - Corrected problem removing missing values: The missing values of $x and $y were being removed indepdendently, leaving an uneven number of points in the result. 2002-02-04 warneg * [r74] - Add na.rm parameter and make the default TRUE. * [r73] Initial checkin. * [r72] - When err="x", 'col' was being used to plot bars, rather than 'barcol'. * [r71] - fixed typo, when err="x", lty was 'slty' causing an error. 2001-12-12 warneg * [r54] - Quoted underscore character in my email address. - Added correct keyword. * [r52] Added documentation for xaxt parameter. * [r51] Updated to explicitly list control arguments to lowess.formula. * [r50] Initial checkin. Code copied from R source package and extended. 2001-12-07 warneg * [r46] Fixed an problem where \code was incorrectly delimited by parens rather than curly brackets. * [r42] Initial checkin. * [r41] - Added cvs tags. * [r40] - Leave first point at center, rather than shifting by s/2 to the left. This looks better when there are more than 2 'spaced' points. 2001-12-05 warneg * [r33] - Added ability to use the t-distribution to compute confidence intervals. This is controlled using the 'use.t' parameter. * [r31] - Added documentation of use.t parameter. * [r30] - Clarified how the width of the window is computed when method="nobs". * [r29] - Added a better default for "width" when method="nobs". For this case, width=max(5, length(x)/10). - Allow omission of x values which result in missing y values via 'drop.na' parameter. 2001-10-26 warneg * [r28] Added correct handling of 'xaxt="n"'. 2001-10-16 warneg * [r27] Fixed unbalanced brace. * [r26] Added minbar and maxbar parameters. * [r25] Forgot to add minbar and maxbar to usage section. * [r24] Added description of minbar and maxbar. * [r23] - Added minbar and maxbar parameters - Added cvs id and log tags to header * [r22] Added cvs id and log tag to file header * [r21] Added minbar and maxbar parameters. * [r20] Added description of minsd parameter. * [r19] Added minsd parameter. 2001-09-18 warneg * [r18] Release 0.3.2 2001-09-01 warneg * [r16] Release 0.3.0 2001-08-31 warneg * [r15] Used wrong character in header (% instead of #). Fixed. * [r14] Used wrong comment character (% instead of #) in header. Fixed. 2001-08-25 warneg * [r10] Initial checkin. * [r9] Added CVS header. * [r8] Initial Checkin 2001-05-30 warneg * [r2] Initial revision gplots/inst/doc/0000755000176200001440000000000013760445300013306 5ustar liggesusersgplots/inst/doc/venn.Rnw0000644000176200001440000000462213727100345014750 0ustar liggesusers\documentclass[a4paper]{article} %\VignetteIndexEntry{Venn Diagrams with gplots} \title{Venn Diagrams with \texttt{gplots}} \author{Steffen M{\"{o}}ller} \begin{document} \SweaveOpts{concordance=TRUE} \maketitle Venn diagrams\footnote{http://en.wikipedia.org/wiki/Venn\_diagram} allow for a quick overview on the number of elements that multiple sets share. And when those elements are representing traits of real objects, like observations in biomedical sciences/marketing/..., then this may direct researchers to further investigations/decisions. The {\tt gplots} package provides Venn diagrams for up to five sets. The R code to produce the diagrams is not complicated. The plot function behaves alwas the same, depending only on the number of overlapping circles to draw. Its input is a table that is produced by another function. The function {\tt venn()} calls one after the other and is the only one to be seen by the user. The values shown are returned invisibly. The {\tt venn()} function accepts either a list of sets as an argument, or it takes a binary matrix, one column per set, indicating for every element, one per row, the membership with every set. The common form with overlapping circles only works with up to three sets, as seen here: \begin{center} <>= suppressMessages(library(gplots)) venn( list(A=1:5,B=4:6,C=c(4,8:10)) ) @ \end{center} The names of columns or the list elements are the set names. To squeeze extra circles in, those circles need to become ellipses. This works for four sets \begin{center} <>= v.table<-venn( list(A=1:5,B=4:6,C=c(4,8:10),D=c(4:12)) ) print(v.table) @ \end{center} and maybe even more impressively also for five. \begin{center} <>= venn( list(A=1:5,B=4:6,C=c(4,8:10),D=c(4:12),E=c(2,4,6:9)) ) @ \end{center} The man page of {\it venn()} lists options to change the appearance of the plots, e.g., the names of the sets may be omitted and sizes changed. However, there is ample of opportunity to extend the functionality of this package. To mind come \begin{itemize} \item more dimensions (next) \item colors \item variation of size of circles with the number of members the set has \item density plot rather than numbers, identification of individual entries \end{itemize} The prime personal interest is more in the increase of dimensions. Please send patches for features you are most interested in. \end{document} gplots/inst/doc/venn.R0000644000176200001440000000125713760445300014404 0ustar liggesusers### R code from vignette source 'venn.Rnw' ################################################### ### code chunk number 1: venn.Rnw:34-36 ################################################### suppressMessages(library(gplots)) venn( list(A=1:5,B=4:6,C=c(4,8:10)) ) ################################################### ### code chunk number 2: venn.Rnw:44-46 ################################################### v.table<-venn( list(A=1:5,B=4:6,C=c(4,8:10),D=c(4:12)) ) print(v.table) ################################################### ### code chunk number 3: venn.Rnw:52-53 ################################################### venn( list(A=1:5,B=4:6,C=c(4,8:10),D=c(4:12),E=c(2,4,6:9)) ) gplots/inst/doc/venn.pdf0000644000176200001440000054620213760445300014760 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Length 102 >> stream concordance:venn.tex:venn.Rnw:1 7 1 1 0 25 1 1 2 1 0 1 1 4 0 1 2 5 1 1 2 1 0 1 1 44 0 1 2 3 1 2 2 18 1 endstream endobj 5 0 obj << /Length 1694 /Filter /FlateDecode >> stream xڝXK6W(5-zP @mH6F/IZYk$GSzEI~z,<q5[I3et@JM2. VC@,&OT Qp\Su7T|E$> stream xڵVMo0 W6P+$+ hXo|zH] mv~Hn #Q")LLZ8 LmDkx`m㯙̨:Ͻ23i|L_K)4h?o! #ˠZ98^8ݻ86L>"@i1P6Wp(9 "L"B9#!y\nM`VeI ZLIz1j &_(*x:uVhw̍}B^ٯ~I6#.>Gm _xq> /ExtGState << >>/ColorSpace << /sRGB 22 0 R >>>> /Length 16161 /Filter /FlateDecode >> stream x-˒MYתLSݐ!Ȣ$HjCqu(lg3vκ5b|Qԟ32~k>گ?*_Ο)?_~j|VGW/?oZ?O^/=u Wη HeH7٥7EY˟x^鹠_~_՟w=ußoW z~_{@%_q[z i\ߊK~-LKOr~Q}z~/u}ߍк75| [u?ݯ}?+甎J:ϧuwC?S_{⴩gV,C"{uм_}Zq֯:~9>ԭA)qֽA&֛O~>t74u劉u^5ozt/=q#C/5^>, N땮?ⲧ4gi<B:ǧO?4W@ZDžY8>+ɐnnQB-uУIG0`|Y]zV>9t\X/_hOhЯ;uB|Aӵ@s:fcZӼ4wP !4w Y0=}:_g6>hOM7=z1?7/ç{:C|s:ǖ|>AtO>1LSG{z<^~>~"4OGyOWjB-\6u< 8˶O tO O~BkBBCsB=_31~~Y,^hXNh>o󟚯?ߟ\/ԧW< O}0=_>Ost?b}i7>M̡|J|}}}^{׿bz|/q̧ c>h|~}.gXO|-ұ~w/tܿ?>>1/B/g-O٧17흱 t?cW:^whj^ BHWjϣ8W4J ;z$t翎4T{-ݤ})'/iTz7>>.qo)tqw0J?>\/Ux=+Ѱt~xԓ1nҕzǣhy}\Gyw,,tc*Cv Kq|B;Xhs<!oz wG ?_ES1niM'1Gx׸ߎxL|44?QxHϺ_MU\|ߏǟo8^yAs4gk?Vh6;5kj/?ϷOb?0S=ϗgsont]>1чC8Ϸ<A8?7+>uSsäuO|BGӜ_6j.\zZ/1n++М6b>@#k xǢ}=CXu">ذ _i<"0pV~^~ϯ}~la?C URy~i|xy~7cOUL1-p|XHǴkbOk?i؏M/9~ӱM+`>iHwXO_֡@7S~iݏo?xqǴ/kis?tw>=qz0`Ŭ &Ƙv~c{<ױ eL{S:ƻ_Q9.7|SO/o nL]zPGa{&Sxн@#0ކ~AƇЃJ#~o#MХ?:áxAhqVO#1>G"#{$&B)߷냾9F|ys}Sb|m诡GzJGؙߏ.wK#p=Ј'Oou3֤w/BG{߄n: Y? ӣIЅ LUxh㋯sL[6t{.o|:ֳM{|gh'^Cxa*oZfȷ<oYt̿z%tWНh>OGe?糘ţ1MW&٧+|O~ 4Ww{ бͿ%ҋl瑎F][E׿`=]{?ט?,˺"L9-S+zvz,UkGi؟V=}aWkw?k-n/Ac}+t#^Rc=jׅo|7e:wVn:Loz GW\~~~zQil<1];tW_`ZSLSo0e[?1 |ٟZ|~O#~Bq~#wAg3 ߦ񢄮s_44 f.x$kaq0?34q׸==<[ikh|yq>jQ3~C]:|X-/Cwk?W5߆|^u}kxTB][߇Fn?>WB ]?Tz(xSu c%Byp=Z+z1ӫ֋Ch z#gkGha^c\u^2ۡ=롵z>475ºKzn~3~"4oԌ7p?Rdz_ x3?O~(K~>opZB3Zx ){ў#>P~rzxYt5'ǵ_ 9z\b\xBkZS|_%o~?t#/=O ol#By3^:Ώj!'1~ͮx3)u3z^ܯx/_b ?xPh/RƓB~2Z*+tT>,t~?iOC-\Ch]~%jYМ?ұ "_y:jW)o|~HG>v7̗Bzš|o/gZh~6Uf{=}ǫӡUq{>>ߟyϿd{B?o/ORוGEғo^~Gzue@sx_ug}i@PMDa(þ/_)470Oo痮R'Z7V?z8?W+4a~ߌp~~2̏>\~4̯UZmMp_.4׋OtX ?Bӯ|H| 7' ПJ%~J&1~Xy[34kw_闥34􃆦ߖ~>\Ͻ]G =_54E{>GEˆ~跍Bq>N]G7+j?x¡ǧ8GGomCOScs=5ߓ߹/~_c?YcC/';4{?9|n~<gccG^zg*%?|hqB@Ǐ~{_GؿYMHxwȟeo|#Dϧ|K O>_j1"DFiށ|yЯc> Ih?QBs<$6J8Bz_E08#" J#g-̷wDI/XDZȼd2ia2 yO]̏"U?|W=hN~4ƯX&PŃ4X@Io!idhqH~#ؓЯ??Ϭ7'gxb~7\66G3杋Хj'^T [k<^/8y`&/u7o_CDzjG`_HI7ƒHnH.H~"z""]V$eO"]@B HU>t IC_D:!҅J$8'.+|B7H"e}O"vtX/"]IBQHoH"euO"HG=D:.&tX!amf鲶'kE7>H"ҁ"=HD:鰲_D:CʞD:]D:@."]W@!ҁ]D:"V!SIMt6&a]tX!a]tt鈰CHw@."E#W.z^D:鰪_D:ŋHxBHo\*'t"ҁV^D:!#!eMO"ztX/"H=/"{tT"CHGw"=""tYѓH"#ドt鰢CGz_D:"t"~I=.H|"utYϓH"tX!CϋHG=DP$ҁr_D:25z^D(鲚'E#q鰚C!CrtECZ"=ttX!a-td."=\&&`C_DFh8 m_DzhTwb7+EJ~鰒Cn޴B4D::j;D::En1H=."=}@^Dz"="1]Dzc(<"CH0Ɍ{>H~_Dzy(Cc"u"=&w"=tH5=D:11H=Ew:ƓHD.ƊIGf_Dz|Dz1o"="H7^OgReHoDzj"q}DPzo"a"?Dzc$Qq魑vFqDz,n""y(B"DzEu'hIoa;HH\o$^E Htx5ߛHHkMWI&+>xn鵑tQDz|&++$.*o#EI$"o"DzyqH/Veh5^L"`I"`a} #Dziy܄ҾB"-R+ՎDOBP\$r}q;*}Ǜ s|qW9q>>NhSMx:t!eN"=eqt!ptX/"y"{GE"VHP^HG("#!,H]."H]."]$CqtX/"=ttj/"=t>F_Dz~t/"=BstX/"VH! H!a}~>DBI:'_DRIWQD:!Crt.!ae~+EGj么КoI~"+:I#u"j IDze"y=&y_HX"P$+]I7^Y(z&+ $áu/t#HM?"+ $++x% 3IWXC^_&ŇH`Dz*ʊIWӓHDzE o"rDz7DamHD*$^>_^/~%DwzIy"|އHg{8D:!ٞvtC""ؒHg8D:!ٟvtC"HxptHxrt7HxttWHxvtwHxxtHxztHx|tlHx~tHo"Ms8D:Cs9D:CqDzD:Cs>=DIs>>D:Cs>?D:Cs=pt!9"CsrtgΉ\"Cs=ut!E8&!ҹ;D:׃Hz\O"]$ҹ=D:׫Hz\"Cs|tnǬt;f߳n"CstnǬt'H~#tGH~%tgH~'t퇒H~)tH~+tǒH~-tH~/tH~1t'H~3tGH~5tgH~7t퇓H~9tH~;tǓH~=tH~?tHW tHW!t#HW"t3HW#tCHW$tSHW%tcHW&tsHW'tŃHW(tœHW)tţHW*tųHW+tÒHW,tӒHW-tHW.tHW/tHW0tHW1t#HW2t3HW3tCHW4tSHW5tcHW6tsHW7tŃHW8tœHW9tţHW:tųHW;tÓHWtHW?tHW tHW!t#HW"t3HW#tMI+_D)I+ߒD1I+_D9I+ߓDAI+_DII+ߔDQI+_DYI+ߕDaI+_DiI+ߖDqI+_DyI+ߗDI+_DI+ߘDI+_DI+ߙDI+_DI+ߚDI+_DIk#DI+_DI+ߜDIkc+&W; rл]?ǯ|u>+"ѨH_"~CӏptN?!E&N?!8D:Hc"~Cqt=N?!9D:$H"~CO"~CO"~CӏstuN?!9D:@H_U#Lot&W:DIttN!:D:VHk"~CutN!қh"~CӯvtN!;D:rH t"⑉tN?!;D:H_&.a#&.b3&.cC&.dS&.ec&.fs&DL&.h&.i&.j&.k&.l&.m&.n&.o1N"]~$7N"]~$WN"]~$wN"]~$N"]~$N"]~$N"]~$N"]~$O"]~$7O"]~$WO"]~$wO"]~$O"]~$ҕHO"L˯DIDx$eO"] ;Ќ{GϓKE Q3 KuBʋaK{GRH.q?]a!RԽ@F)2iw<~; $R\q-tЌH,tЪ uБQڰKU+D̡F,fh j e(}HGcVE;ۡ~+ +Nw\M;G ]a&vE(;= Jz{Dž㫼ѽzJ[U}G=+4h}h7Rݎ^QZ5X4u-+,ayU?pC7W$]:D;tk2^jF<0P@F; XCgŨ8W9Jqgpt\'hOg{~cLhg|2|0||Kxs: o;=y@WG "_KZOQK7/O#Ҭ`||Fg{[Θ.j8[ PightFKbw'G+gz?pzxg 43ƜoڣSxMEh389LZ9?L+*K]TÞhSW( ZZixg:4dE ttLA*Ǜ\2M8p>.{`{/Jtt>\PxC!gz;[9.[Ώxv~17oT]ߪ{U9b?MD?b=w=l?;ˑpwPhU~0Kzrw5+`ō nuŌߴ)Swr?Wg0~u wPn?^֐x^D>P0Jg ĉUp}w*Ng] JmQ?It^#~DJOAo>;D2,( H7jjsR\м/š+lx^^ !4choeB/~Ka;aTbݸ~\Oa wb #!Lij(S01M3:Vc=ScaC:R ? >ұ^-MS= gpga?;xb$+ -3SxDV,RۛZ_x{y8x0Tz{Gd<Mj$ÊCBz{|x1sg I=8c{@yBWWvWL;/G>hFcz ݲ"  wVxam)?*C,kFhק8~-Drq*0$T2Qay9`EiW/7,o*K%./ߏ5~>DRV=LDd W8abrE UTaeebD3WuVP[Մ*&"Ta#&7+Tš /.9o!Q2-rVq=ϟdofmBDφ+4H§+VEf"EeT!Ico5qŠ2 Z"P"0~+l]g+ & '+=KdŦG.8."Ga1?9T`cEV)`ŞǟWwUȼ"Ê/Os{Y ;|yUledz2?[LTVl51YÌ4+l\Cߪx[:7"t3+&z+z+8~L|*~N9:|gs󘮠D'y7+ر4[X^uU| ٟP9ZC5V`<*Qԟe/+1^~fŘ}7xUYqՐ3޹%/Xx]Q@m85ebuzWyOB}Ek>HbFE)OOwzuztzs 9͇]ϗea9`|W^%̈́̈́#̈́+-?3-Iw\fJ륖D$S9br1^9ZzM\q֋qZ/6?lhf31hkB"_&mI?5[9eQk!xx~Quv8rzGZfx@5#+D3qDw2Pyʸbc74Foo{7hǣ^sR7dE 77yD|C0 -/9xœ֨@ w4XWe<a&1Z$5ssB4:I2 OBǗTAlsū"lc=wV; x*K[oBs=x°M:O`<aYpnX qЭG"늾Atm/3OE;ိ(ߎ71^ ǬC_ݬ*+$.l9~b֪$”lǎSǰ3^ijW+p(7野fWoLJVmc|8xhǘm]?/ڄhuBO':?ߝo&<+ +h8ַ+3_ I<7Up;AʇlVhߊO/7 h&Ffڏ|gf{tӟ|Wh$J˪Kʧe-k4ס"T|^hU''a>4sQQO6GVp*) g.tsIx'`eBKןdž=~2 ?;N壡+??φ<>~2~4u Ḑ_>_8uW>ޑL 띘k>C?7~}~叀&u< P_[@'W.+1_IGu|w,%ṶKVܱ_W~MGA2Y/? #($W|'R+Ϗ<\o%9?n<]zGxxyw̋3gޯ w'7Gޑ.^3v~ywlÑkx8yoUHN\ŵ_/bW~O-(Xku#УOO?G_ǵ|-p6uqWm!\9ɷ˿b@l76!uPtYw\0 endstream endobj 24 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 29 0 obj << /Length 447 /Filter /FlateDecode >> stream xՕKK@xHLwf_YoMȭ ZA0"l!ٝLf~&:Jx𖬨oJpd i$vf=Mez'2q.QqY )JDƴ#.Ґ!.(kL. K[)%) rp BbWdRi; S2%/6bl ?S}2ɭİoԈO?zY-q#LfmD;N},yYJF^ܳ5 ?>'d©y@Q$+1i FGctuqicpڐ8g|uY$oIyp $xSJ_,+,lP <A Zu`F弍 h"b443nTW endstream endobj 25 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpJ6xe5E/Rbuild179d69c5d144/gplots/vignettes/venn-002.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 31 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 32 0 R>> /ExtGState << >>/ColorSpace << /sRGB 33 0 R >>>> /Length 22602 /Filter /FlateDecode >> stream x%MҦ&f$ @d7)-5Yn֢ m9_ws_??ڏYseǏWGR?ҏG9QF9ۏ\Ͻ~Ӈ\>\pO 7YZGKxZ;wIN6g^$]8p³o\f~A믟3 6pLMa o߫?Ko7Uq߫kx!U4wnOn x3y ܷ0_# cN-\S1>3;e{1>fL5V>fF^45޾eۼ~b=2crj=&{oqk/>cOVB&>G1?Ӟ}X;ŋG ÝSϳS m^aw~cb]6=g߶S`CM1o>y~n/Ϸ}={zX%%_otlāu/aK|zJj m%|X`ǯ)i^T`x^Ɵ!+iJؓou|8z&j%9q?/'Kn1Lo^1޹ǴE5>?~70?Jگ_#/#O`w菗?_,*%nq>ܟ>Wױl` ||:wPr#c>~u>}g8>}?Lm1_^:~/*F?}Osx_x}Wٯ|eڇ#0O8&0D|Vۇ\>9Ns%;x 8 80}|/Wb,J9|y~jȥPZxm0%_^ )q}tq$Gpۤho\$pa=i=~8KO:?U7*?+h>p5sp\4 /Y x>-6MS}^{Cii) ˆ/NG* ƋX\O0c~ Ϸob2x"34~Gp!@7i~}30{$g?20LJsL0($aGapدo[րy?F_Z1/Fw6o"ƶE{0| 33}9_1,Z5/Ǎ6xc=6o9wlyO>d`Gy T``"p?awo|d`[ƿ/syQ*`p ~> ߲77p]|?-cn~nv!ܱkU}8FQ1 ?1K88&%`ڿ8z)3q8m`Qc83Yp0x`},ŏ=Zi_I12~< J 2V>d/c\/sL= c6{1^8h"b4?qPW۝~~{m=pdF&ڱm1Ώq0M q68V&B58('7_4_ /q>O*[V/W~?  8<#Pԁ~#6pN{+o~ſE ,~~E,ċ>Á~ +y1?܍' gZ~&21x#0\ ,`~~np<7f3p@~d~4?=>ho_0^){X|}px翋~NYD~^+_Sd<&ppDzƿz+܏+[_pf{OOί+]ᯟ[s>Z?>2~> +wj\>sp~}Wg#/c2r>?64?lҢ}}0޷矅?vyo4>oGyqW_ðE9_Ex^O}X.^>wn}~P6=|rKFݺc 绳njF#&L~~& ^E̊x[N 9> >tql#i?m3-xMg ˹"_Єyل]ǡBԤ5t05 c&,<ѹOdqk>Lw4NB)Qv3%Z4"؋'TAUEq!t qXUr!b:[w8: "Ty2߄R,XW®c&^e pW1&&B0ve(ax6M|3v䃈mۃPK'D$B' :ƨTq!.0A(,F Xŵ?jBƁOM0W1[v/6~مNݪJwrsHV筍^FXѵ?#Y ]:sd} UQMb_GLU܎]H;<}ͺH;'6kآ0sv^D"Zм+TںkBkp3TB SߢlVwI) YRٍȜkUO=6'60fHɚfYN@9*KXNfEeE#dc7󍂑>JL^s־@띓u>NAj7mE ~wHj7t ;~n:Dr9qwt)I?vbQU؀\2ׂRs!ky aq^#7H“0  -+{N3Er nny?@..ArHH[܀Lg=oJ닜f#x &LAqF:ǧh|;GOC;ޱ̔"Y( 'Y$a%6oL!˞c@`H`%dx2hiOy=N1?o2Y>C@&0 qv+؀'9:,b\S$2~}O!+w=^\iڣH)brx+Y j d5b -(;QLEȌfrB~1&Qdᘿbw'cuqfg Qx=sYL,-2c do7k39M>0+:0R`ڿMy93k 7a#<ɩ!TrI|Ri/73* \Lv)l{$kOS:w1E<|; Є# @x^@H>KXȁ!M`6ߗ2 SKn"kϟq“O2qF g1DՈ1Y;`^!2Ub?/^}qGqs7my*}p< Ew g< Ex(HUC=#͝;_ Xw>Fǚ8>3#Jw:6w=z G)?"Vrș7^y=$Kzs^{hR'#="ٸ.m^Z=u^{Wdr/0m;ᗻ_"Oɟ,y:?k?=~r8B6) _ɺ+ 3S8Sr 4drvgqoϾ蟙dDmGVVD[{.h(bןD.7Q0uU7l780+Y*n,v_?QKŌh x'W`- "x8a-%Q+:50iM'^g6_ǃ'UTS^>OW|E0/~|ʋ߯~oy~~vy 5@gv=xb{1h~s}m}n}]3uO{q|݊z>>m1rtd(}=3#3ItBr};sĬXT,ړ8V۟a;{Y85}|`9S8k>3#j1c,mA^57{r|$8XMq /,*7~rbH/o'K++,G;ٯ`܌ iqwpkc>1 ໕bo?`kl_ay/Tq'_ezǟt ,ZyB?xěVQ+#XF 0.Kl2t[Y.r`Mᄽ<mǩ?$X&{EL6 ȪwF} .@=o;t dڟOeF~C"c]DG33C [7+dLyV~BOFËayLy5/[p!O>'$ݿ@Nw:ah^2=v/ >#RX`ŗp$x*x"5$ >StX/#3?L6lɃk/~_WN(~{ nvn0ڛwo*b{zwzqb>b8ږ_CMfA 'f@u_zR@kjGʔxq}qS%7-yRk/{_{AH_J ؾU}lj_++NYc~>W?'xSX-˩*éI#S@Wy] ۴m旽_)>䧍!}=Teϖ}*߮r9~51m&cP>;G~?BCky]9xRn_egO f~)w}=gz߲*sE_a.ڿjހMIxO3& -|R(„|5Kt<'& ӞB)/Ky̏'7&;|()Y 3>~:U/_XK)'zȿGV@EFѲA?Gx^o?YA.Χ+/H.;YN,Gc)L9rx^< p|eN|Ӎs _/*/yI~Ll!Mm_/xA % t'}%7ܹ]1(u~ϰ]<laAS`8~S)90_ wv(/i%q>ƃDCO$ۭp&-G-*~g+fr<mbb >P|ߟ7$\+w6 )sN͞__vr8砂'+JC1d?پl#$#[.9}/ "|k;|UXзǍ ˬHVXؘ? teT_ +.>Ҵla(gGOW}B9&_8? LV[ M~>\*.42 R& P?0Fz v[rw* 6?xw;ZHm״xPJ͚*Ȝn*.VK[3u ##(<0?"Np x}ȩvpyP"Zf;æ.*@H*7EQ*B0ߟ׮ɯn(@?EѯPSѠob:U,TP>?Ke;*~oT8C*g*T߫ l)r+1JLpᦫ=]!pR#47p 1_u0ű|v/ޱ H*bTW<ݢf?$I \&8!Ӿe<)U"vEg= KQ~:4!8 = Ĥv!usQ= 7[Xߟ8՞g} >c*G~ƨn'O /"sUv}:Q(Fh&.›Mn:ݎjQ|gx~$‹GFO{r/V;ysw{x]칟huG yn\}XOrƓ};xS=}_+{>,^ ((М|]T@8y8] g=,;eQ꬧㮷EE^Y;{rĵ(^[kW#v~j{uզܱgDk6ٰX12kB/Cv'*ĩH N~Gj•WfyW?S~`_bAe`QoY? | sMv=}nG\Ÿq7UA)_z]ԇTǩzdYou}5U&^o/"^^! xh5"'=}|;~ Ѥ>oAk g2n SwAʙA8z=3,@5\934Sݙ: GŒ <>Z1. 5g$:=@ B3SMgCcY@Gc!q-Hcav-P[ v-B\w,`ڼdZ]}-JُY\G س[ٚvd@׳Cey;BQ|<}rwNtghh{4O<z;;<I "t\! q6U)6|<`""'<62.?TDI#m=iI7{pu=2涇XC ,xiT\Хy=جp!ě,!Cw\:"x؁WxD^hwz1Ὗmtl>Ϯ`T;|xs kO>O|{G>%zL%]>e'PGq}7^'zziDO>':#9stAǣ8'BѳF8r~i>3}"$Tx*s=̆'Br"8*.OdzQFJ~|VknGRUY~x]D*h:B/A+#lE݉s"tp#'W`-`:BX+# i@!;Y9O#o'獀V*)A 3zKmX=ږ9_6P1n/Ih=&4anpnTFO\'PpeY 5>;75XweGctj֝ A=>; n Es2]g82'Bv2&̐1Qţc;`'.eh5n'"tȐyPC P:7o)"ta?aBq3PhoJ'dd"B +'*O 'V=ȅ ]d@\7W!uF.A5s : dDR &f8y3kfH#B͠OUrOЪdp#BfA}2ERg#Bp4JQNTGAJN;02'bˀcܺ!n3ld o =:՛G'}3*5> t̗!P60й\:!@0q\!"tQ\1?6""t_YbhD. 38*+#p K2DC I,]8 }_JDPA`ފpi)P}2ёcXðAH  e2|"BeF{1"BWeFԴ@Bk A!J &pJTxfPTj^J Z2P0T:v^(EۗRC] \YDr X5C-Η/-ؗ9u)ptR0B  ;fU5d5/q dԚ ;```~ZaeEa VX)e8VT)ӌaceFa`VC30cEZ? \A8:0 '(0%+\G `+f0`rǺ ۪3p+5Ca2|C1+? `讫eqaWzȁaor6/90ڶe@X3ԁc=ax< qfhE>Tw0P\[AüsU( V8@1 ( >VP@0 q+0pTh?V[!R THT@@P`y~$O2+hB2s*x8 !+<0q8G1*[ (WHy~Vu+<] 0y+ļ\A 3OWyBlXV>r/Vx_Vپot*WL*V0ú?歐(WXzr/Whzs'r+4 I )/S +OU -2WAj^kWub_WAvfW0z Rk J waV(TT4jG1* WAj)!2k(!|±B*QWq?nW! GA*(,|u be7)8w>LǦ"l*G.8R5*:yGU+B?[ c|#0L{HG13sB'-gI77p yYa *iQ^_`JU8͍OGat3b,#jQ`يQJ_+MEY+M i&Q+ȦaY pG6u*:_g+&v88 R 8z~W]_U?\`U*_a$^UFb&_̃Q('cU8?,? R($_V2QQTQ`̃Qp^gUn\hUά8 ͫ@ ޣP ~_ ֑(5*`?8BGAzO,W|#*xGt= H~&OVr_HG oO頖?֠(nz;e>2O\6Ɗ;A1osPԛPE};eN;(/syPa v8y;A0/N̅u:P áOD)>۟@x~@Œ" \oI;Pz<ݡ2u:X}åߗ;`}C߷;hz>æ˜W! SmKVç;z>C;j=Z/Pv:j=Z鐚W;TeNU(DہUth9\5ƣXgQ;deOYӁVt=leO[<v~p:j8xoN_G*Nowx:tV!0OXp*Hq??A@/ہGvh1og#óZ N,w?uءt?v:\_;ϕ![-G_|'O>ֻw`t"|ES xOrӧC9y;t8_?!U}"}¸/['*4ե=0*8DX)V0 |ftϤ&.Q tظ]E%]gr/,F{>ĊT {JBPήJY9o%B!y8x?K Z։0U4TA1NA2& Cư0:"ˊj$:œ \T9#^5sq"+J{ϾW<2 F c=+QTLNTXdW0ej8*tr=bMx+ x2}>o_p0dK{^ |Py^C>zLbG:<6mTl9l"CrQ/m/'+Ls2pLfP㉣פ _{Σ+*s9?+^d.o&5~$ _s9C8Z=~IuC>p*&EfBMGx;3۾Drӟ2lrd#`gK Mռ8yB %y?SUfUYW@BO.03Qcܞao:z鯋! |*b7_*:`xFPhu<ſsw*tk vVx-6Hgx7 <^}3 h<TpUcPA``pMuP;2SxP!;7 eBDX~#ʈ+נ&c)pcWDxy=E8sb.2ɐ@ Eh,*fPtVU TfXRpŤ욟)#+n&MVtEĤ^oskNŀ,`Rqny?T`Z8_|!#&ϛ.#x)['.M"ߟIJ)SK*Vԅۀ>5/w X2?.el9P"*-C`hqzz ѳezmW-*.m1+@)GF(,7D$nR00S P|כ̐bM -+)Uaf>_`y.V&WD\63_=\ɐH0`12b L?=| \`;3\0_2F.etS!Kq/p%#ȆtZ,`d;8/ MMF"{%ٕkʞ\4dx,d]H=H͖rp0 YFH(oE ow#c'i3x'{=zesTpV0h:^`p~o쇁YBn)"t?f"zwoBŬx3:]<ƃ+O?oEzVt~z&#,׬m7留;?5W6+5?5i/O%cpST[Zی= A.FOcˊbXX볋Q[=/C3mG5e_'ٟS__?ܣ0#5'WDeG b ¾S!xðB! P}ZOH@񧺤h0< Th71L2\qj߱`&gkYdpHc?%b$?Lkӿ{?AKIo:p?>O.)FX%UUgŊU0xУ&8{˿bOX8?%{%39>s~T8 o/>LFbTjGsS/0L$>`B@p¼SA'c}Yk!Y g:2z?&ƨH?Kh1W!QQ$tyTX9 luג""Ώ1O>nVpJT%( ybʼn%E^'+V|`y=I24\o~;N }!Ղi̊Vw*n{һ#^ץ(Qu^y덧<7߰b`A^ك(($~ &/-F?OJW UD5aTtY!IC*nڃB?_q9Yb p|=Sg!}Tס43G s~m쉽YCgE磐4"UՓvGa*NP_R[fbNC g'~<ŘӊSh5l̏ybTq|T)P4>{V )˿N|oσog8|~C<)Oq|Xg3;̟H~3+,?3rV,)T(=gfb})$~zL&pҎwAԭiOW'b؟DO=܏J܏vC^cTױ_NW_]{qjVŋ(d=?Qʯ"Qx\QUUQ|mŊMWߐ_^?Kg*:MK'*ۿ_Rf鲂=Ӽ%q𙬘BXL䳰2%@KuW  lRg*BWxes~9_vMDr+pb.GߡOoć#^/N_B:=05QYWBw3BmZg*5 ©s)y_\05peTH`7m cx/I?\G+y+62T~` R9RH$@|׫p. fW@|[%%-Nħ?E+%aĿ0k'ܯBAD|θRTVX))-+B*=_KbEB-s?Vȴt@S~VɈZ!d2~J*iW1$+>g|?> "!{׊PnWQ$QA B G">`6|yrOϥpxs(KP&_ ~`|V !p}? +ks"JSؓb?5{/hCK}p ̏R*ŧB"S.d?+7u%oQ}*BHՏP;$_R'w7eB8+xD WVosy:j 3̈I8W>1*A)@+qc1+dw7OV/ƊcVT-Ƈq̧XYq\c|+u+"+`E++IT@|=0G~81_Bʾ?UPSTal}=׫=3`W7X; _d**Z% E> qW:OX&X L;c<+@++;-)$ c*-v $1;ݎh"~Id-C3 pA1 ?sYfު(Õ/*j"#?LP c<Y6x^hNU|. $_/As]u?X1Gqh#+0{Z|r?>:o_{;]/~߬ ! ~wö|a m՘|8u<75uտ)<ФJ=5;zr|/O{Xnެ(%h{wbM߬׌G_ ǞTړm;7+r9E[>IiG{d~.U%gc.LJ^-{ڬ0G7;I|ڦaS6ȟOӑYMWuy໬uDs>k?5\ma?&_yNء*>WeB_VA>?6;\e{(ǟLix>lOLDގ;n-~B$+}l*Z1/琿fwdu4+:6fKu=8Qb_?PL???ǟt!ޕ@DO?3.[I@xcHnoq?f62g-,&5.?.+EmpgX[ AZyaoVO?MG.ΈwP> ֨oe~8?K/nhS9 endstream endobj 35 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 38 0 obj << /Length 825 /Filter /FlateDecode >> stream xڭUKo0hblrڨ@` ɯ"E&Kt[Gxo% "<IC8HiUkSܤJTY J6Ȝٽġ}F㚹;хe% "<> Ǝ82K A|/#[Y.tԙaK1}|FO tijw9 ^y@=X\ bQF}.jυT̤VM6@\Ny2mJс^(þiX*cU.?VatEh3T?vm9dK$l$΋7iꂑl7qa5>;2}#gP< hC6ѷ-ӌaU\S5ZҳIa!+zUkW:N1oO+ {-x& 25ФWA+B+-Ub|B21/2dW(cz+Cډ)\{[Gg8K`>8yRM4:3zSgjT |&h=-b h_t#(  z}mLi1G1('~g| LtSAAmI4U+a!sָ84 endstream endobj 26 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpJ6xe5E/Rbuild179d69c5d144/gplots/vignettes/venn-003.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 41 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 42 0 R>> /ExtGState << >>/ColorSpace << /sRGB 43 0 R >>>> /Length 28248 /Filter /FlateDecode >> stream x|5I$S'{$@@F* )O-y]%OnMx OGx?^{7 #܉^ă g7#<>ě[>Cx$A?Wg"$nSx?%GxwCK\'( }=?׃k$nx.a}Lÿb?хGn!pZs5?ӃGDH^Kxw`>}3}O7ƿOgpY4;&1o_9>` |ƉZ{6?,1g?9bVC*p¹^o|q1۟ڄs|B`\9~ǟS˃W~~xxbzN0Z,}h΅׫_.4&~cĹ9Y.̉}ol[|xQ\x&^\dr>bF| Sg.8 _~`߃<ƛ4ߓ'w{~p?}0|?C y?gc||= ; pϿ߹-? 1w~mOk)~6g|->N{]?I5FOc,7da~i=83I^k^[_kL7q4y?umysqt^,Zobޑc!{9j=Y9sN &_GbܟZxlįuk=-/i_>{Xp.<8ƌ"G馄??矍%ݐ?nFxy4 sbS3)ʃnC_9 /IL3:c/Ӄ9h yg!Y]|=[|U|ߐ}ppL\/}K_?3\_G':|9is?xs~wXaFz|r=f?Fx/1ǻ~k^C=oy=`owy1~~xK(ZCxy=޵X/ {г|90絷C6:g}2>/Ǿ[ `5aX,rk'|gm=0q>$Nw8ii6|oo9޵x|{=kx3~ZuGO(mɿњo6+~l+i~߃Wy2LmY؉u?Ȗaig#K|Uu#x0_Ŀr<|?ػ/{S|a`E;>o}# @}|?fbS! }Kc&2*pN\ǀ1 iin{l 0^ƹ[_ |xp O~8>8H<sWp ;~w8ޙڀݹ~Ei_?<67>_6Qbb93lx<Ĵ:{|ɉ7p?G;Ssp'qKo~ˉ՟->1w7_ X,5y(7ߔ-M#2 |\ϝUn3MfMxʳ1a&ck/f~n៘Wn<ɴ00\r[58; W\|&npss5yim7L\O ĴwG#<9_\9~+)痧N{2?_K w.¼Sx/ŕ|E`߃χISq¿~ǣ"W|dzr]@>k8PzKr3o;+;_+|"@ͻ^* w=Uw=zzz~pi^hAEb/17QOޯg^.e,Oq6x:tx?0_1oy*,t />=/q<}y`ԼqT?yH}p\{^HGs}7Hp?=S^{x^rG=U}ю蘿^ڃϏ' Y&oۣ.cAl&cΧkAtמD`{ q^_{>!_{FB|~mT~#~RO*tRu_?X~e-o?8c{HDL9'3{&)51](N瑿~ĹVb1>Ww`}:D~sw;ޖx}qw.1=WDO<0 /Lx"7&Ni_;^ ~㙉s:ޙĊ88Kq<5q[p<čks1xpb{/N<>9_oĹNIǎg'| |3xyߞ;WD~zI'"'_x~ G { |'8H|H}2| ?ͧ-W)_L|N;#7_8!~3o@lZo> JˀOKzۀ?㓯@?/7YH7\|d8o7 b~|)p}I,7_ \|.'ߛ+77 \|5plOb?/V>b翰~oz`<#3C/<_>χo^>z>p`/_> K}&"2^> [}*`|^> /!^> z6Oσ|o~al/k|$τz|'Cao/_ C}T8?[|p|Z8>|.po5^>p>ϖM/8/C|;~8oaﬗ/(b&|CS#_)>#a՗ |S ˷}c&&31- M|ѴK}7M>|TUA]/5qw]a /Obϗ'MMϛ|3_>pbN >ĉχo "r{Yark wNˇ/JOb^>7~zމzqi}o>yd_o|WOoO.{//r|ߋO{sbM8>bDD}ySO80W(7zz[P! knij귞YOp-\QW())߷xM o=Ja=íW)A{׻οw=L2 rM{>:z2Yz2Yzz@[OTH yo=R?W*z[TTeeA[/Sο[oUX_sOփsE5)Pփۭ{p_z@7 soo|>ӛ o[ST .Xx/:͗NC}[v>S/'zGf`}^1|28nc(oQz̀#k>8s2P{V'zz[/Z o]OZ ow[*zojE`g"Vymkv=nBۧ^1}y+޷"WJop?xOO#[+W.z w_n=uyw+o=^z"<[/@/;0 C(cȂEڅ;-TZ,ӂA" 'cTy\ `y?0Đ a[K-|zEĨ EPfŕ=1X|T!sQUdÊ.'+~a3-2`LF\YXel Z[őd#\3h.yr$vӂ:~dqs6ZCDc=XȤAC^@ x<\HtADoyǜ. qt߉ÞBaNɣrc47+,"!?Gx’@l$yу I-+ YɈߒfpx;&q'4"vpx$}s1?1YQ=Mޏd& GXᚉ"~~~-d(8.zb$h,y$b$F3dږVS$Fqñ>#\3PЄ=A}##r>wGE tGxP8k/e LPUUpMoP#Kю(GL f/{T,K +*ȧ<}3Yѧ=j7Faē!XptU59/͠n>'fj(&5+Y^=ͿcxityAW }=.E"S~e"bߏi|b|qEw///Tݯ @Hpqb[='fAE=Ͱ]U ;^kn}ӴlQo٢=ڶ"0VP4ר8ƿ^Z9j<y [_dĢ"' pŀF / BU )>Ay~p>{431ۊ>*P*FQ)xKQ<ψ!yw71Ƿo>QEV<_UX`}T>F 4?\{BT)Dtb+ 0Dl!(V`鴟6A{*(]3a" Ɉ 1*33h]R!{o wZAES?b?𒂇+R1󿮈={2hs/\aϮh=~#d ID+"; abW[O*HgE䦽ijgć >.T8*wyc;nEjf\O U,}X݌'[o)"ၿ[mF4V'fwY*a<9zߧr="@Q0 "dČVWDV832sy`X*ОF9~0h.ʘ&թ3~*Tc>4``؁xZPRfę-x&5l02} 9f o03`4 (!T8Od&FG:~1w11B Ϥ1{o^?I fq$sjeY f*֔#עvޅpsT`J{9R^@B *p|7 902b'uvPcMb~_[V8;s~ c|/%>Tx68:yę7ҹd} 'c(d$:r!{%1_n28TTD8{U~B\US\%F ]p/A'QBf7*&qڸ?J F2N(%8:U,M~Y*"© SYJ Db,ը|?*\!4[YMxRbxb1|_baG83~֔1Z޼>y0s~z%lP:5/Wi[8IK F$î5m62ON6ppM6765s}6U\ C%1}LfV!}=z ~R`b$heg0ϓj epl#UBEX>׽ޥ@ŀlR,b$N(c&qB)AI!Sm«GSAJ;0dT٤ӗ!DRO! DȾXߏ+ ϻp'j6WWl%S?2oPQh|FTtc7.q_nio 1(^aC88;};HPq*}GFP:ưq|#v,s $Q7031\#exT `hb>kɐ~/g#5 §~)~~`?j5##1ŀMFa8ϫ,Lo{|2ߵG7>y VIw׃w<͚̼lPr%!;1M x<B'#ǐni/bE8W}WpyuX2|^M~~}MZG7)Rq*Bq |Rws>._K8'0o"E{_$~!z]Ya37w(?X1%ŁĨ#>/$3 rnUHcS8yυ\ܬ='+3ȸUa6y^L*"XyL7Vl9~}LYQaU5U?n1bL_|>~K AM* 8yY>_(ݐarΊ!xǠCy?q[?+0%RBHP`pި؄0b#|_]8KR?=?8C|stVD8?21֧Ւοg<E|!7yp9йGS|m6_x﯃RCF]XϫxM|?!ޏՐOf|jSC3O,G ek~?/ccxW'ccC9*~a*oU%.PUpWOxd~u^LJ1?_Y{_~ o+|? 8[2{+(VUQXRW'vGs~~xȟ ke51wGWUVK¾q7#U_حg V :߯3Ȫ?x\?+P3~+ՁD'VG_PˊuER?_]1Pqaga*oCmrY ̷۱ŏ(?'"ď` 듏q(P@;~nC ҭsGB}oBg|p#G?7F(a~̢*βY%㳫CUVTXVofEJV/+wvX| ;sȈF"71޾8 ^{ڤZmvDŽan_*RA 7CSC`4^*"b[_N*+KRCi41խχyw\T\<u{s5[[;O2}&!@ M[/EqES_SfX sp1+Ɛpr+)E6,; 0*XHi젿:rꊵ< 5 4rƷxU>[8+ ?O]7ۮP߭@e~f "ʹ EL S(?` v(]S/_oPrX34RT(p>̇L߰š08Ѹݛ~+ p|C*?y~WW@V8U}ٷ_ӷKG[_VDaLJ>ͿgQH܊}Sd["Bb~BUX /D)VPiV< ;(bG.~bW(8z/JA +]q}?ߥ@bաՃ-,j?nW1EնU/@T|TVSP^ED櫰ŽhtZ~+:Xea1^$Fǥ3[w=f' *>Ik/Ѵ~6R+viVt䇵x] 0TO&&0DŽaB8k8q?zkQjGcTO ?|$^@}sO*&USaVTF~ Rf[Rv=$ 1U( vhWśQH\8TRhQ|/ۏ +V/=~cS=;1wUN1zaGNE>U9-㥎qƓ:m97؁Žgz%J;,-p&7 χ.B /;hF~> +\P</.?⋣T׫?bJC_ƣC *pB7{m _Hݯ^PW>TZ-{el;s<ظgvgޡiQ #G ?*"^hq#l 1|IWKaLW285`3:zGg/MѼ?z>N٬\bei~;^ƹ~.o{|~ǚ~+9~:=Y>_q~#- Ix/zϳ!N?<{2X}_|G7x(.^ _۬!ݖУnӚy?ڐ]Mm?͚ڟg?? cMc~?G+ܹ^c9d轚&χjs<XwvZ񽎊Ͽ:b^ﬨ>o*.oǙtOjŀNNɞWA-q<ǵ{d_Mwibnk>Ҿб}*>=`> .G_I@+a)]QWXT_MIOiqG'DXsY* -t^cGDgD|042]Y|{jV`+YnH 9›_{n@ aT] @F ?V(NG} pcOX&ʉs}!B"iMԛT j~Bl*,?B3왂Z^?VaF „^_OEӭVXj,q({dFRkHRl-!E E3ѨX.{ Sp@u)&p*Z=ਸCჿ6jL2:h2# &duF95*5E5Yz@r>i:[Fc8Ý;qmǚaŎ]?YJvhTp * )~%E |퍚AQ|/q*tEPU85DSSqGh(rOnG/iIEn 1T:z&3NHnxnj^18_)ЈnE 73>`Bj aRWKq =̹0#{0]'Vvjz"TfqWm.ο<PaO{PV}~Q<;AQ)Ib*-*°""׹ʘJG< ?gLPJA۠D.baFTĜ1.4#2ϗpt@ +(Zצ}RLfa{="RJ磆tƓ*fH0:Ӿ;l' 8>q8pO<*$AC;$.)q!S 1Ȱ'z>(K=g(RLDY࢔j !N{^8 TbVPz&1+" ;Qi"EF)Wd4=@8ϟ ]OC󯼮7|iet]xUey]_@P2*b(&BP)PN8NJ#J"p %LEBEO̊]c qqnQe?%T(+UBqUgT&E9qE)M*xN}RP6P!bژZN!ăh8Ĭ(ϧXfE'Y1W)_bg :6hU?\!BE`+>%N"" px+hϽ~g{ǹGV<Cl}7*%šo݊@{܊oRL( ?2tܨPw{_ֹ{4D G2ʞQЦ/{C4*Vxi=Wxy}\69߽5~W"1r wk++^Kw"zy$rH<<`Ez.9nQpr+~b/xqw41 y+S սf-W=PQqT(/cx~>q}poi ?x]HT/jx}1>PHq?6?{PT1<5·'lݎE77Kw+}@a`9{xՔOx*6C}4)X7SL|hUxҬ;rߜmx9WYJW6zڮ(ߌo5\Omy~p rWKg\M\n6xpϴtU(yU<݃]Tw'PȊsϷ>C~+x;` sk<"+OgCuvy^^t4߿={+Ǐ{ VhyE @cy?ND};{BͫYo@Sbj{h(1s8K?L"71;_{aOjV6b݊=Ն_. d{ Io{M=߶&M=l?ge#,_T Wžo̷~VzoʿY k=M_ZHeE֙/"U niI+4h[Yx<|~Vk`Cbe> 7ÑwyK,-moU)ڻ"Ͼz;xfGOݶ"pVs;W>׫::{McE%hXT@Vz668^Q7؎@2t8۱*W><+© Mt0 '?I>Gɇ)ꠃx$${_bw~R4g_!% R^L*/xDzAb{= ױB[~ $G+"0oOԄ GՊPDv|7_͞Ȏ')g# >T7DeKT`LN~UFul :s> +lC&fŊЛ+`?f`X1x8+n97^^_O>U@.w*w:*;??IP`/+WWh=r&_=H:@˰*n>D7|dqc?(KBP|b{:1_zxۜ:kQI+Qw)mP1hWTjS>D nE#mUE>n/{EXQ9o>R,i*_XYqioz󑟊RIo|{@"^*,,֗tuuu5y}X#*"[ԈE`b濭|v|sN,|q~Xw|?sW7t]ηWVh3<_'Fo@aJ+Px%XO8FsPGWS燥2~u7\ E;bE*H!oxT,*6?+Z {.*ܞaŘAYď+b> ߼r8QoOC+cf(~=hQaXEM; 8`=##'@u*Lϫ 9q^Q]->!>RY1x)bU$;빪ps=mթ:Ǐ"FE)Ee+Lg Ůz-P=UQ<|<5"E\x,Ͽi ppeR);h:N|z*\Toϳ{y?" ON/8K$~z~VL&>:z #\KBдBMB/C]T|Rs(H{Tx\_xqSV8݊O PKǡk(Xfǃu{L LljXѷY'ǺƯP.|V q _3C*H](J1!/)+*Z]65hUAEqoGC_v4~> ѰYV=YV˷}G+TоP;~R+o^N[T|tؑΏz`ϟr' EWX1}gܯ +/=Sx|GR"DHVҩխ(DE]B$`xfUoRY?SBys}Hpy+QOyu}ؚIqazz_´=ڠDQ2i W cbf<z=U75+RܐNݟTP&ԺI~xtd[$U$Hh=`4z!M uCjXGF$o{LA :{QSZ ö KSK ۚ)[C3=#(k؂7|=3Cs!S=Tb3﫷BaZq!ClFqaO 3̈ki)eswk|߼Ohw푩߯ԼgRVƊ2 49YQ{= G Tח4t~05ؤN뗘8w}j?cnXPX!n7XA8nE{ {8cb=- F$pO75* 1K`oj~Ɲz"㊈{U')3]Rˌ7" !ܩq7뜏 O)hFx}8"BygQI9?nMmRyZ㶳gWPynga Cp9XuO&={ &svFͤn ϦUl2yh>+5Q)\0AĂYy̍<]ݚ(qX <߫Tsd쁨GhBBί9J<Rxıb =ҰYԴ}ۊ2t[VȡFY,+|ÌiAiEΞ 1 7{_SW#Sn[a Uh̨n+H#Ua*@SNǏ-qeFŚ `s #}}u)*Xh+#>}JjšB6FG^<- Y4´*XeO=K2HUW $Qf*#XcE)RY3ı.{hG9w8zSr|tAgαb=ʕ 6ф=>Vcs17*FP,CGSA0 C>E'xWuѢߋTKNCjNV컧Ji( O1t5HYѺ= -{L$.TɌZ#o:iYA P,_HHxe:~FF5'B9xI,kNV,O-blq{z& s5LAEv8UHFݪ֐D[M[SXHPb&C CA2q5;RPBFI*CxPAMEfN&XЬTAy^^oץp|j('P7Gnxx'}ۨ(Tzo@?&ejm%jpoH*s`UaT *,TJv)^R#5ոnUkeƃ+ m" mp|ǏwV_GE )H\ ybMꁆŊ<Sǟa\8UpᐘPR+1+x>Ί+k'fFEgE+4XD4q/V̕wSOV ߯X#^WXq[Cֿ+hЩ(=|Ƴ((}e7;ߧ+Kz _Vz>+j1<?|Wt:+++*B{UpóyYnOc9J.֣jOtmʻԏ--b(>rT(mXwй/Ly}wPLX"-^/{G>as?q޽N҆8i޹9`ջO\-+zs7-%+gQQQy'2G38/]ҳ C;aր)ѝeH>6q~}dwZU[h&y%KѯmatT=;n) ն`EXN]6V[ElhV(# iO#Z)V`srwn{dh^=k.wh5v `<)Ӓn%*,bf V^E!R#]nZ $ P1۷$ f ?CwKNno[iմK00rD;_1?pߢ"HoǘCN!J08AS?wp&\;tw`''OPWK l{;t e'rw2L[$9~S4VӅETuq&|6X5ՙ-vw%kQG8sx]2ĺxC)j  >n?Ԗi֚Қ1WPQZ˕3e:4FR.x]Dc$ iEox^>(Am19"^j_-Wb9AU(UFZ+"E #յ7- 4TV5j/Tkg6U; :n("yCxQU݄MQ?̝n\UwcmCuIUM+fJVQ\KHQ`DJɤB-&"S8k[S @$ֵ96"Q[2C:cJ\$,%k3RlHNYm8E&YhwFNj+ OC渶 Fme16T}3S(^A[5﷖+wWU&` 2Mu 匿WTh 2S8#Kݵib!3";5)qdڒݵqj S7vC3k&KmO8eP{ e02W^Cݵ~2LXj!3٘wGfm035?LWeҦ02]f~J-tמNigQ Z]>3s2N-i{`2?ϋf&R׃͵ZI-[;8[+8ѽ1ܫZ$6Y{r5|#SvL$+,&;(qk*ffƭM W=6n۪7݄V/Nؗ>)?Z+ǵȜbujLfbBߵ`&eC4 LZK{e@̄vy+#<~ԶVhm3>%<+r^_ԊߜZ/ Lמ1=XQȤ6"*9"W{:\I=F!ŕ"k3W2[ks>ų1Q.*]4v_LW 2s+eN?ǵda6{kqj$>=V|ڴzU6Yc?^-R tjiߜ00znEȠ &:{o̷j-8^|ߛZ(J=M6CxP{/iT#>!ֆvct ]I{=W{wCSrM^=LgeXnO gԛ0\V/a8+' wmژv ﷩Ͳ|Yq`"~8^_SI5~q4>yLR]-wB̷;rbhJy{U_uzWwgPAhn6fo5_}:1][k P%#&0ft.n|S$d"/cj|9Ҩr`ߡ$/ULhkàۺ*>Lٽ|\n;>_>_M?{^,ǧ)L4͕J^~+~GօO;/ί^^Qm/$={oMPKww:j`6؛O\@vb/jG{u^ʓn\Y}^*] L{Bcw.ݕh_]{{{*/W{2$ D +c[j;p/VjZ}^ Ćk1PKbpr-Cj0L$ƍj:A=j'j鶘#{+l֖&ƨuUW'] rEem櫻$孵l+ Q.ުTtmc5=tJdcp3~nj;Q{r+"-Ceڂ8Ji 9xrȹn[L\j'>"Fe<Pt zM[0"d`-"|"JmaVzH:TgmxQ}f9a>QaEpXdD H@W52bO8Q#Njf7ZY+[uW~E⩎nZl;Dz`,A-e~Wۄ)uZwR-j`Qm[b-cu7jm!uY8nv^ NY$puim8"nꑋZ/͵ˋ뭅i7gh0yG\ z@Z"mlU㻨ЬpO-0)6ſXpeΘ6/־}~jkmݝjUSV~?ajܨ*.g$@n^9x^݌Հp̡xQkj3twZuP(Z i4k_E!2SrRA'ÆD,e0 An.糺nV'Og=g-hmo bIW޿V2q%nWmn~\ ^lem4X; kөR^EE"o#3 A5ZMz$vN3RZRuˤ S+.ķ}ײi\k|sUD=[\/C4AuU]N5dv/BuVW|\e Z[hCP-S*B`滜Rba Y+U`B{jPֽ.kNQsk{ZQD/k}vRo^8VwW]ylO:%Eʫ1^ҏ_\RUT[ޟQa i߅EѨ&풞`a)Q٥pX#Z]h/]Ip[\ )=r] T]̱o2 ~6l; |X, yUFb*wE_G.&dT 2C(K w˃Xj󅖢}!ߒlüFUk=4].D⫒>WLXnf?LuJ:S:doP7 =rIxJH_m-~ jUz", `a/z&CYsBsHA P^U3^qu [!hJ8RClvv /[qd%,/'1_p8Pk߄qP8 7yCXt(XOJ~0ÅٹRQ4"l]b` WmMT~ -@p`[ 4-^r^$s%_JMOܹl0U͝#[]t+zvۉ&R j#VMұhlhݟ䩴bwjcU>hp45KMw"O&,BFqFq5p$zǗ,,a#-@΄4+jiOĉ. @bܗb=e;ܨaXt у'駙!TY~-A4{N|&_ŧ7-F~p(N=Є%ezn]J7 p_ʜє(PpG ;Q߷#$]]^|f0tb!5G"p_CN3WjX,3l6jWiaOC(pQ9xi]e0х :A^ݨpS PpS+gMjF'Kz6z d#7 h a{awh'Ceoʏ]Ӱ;v CӸF'95U'3Juhl 7y7F@(&tsvR}vV+Uvrq%Z6 jĭ7SAS:~%tٸgmD?rUq>PsxSQS/ Kg3N@3_޼l z}8\>'si%H5Z;As1`d\.w@s \B EGO)0oHQ`pvaN߂A(4.MS&uZ8HvػtH`hmZh6창]S&e;GٹNv%7=^y/vuJtJtA]کs¨&[uxka@ dx $)$DHrBqh+y X9,;), 钗w{6g{OO^}gǾ8T1G#FY&tTHÂu41K?z)R6h|#k>..֋ǯx@aI 5ڣ?HuxX `؊;=7@xpR#ۢteH||D G>眾!tEk*@Dg E=2}_Uͷ3t~rk~b,()p,S nS"ǯ+=2tZbOEzg, ;}lt2z겜 2ݖzm(=?P.Ӽ>RMד,%i-D'ձEvXX_^-(m eEF{  Phd TZⲀ[ N@D>kԜȗrr?|x{O?|xʩ)?W}AoVo$@1~|}7fjN|i*βs1W jg۶OʮD-ֺӸ=K|Kw7>,SDZX _I_q"w4v%65H5ͳY䥬>+BZ2֛L|E]fJo]q^"[YO7˿uVyך {sE|!Wn ~PFս79K_7{8%ѵ,0Mq>\sS!5oJjawpN:]ӻǡMƉO_I'k endstream endobj 45 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 46 0 obj << /Length 149 /Filter /FlateDecode >> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sud endstream endobj 51 0 obj << /Length 122 /Filter /FlateDecode >> stream x-ɱA($ \vTSHB $:@\#Q_TQUE&MG-nu8M [Yð,ΐV]'v=WN;S3uz3x:cE_ endstream endobj 64 0 obj << /Length1 2034 /Length2 16266 /Length3 0 /Length 17498 /Filter /FlateDecode >> stream xڌP]۶-wXkp|a5www Ϲg+`n>Z 'VT21X;330D03XXU-6Ñmy8~D ?lNfV33'my95\yPQ9NY͍ rf@ ,6F@G*Agh```co*@Mp1w4|:흁ƀ bGP13w]0X>2R[e@l ) [l`ddcek`fnm 01e]X:|8[~ݹ@\H `Am-W)YXYOh1v77kkskcH;2Z9Daf t311qrv_Ul;20򰵱|z?y88N@/?FC5??@˷7wh3}h~QDYF]A_qxг1Yؙ(?rMlcLӱ@w-yT\NS_Uo" ;YZ -!Z'ǏX͝WcM-3FsqsWٿ/_[fin Tq0X-oI~l)fmdc׊s >.?k񒶶8ce_ Gkenj>>Qv̀?, GXaFG3{?~H揄N8?غqEٮnI KFN~/}࿿2@+niƈ7Т6Zυ~o|O=cɾ :*N(aխ2ѫqs8g/S{pB?`U=_<7&϶sBRE{ppW2<_!R:MW4Kc1MHOCz<{{75N$C uZࡵ8VЉCM~::E!|(Q\ڿW@HJ%KucORnv m7]ϞDU/ ͱDxN" {;`Qطnmh>8aqxKsg|Sf134$R1Nu'eH >K'\|&&-.Q3lH YKԯ..qXӃrĺBr֣(xk %nD싗dlR={ C:ny gjyJĻ'ac~AwƇweeºG6j.?"T8sB:fu:(H;[5F!?uЕJS,}\(ZЃS+rRۮ@i-<}T}Q WOY!}gazlxdjòB nCAzOfڴ"T_68&ngeB?PТeZlg>E5W:Ԯtjm~vr#!kU"Gz /5g׼|>>xa NF;3f8$H% do}6* "Xq =O %ۤ4rRo8c)E'T4G ddܼ^uc0 8{|˥2Ϫw?%$x)} BfOw#!#_C891F!:\ؘ'$Ay9ReXSUE@ S1$+jfܰ ߼u6}uZZ؜ZrV`2m]I?ei2F9{pl`<RIXq3T5eVeQwaI xl#$p[B aQ`QKR$#|>z*o> = Ȍ.PVIs+gv_wM>AJS׍X6kxsoL<5΅ic璝ȉޛgk(c6lcye uWC.;bYtK T!ՄԅԨ!VWqr֋οb6aG +f0BL>@bik@QʮBTQ|u~ھ-=59a^FZzM8Xq%7 qT0ʘ iJw"Ph m}y=JGa*X1xs~ !V*0(dnӵqqfo o>Ɉ?>'tEZRYVve,NWD7%΍l>)1cUzʸ F Ns#Ӭc`+ye3qF\Ç8ˋvIprIɚQ -mY[r~WⓁ;VWvY̥8[\Q_ e`2Ú/M;fvq Ie¹1\ig6o92 9Uf M0h)/K䁸fk}$)Ą޻e:.8pkbcqYz͉[GTBhSg\N Ng;K$Ot>CuSp6UٮL(8gI7zW5e IEW]1)w} !dM""OƂ\ φTfu_ -*0~+~>A_ӇV YW/("vk>K7.^`޻=CVN2vȽ}R~YG>dav H$!]@}-~lEe-D=oD0 mxLFc[iR 쏡xn)z Ҳ90Tp#p2+ ׻{cV}Y1Wmx}.ڲwÜLfo%~搀}eN_r?p{an(6C,"BeàprNτe ihdꠘlLF?sW5>F!g   ;a7d|ݭ9hKVؽr{V g6(m {4@ pWc,C͉_7 bˎ<$,ubXgHuL]SzL(}bކU&8C_J1e>3ԝ W8ͷ<5]~Q1I `(فE Slěmgh)+ `MY赛.6,LۉMSfg-N[L'!l)1ZʳpC={V B%+6g؜"T~CG5N~<ςJjdȐU5> /J}Ub^ϴ!j+˚j{+ۿ5%J&y !"BLai` ƮmLQ=g4JZ|aﺚ-<9_U3-rٲ"`9 Mm2+89wGDPY"- l …!VSwmP!Dֶs9CiDzo8!6hźv`ϰ,H FL~kpvL;`ŀJ9-:dBy;/^J‰]O" ~ّ1|m3btn-޳-I)SqWsGEf ;^2|V]){sbV! MsrݞiTMOGw| qE?WoNٳdMTeY:,a5LȖ^vb0\F__WLޭ{kȡsHkKM,VIJ[z` lR*lԵo1h:4'I'6Aӻw,_ي%SrRu&d6ɪ')љ`-B$G_Y_n }qKiĚ䕤OoO>Ӣ-j%~dE9CB#̉ԹIXynH@1$t(@[Ws+ 2*m|s2&J vl;x4 ʻGq,c5 y:LrM]Ʀ;P>G-r@GA{ jjZ֡ܢ5\ܡw-橚gRKT} Vʠ! +Xr^l/d(L xJv#l8.8iL~(D3/ թW꒺$s*(~u ѵTWNj>f,.h°SZWr0|ƤM=&|H`{k۴\âۛ~^kWDjgFl@ AdOR:D)w/Z2@ T!5FhxN.<}E{_A0}>?/8z (Έkh .͘ =šzbXPe@/fQsIIE.*S]!Z!T1!Yd _/YtwFO}H< m] @̟pǍzXxq(W9 W)*. WUW(e0ߪ$>XH:ŭ:\i%w\jeWmRBnB #|&5a#x,%LOo5yx4]tidUރݥE2@m1|{9K;60̅De,ם5j2;UwFגj>/W]O)H<ǁ>*-%6> gRiI 78WsU9]Ҝ֫Sٙ*xp%$NOݬ2fs(A*ol#\gmY~8M=Z=epxr⑪\i3ҹT+~5Un0YNPRJfr1}0aڰ6bR>Q*FaO}^(OņF$<(z.sy8RcП`WP#ehyGcٻg >̓4so t,8 !HJ_4nC!Z .y<1o٧0)Ѯ&^H1N/gW}z$H}8#rB\GR.7IT ;Q|VxW"ʤ'>E`ҽ}إt؄[10yXsk/O_cfZtUHS2݁ ЪwmTp"BegN`mr`6@`;Ǣ˂IH(ZZ`CYϱKMdz S23:Nf-[tzJB%"P'tVVqD%,nB[2e:^}R٥c{Ա3y;NjO3FJݏOFѾ(*uS6G&!V_z#+gKA;kO=zҳ O V+ڣz`Dm aĢ{sQba?`e\[ oB|끴- Rnz*?B,2L)ӻ,$*UO*ʌ@LY1->\:!m~]&ȧfo\N^)QK Ť%QrLŸkΛ!`"wI!ޗЂ< H[ ~UBQzRpH-|X+w7 ʁp%ԋc_/v-܁^ۀ~bBao;+RuW{\'џtd AmW5EUU95k? RaV HADțT |kv;nϒFK|'<cYS% wUP^)rۡݯh(ڪMP]O1BW8rK]I۪jLYhXK)}t`n!øtEM9B+3Ռ$ď)-F;ܞG?<0Xg A4JRU3Or!.$RsW@g W'{z,Վk + [ ,%ԡ`2pK6{wg^GJn_2 tV^\mt-J$G)|/OS.Bu4ŧn6G`PEs6X#ӭma72X{/_RCnhNTr8ܵTB0i!%ÙX! 7WfU,ߏY x s)|1 RPrS- k UnO,ٱ:j"8Ƥљ?-a)&n^I#DaQ]v#>5IS{OM/ceN!yiغƫ3ʾْȇ(#+7Z={x]涡v\n8 ͂Jw58Cu?愍3h>Qmٰwy֖_6*DL=9)G9&?A*!+v@7x7y \e$mfytSKaOf/M m,ɣqo1ԧ M~QwyA,ІPgo?eש)qRN k-Q}A?ٗSqRm} iksS `0[x^kG#Մɞmu: PPG>N(V3I@l,lFTp_m4Q8MMq]]]\eL&ʃgY{$\,(~ɺ"uxw#Uj~YP3-ejsM`0}4[]fS05|221g e>wL 6qћ|z8Ve%(zwkI*4iY%8@68i E~?8v&k(uOjt8[ {2C:޺Bqc/:STE+54Ht ^p*ƐEgqUwÔ{.b f$2]FmvB:u5GPXʖ@!ʓee_Vn\At 9eěɲZp.?|jۏ=[?dE`My{x؊SW*hP%rFРYY$7CG>uRXYZP^\qT덠u4$~Hӥ{Z5]fS! ,U]xS,0f;絥5m 5;z˪eX`oHeÁ^a=eA1 /.ot[+vN-`uF7&p5? r̐|lz~܈oi}jd2[$ HvΥ$*s Z$ʛ6?s ڛ \U,B0SEL8!*EJ-Wa!EzY5f"½/s+йj .NJNt Zx[w/P{zz6fKݨXh#,IBi޾ |6|z 4 DA^fRF?ަRL20fz W:5w 5+FP_JrY=@)S.d,Hy\WM6+HU9(ӯi&\0' ʕTaUSLw,Kw|89JHE} X^c@o)g66"*3n(((:5V 7 ̼ N[b]vXa/t'Lv`$g^j}wBƧDuGp^<aڀ"^4Y2 WO?a 8?yTꭐ1yX1wiܤ(;g`~Ea:DڝX-с7v$bVu? Z'[QoEsߖjwv%`D/!4$9?¼񆇱 `L{p@]@PouFMwޟdA6^HxE(ۦ?)S1€_?lD:K-+.7U|pDr?wcKAs3rs4;=֢(?x'Y^2DJB,U  |s`?O(|X]QH]O ړ?j1ս92(1κm響e0\TaKC]yق:s&ìڊ4V#-#vj;d•'b " Vx4O>˾{d b&A~qU)ՍEJtBҫݒg)'Gu.Z p:j ɹzW1K`hca0qBI-WQCNWDV"VD&02Z űHιQ+ed8,P,‚{/k} #h,xNJ׶xTP BuxmOCۨiF췯D؀ۦ>n7tr;ZlFzE*CLҲ$%d+-g{ڝݚ;~Y& _$١*}N=望prk,HM1xaTՠ./ӱ>LkV3gV2#+v;K,)CR_dKix 4G U"jz'5 NY!i>֓I,b(b*H8F6i/*D*Y~,"$6'CB`V dO*>_=Nay丟HA۴հZ[qAY#}8лa[l?1%; U˾9Zl3:;Ojg~__y7w}654 3=|&fF\…ggɲw !U1fkc&6~Цp+D>_{ۘ2oGj]'ʿ*D &]'/4K :-J^6m$60Ѵr)`x6X5-[IbA6g".<-}ѫɹI^A;3y0y_˿4 $*3 7Ʋh>ڊb Ƥ n =z6/D'}w3r2`/8V+n0堉 ѥ)eÃ&^ͧsQ5GGjr i.]_="h<(qNZӭ-Ppqxגa$Ϗ!vˮtU}dAR#Ji+j&o堚cm~1϶iLlX>"*FsH\U=~胰51ukKvY?s),Ia(+eַA/ycvpʆV <̖`NPNpIeYʆ ہѺJ ĄLVΊEB0ם8=Kmkf+4jjQ*!.,(a짶v +ZKӥm,j;R^ o-j?<ͯgB!:BnITSjwS|UL$`Q+J6h 5SqN&Ձ_ADHOWq87۶DoAM7ouN FuG$@vW^;4XFٵkl2<:D"Tu~!֤phK}&mVgx = *vo(˞S=iGAkb]?g'TfxA+Ϗ XjY*M9[Jʷl-^ꆽNd{Q`XS[A\ī?yHBTwރzIKiӨE5\DWMr_ Ub0Yz5>N!s_˜')/>XQ):e%XeŶ_A8Kb(KU=kfSZTM_HXS~hXyœ# lM#rdG,7}_?3,JHaдbP"Ҙ\nEo clR?ɯ*BOb~&H~hVӺ8Lg gƾ̿if9$/5De)ڧI '#$d;Yr%$YMաiy&bk2#P*_Ӟ-IuWNL;kY.!];6W~?+q&DR bnx5apВC ?-I +Lr^9.ru?fg||і# Wc\8? f%+ Vxy,FT^#agTP? _Q|/Z>lKN)@d@ǵlZμ{4@Ŧ/|>X:~IF{'y!š9M:CqIto] al G>=bc&l隶[ɦ|lxtY5OH֎+oR f콜hӁPX?hl/vT 3Uw ΙKN& zTT8 -O i\*&I71 27TaYPb~NGhʑ7Y 'agQ(0SƷ,l ܠHsPY'RѨ4 a|d^`T<+CVOZ } d c|f{`r_}4'l h":.Ȟ " ΖXSkƾFsĵ$N:[]P(|EV%' $y!Y6?7P r49#3zIC2gR,\9oW^jHJK "0>0~G0;S`0C6 Qɽzn<%o a4sS"1}a~_j-qo3}^_˺jj4>Mg:6%{^뵑7)bbg"ӂ v}8526mU XnaHݵ؊2MYd/0E,-4h7N-O 5'(A$X!#P3j!dg =*X#o[%\7+a{~V#o\XȓG޳fЛDZ Au73sl%< :sVg}F +{M7LIrr#]!Bd4}AB6tYR7x =RQЋs#Ƞmq4RO=SCE%\$yQv>$d  ZBPITH:wu2ĒR8'ʔ銫m=x;s갩2īS0 HC_M,ܳe07c zAQ\gr ggIX:mq5Bs- Dh9v3?aw-cy'GVż݂,m*2>ageڙyQ߭l!9#0$wd%snbd0gUz=ǚ4`%H ӣx4Mߜ"X44ay Wh<n`8έ Ju$" qr)~/V64P$gԻc||l"C9c|%Pzkط|Tv7uHם8*#^[ 7S(Y7Z<&$pą $dde6'3#[o$րferL|IuD=HUdy nS6q!{).w_/E3ۢ<1XJ+)e ~$-B_|b5,!DWњۛ;.nIYmQBwT}{rR8c:/E1ES9 5[TGP[\9g 32qyK=l@:  V^<_hqCRUKmt'aH k KQwϝA4'I,WV5t)*=+H$p DM9F W u 8:eԛ"ljFRG'{N򢛙*bGʛ#RSɫ9.?GeQ 7=^B;'Oe9{hKw_3RjZVk#O/Rex!N-sN { Ŗ-:ql70+X;y;p6%񥯲`尧۸Ob+V>WC&8cK.ew ?eVG `u!Φ1sO.|AU0_g{%QR(k:fz1)ڃ؎lV:mL;fa,m4M$ҙnzgo;wj3⺜/TJt1ސ'{d[єէd$-QNj 4PH}vEB<)AHsW)'*%@U-G;`:ڑ'!9cM6)jġV"ODXw۬M:*Cj6}ՈGTKd)ʍ vT_̏\(6ax6_H&nwtbeRگ0WtL7NKΦPZGU'YA 2 ,zoKwcܣ<3~䯷$ 6)5^D&83vjEX s~&Ia~etûCPpERM%;[n0O5ZglM.~)<ߔrキ2pCnM!+e%>.B'凳:e,+Ž f|8Y\`35v%P} #t_Eg7qtRHW3dGObTwkx:Ye K p%jFCTߪqinQlM87E`?Djj}%_f0>h?1`kWoj1}cUIoQ뻰*[(a;1UytIu୻ChE-/-t"aV9%kwzpVEw&vkl׮v6qܐ䨃ZJcSY̐ 2-~2p;}[5gn*+věY1&7Ŝo4cl s? _h}*Zn$ ׈ 1gd=HWbǦ%z5#"얐t'(5Jh}3Z&yKu×"C|ʦC0_DoȠ ]ۙaA9XLAPx|%G׫IIADvrh YbTɐ\;1nxo5>ڂ5Ҭ[:g~ewv);\r?,8bW|. ~(|5N㨹XB)&~,PW=AȨƍd@8B s%`Iڹ5Jj~Q1 ^8|et4M"(Q8RaE\x⋐эAݻjQʇ ncM7t!4 IdDx{qW$ok܈O$v&7ï~|NF3I;eQVF*m'ǝ&V\^bB}ᵁ+C@'cFDY7[RB+UU+W* w8xHQp$nK̮fLvJ_Mo_ lxŽm=}G雲NJE*7Wmmtm?V(q6 cMBg4Zܤ򯷤,clƁ| ںe~fZ҇W)1et!IH O{F\tR}PA )AzZ}ԎX\#?Cy*́&ތ,#[]Ed*^y4ڊ󥊶!yO(e$sS8y.">9IP¹ihlQO J\HbtJ[`Y+Hݾapki\;sd0΁w<^/ϟx_>]֌ ~&)8ʾvMz]ixZ$:L]L*}y$(<]HS}WC:y۷t͛MPpL{knR|CTx&;)U#rOӰ[LT#5>L[۹g}iXpee.~.nH턁֏J6FRTLR $W㞰XZ %TRXR N悊)=UnCF_H߬ FO2_C5Z{p>1۽eK\]q/n] 蛳tPrlpPuBo4H`ϪBXlTbFt]|!E ~.m675'7sL™Ll!E\3{wlYMp#_W7=BvTʯ5GB]fY-r.N^bk#qpL- Ɔ+ n-i:ϫDKzpZHu-ze\"d%|\(_d]}~䴬>QTPc=Dl8I 44"7ewx\eu|Xʌ@DrNW1\m^JC=eE# ep=Ewr쇨’e m|97%."a o1ىTjvvə-`!Am;NE2[MtrV-;όY*Qo>-e,"cMzrlMmx0la˹2ވᦩfW3h||un,̥5WYZ<0u~4g!̪i5O}l"1C%dTEmG\9Cu(t_.*Zkeo}tg}<&*dR1?dE=NYMF!Fd!/R$dwoi8sR*vwcV^Կ_xǶ}ro^LȯJ&:WQK3iK0VaW-ouTy+$AYhc ZnmY4iӅ|3S]A|IyX1 k*hH _&qa H Z*O0a;:SC hI۬_y>!鈘B$^dءL / DߙGF]M?V +ɨy<,c&}X׵Ş*jŁh̲4iJtː۸ KfE{`8 ϒ>;cBmFŶ)6RVD͊^kJ[! *jqkf=\**An(F#Kͮu,SpÃ}Jn@sQpf{EۑT SςCR5EJIqS$q_^1U,]mcY䩿lkr YN_[vy~pH%db}?a臾a1i>3Lgh_hH3P}JFlr\de0x&elgoP}%NLhUih?PPֈ0 7AX-kVxt=_k~pיfƌ!(I7VB5"k?5rW\D.F- WklQsTx~ dٟsZ*x+el8k ^_)h>{An-EDtgM`+oH*ΎD$էV2StQiu٬FcVws\ZC'~qnP/^-gfJKhTEAMk<54Uħ+H̄ c', ob2" (-FWLVHEV7A΀Ěd|: ,|-&g K3-gZ޿x(l!tjOSxg׮J lNJ!Wba~m;۫fS"a>K&̢Ɇg(mdLG'r>1/hsh0‚McVu?N "DQ[f >J;tw_D$#9҈5M;rDXE3h4 Sh`ĺ+Bx˺c5Ա$t VOM42'W l=7k^(B:u3߷L[Fh4c^zXL{D1H4IDj(bG-3K_Yc;σE2@_sc 0DKhKsΰzUt>嘉?gَήE]=ђ}]>l7@|K-tŦ~ =JlidP~6y>~ϗS%љ_8j;YWBΑpHu{(Z.;Q *_Y2>ɳ@,[`ZKZk bw4 #e<~bggJxT.?ӸCDvmD}lʆ$ƅcD"J#,/kۿ#_[c@Txwf_'U/@gA"6F#G 5*]b(YMה紡C}U)/kHFll?_#lIK0 Fr.pUqȧkQ.λ^$Egsٯq1sXY:8J ús1 Ӹx0ǙI~l"Uc D< 5e싃s-Cu á!ݚ5~[yJHDcѝI(R\&aHXAh. E4zVlϨxI &OhO 6\Nc䱃ҐzktUynd٭g/#4(Ͻ9’9ZtO4ɨj[EXH;A-|!F;}5H0Y"B{ղRMJԱxqV;X$o>v4+1>~Y<cΎ{.=A|˕ )Yrq;A_‹=M J1w~rsw1rߩȗAu.2#O8!(!i,FmCjķQ۷Q'M?.fF:._i -(#>W~(N;:RoLՍ. <%7KY2UkɒA|-RB@n9W) S$: fvP/z`cP;T *׎F:->[GMpUkT yfbN?ѹGeHoOUeahZ䪰 %Y?N`P؈uEzU[YN7B$<=x3'Q弈X,}Hha"k?6_ bPc\D Ip/tcmg.\4Q>,xGqR>#Gc;u6OMSw;ml'>|q~DG apeePd@2l#~6D %]wH}ރ@_gˌ;.t 9'g%dC|6 NKA$k&8wҍmR < +3Ώ/[3ʉn:L& +$ʤVL8_64 endstream endobj 68 0 obj << /Length1 1540 /Length2 8453 /Length3 0 /Length 9472 /Filter /FlateDecode >> stream xڍP\.LCp,8 0 NAn%$GrνUծ뮡&WQg&Vf>+7 Zb[BrrC!|0w<$L]`ca!ԉ a(23 8 le|̿>tV^^n?Q{P4u?hnjPA.VŁtwwg6wf:Y 1.53 d]0@We( k_ru,  p@X/F߽2;޿!M͡O0 ` ]<\߆vgS7SٳMR. ]"w.KB,ġ 3$N {Y[7C,,aԄ]ArNNϫU/g@ s99MMHuw1i4:&Ev[tʬ5Kєn-I %:$;{ɝV }^db& >>Z/Q9\H{~ Q^%z_:N3 x:,{cr;wL.ou؛Yr 6NB*B= ɷb?{|lbf+x6*KM)vG`*14y%YC -x_FWHQe']S*9UN{7yƁ:CBĀܯu-FWཱི/,2 [pTYOVZ.`gj}~#۰1O4o ?/:'qrU!XyrZITD.N-Յ23"bDJȭ.-Kx+m= \껟CDl"}2_,< ! F)ΰa<ۑHRB!#0n~S3\dK}m%5jb@[HEe.B+;m޽'y, .MIֲ+_qbTL\^E >6_6 AgLwW?k}0 y5q/<"0FRw?8&;G؊D+ i4˶BΗCX%JTR W`o۲tTg<@tL6kɩܝA;OFp/%k*~aHjV嗉R_b(\y kh!+?>``bj &+<9/F&k.-͚o萴=v0t3ru(:># ƺAEd7P/6f-j&yecdX!QE4lǸ'o{ Kl;.m6gsucr3_Wd}:";*n3~$p*%UD2SsڥhGLՀd=~JҔ:8ഢQmhhO' ܨpgNWn4׹{R'5647ؤqdwɔ/tS+MBQ'3숲ҹ?p) j㿕򙘧aj],=R`!m0õTt,tP*;Y߬i]rII .릚T`TIז$h`UTxIwP@*BX Dҷh3߫(o^ 8ic|wǒ;(>0zOʄ GAƔ9Bip˼xUӰswO$j#"qn:D5O>XnC \"qUbh C gNof. A{wt!7p~eԛGTO杮3DZDM(A ,(T"|q,?@K%IA]J٪oltrZ.u=K;Kq ݘ*eA 6 izgW&O=*O_P@[:%q!lUrWD8l+t>P<[Y<S_ cWY'1CNY`6zI̓S_{CF 'fU\&[C6WmvEK, Ћl÷BǦ:u- d܄h+4qv{ DK3@4YrPO>I-?( Ҙ 6ϺݘkzٌD4Ȏ_7D D[Nl+4Dɘ-l-3& p[Mb^ŞG,zv@?tJ-BZg4rc.s7FQ?Hjه~s8$Æ>鿄*1%ׂSlKͷ{`coHр2zewIO|7D$H;=&uGݏ*r?νx*kg$aZ"6^İy3ɶ`[^szCk^M/jV&`JsJ-RV$p}߫@ZIz )>ń>mCf%Q[OQŇߢTf*Wz UXQ"UI0inqW/^mv*[K4r T=D g*¼JާhR!˾8g5XbRr;53cmӣL;Ƙa[YLzhrgc5Vq+Q`Qn^{U[W EcsE/.STƳͱ^m*TwQv0}~(wkh}֟(UbEj."t]jHF$ppEX{0/2pd L) scUmmT8C-(wFSrWnvKإ MDf㵉FSbIZp5(%OJ0:oE G=D*Zz%-pe&>yԲ BǾECp!ximc>½b!NꁜXg#W_m,&@T4G CLdќ쩡] ;|"Fn(ڽ\}U@ْ/uZ;D'0q[7:SN͓Usj]Vޯn>>e57DVK/y.A3Xo#R?ń$7xoE!k~O 0䤈~pt[܉%^>ihMo'K8uĐi[hI8DtSHő'HBnst2q~0ltZ4*Rp!;h6£3 |)6vt'%0%lMl`Ic)+mG&B_ cj3az":=۞LBC٢wEp˻ǐ[gqܽBy&=^?;#Hlo-iIw5ZՏdGزТʔVP]/W{D|`qpietVO=XG~:A&^x1AlgM+m9;evJAޖFXԭ'AX;ZB| 2&X=hGpZ>!Bq/y-rQHZxhFW&%s2 Ը/kS {nM^HpglxgDĜB:i%8+d$K7j#֗:nQl)$\dIGbnI ,L'sީvSp@ůjj`xq87j Hfg.- >]E,Gz(DP: .+'cGeD7h~*KQ IhkZ|*I3_^o.>\8}!Zjxwudu8b'Df0TcI;pW87CLzv[8Oȕ_ר`qMm*{/KGy6㿨-Eqx(״] =R6h| ec %}GDmUM2; (,A3>fæK<1Xm.&upS$e~96{[ow@,}?` ( .Vnzyq[`,q^r(:/'R|X%}%OT]hOIDcy :<1HIMݯD&dfљ9яţOFq >bIa4pePW#5G&gSc#_(Dҫ#Fx(# ygKbi‹,}dU݈cY,|Ɣ"eoc6 T-LӖQTS*RGFeh1e1tCEݍ;/{o+evˣw1,[^YN5hd܃?=iY-+ñW0>\ bD}ē$4bSDV(L2xCʴ AUzq!5Bc5Q]dJ?=TS\ĕ@OvCVԪG%|KNec9lMQc+:#:}Sx+|  26:;(5!ETb2rV^s88w}4 јjm_I([ /jG g%䱒KY:6-<\u7 sEdUUվ^.sP9]fŽ$e^o2|$|瘅=][#c,sZ%ojxOu/ů E$Rݜ;M,w%˶tKUII0'#}f̯bVz> 4]wONS1 >\tt+h$JLx?v9ϸ9b-©sᛊ5' endstream endobj 70 0 obj << /Length1 1357 /Length2 5945 /Length3 0 /Length 6875 /Filter /FlateDecode >> stream xڍWTlS@$T1:6QBc66CB@B 4P@N}w9=Ͽ{LHD"B`a,@T @@9#ZP^p$BP0'SqfH@ %eR @!% P]$ETCz`Qpg4.˿^(,##%Cv2B!n3$CcW{ #QΊ|_8` |`_ !ߍ S.p?b3p789x#a(.7LG`C1c k40 Bp8`#M}a4- Bܼ8q.T1@p՝@{ {~u(+ nG5; U:⦎VWG8:jCeQ-s HJZ0P_ͱJ/1@ ,P{A|`4QG8 p9GljaNͣ <0[Ho1UWUH _H`1(_UA8!2M_}޿g,C$0I/]7t?vsZ; Wo4HijCW#?:h*g h["3Fz=(!0:G *4L"KTBA X ܊q7 ?GCG7"$pB(~S\ {~ )Bh{0 A)f&Pmǵ*7|ƀVgPOIjQU^_{4˟gɦ#/)6UE~S\y%32ԕC-Mm\HwV ]쇨eI=ʳQxq`C Z= kyCl[ bK'~^\L}W]K׽>x!c'T߲1j]n,/3!N\bv{){ xޜ"FTQ Mr}ŁŕA EjRi۾b#ȴ-|Z8w6rS"gɱ/$u=٬J]*R쏦YX\ژ}ВJTEO^Nkn'UH~Y?]-V+H?<5+*ɐEɖ I+j"y X~%]y6Amo^^gHxF`^UH!5}R@AUxvV#kR%+HDᆩ(L۾ZHې_X^=Qy5\gBSV{x:zQU+^4Fa VV1a%?OiMv\u3@`%J;x\ZNu^W? KJTwBZ\Π]=s B)E;K3VR&,7S*EW׭<_!\ȥ'{12{{Nq~U;{/ˈ هI1u}.T. ]5͔H9vz/[h"/I:]H";mvX=L^hf\ .\p:V+zmLR1N9Ujp;[),x,w5!stjh\󺘹|mktI:5J;o^"-cJ5yZmߨn>$IOxLRz\G"nr$4B0$o5 !,*h2U\;"p:v17H`duu%K`Pv "sޛ] 6|g @"tQ:糙X  CgL` *n1L)& Iv%[w"֮`vrxL=1#J}fFG3oK4ǠkZyw}|mؘHhcwNE=Ԗq9aA}e#l-}DH1t{fE1SZN6_f9} dzD.HGKͰseQˢ"6f|.˨Kҕ*cWwؗV:y {) jZ\ʎ3]uMA}*`0X=xْ3k۫=ݲ+A_{:29^8l\3fffrzAW]&6*$ V>g]p_tO/*uu0V~jeʷVן!+%e NλpfSI#;TTp6p#uRaގ NbUjx @O?eHiƶܤWM<)(ِJ!|rї#U\}Bfuy#i!X}yv7ъntHtu:_Z__'_ȖfoF%o`I'sS}wJ0&[ 6m--5^?XLJiar@^ R-4,2f;Ӿ;@ʩ8,}Uڒux\n T:>Oms< m.wlrlH)biK k U{^t{jec%QAu+ f0Dտ,&K 0XR滏L߱l,8ڜbpVgWrS8T m I35UX6?*'QPByΔ;[E:W1(Tԗr]^@/ݰ6qV'tk'LYY>+ۓ$ ԕK]vccg J9 Ɋeh&W'4To㍩a}Eeq7P: 3,9Z-RUr&x348uxTk\+ife#^6Y0FVr%" ;aýqם"15KR*o#m1T(d Rtv~ȉPu1WC)͊7LLdFh.b:mwuj$".㒉ğvM(GeŔggcIޡ6o^9|H)M GCS+Ff*dUvV@Ny셼2GKEѮwl '_|"2')*W6XNWÚd1nzn CXK~)vWܸTlOH9{ g'/ۏ)ƅXӍp iNh wWxž{Ծ$bv[3zۤSݟTxE?,z&?hepD촎2ҋu%'}L> T'T98c7SQ`+ħn0vy}7'4!,} S4%=IũS} _j@{p㐋fvkpCِȠ8o[/ Ր=N0Y9;q=MJ$|.{١>5^}l G7c.ۓ}A Cjb6a9}Ssi* KToOŎJp*Vː{kG>(1[cgws7#ԷK/\XbXއZ oj֎ r6(TTT!+s\rzv<pZiRrг|P<:ewm [/`#(=/Ŗo=4cx۞z :dLdNqNqp85zSM!R-Ya\6Ƚ)KM7fA8p(3zgKk޹d̷g5">& rlZ @SZn۲=Mo/Vzcps s{wdL,g.֤G6x~-ܹ&zXav|ՒQ+{C9HD*a{VDMA#CO"-%&X6oLWWPGJf3*Tk@JpN5ϲt;_T,'J5T>|ޛԞn矇 ~#S~ۀv-ѼnۛwD6a:oU So¶D4Ts&}B+<%و1x@Pl@gF!tⶳEk5Q_4+)>#9SLyGXf$q¯ګ,h06#u5JXCf4Dtf[\G&Nsw`7;Mʫ33S!V #7P[u</-LҞuU\Aji_!6td_p:aܞmxV59/yi cLVUMx]ndk1&7A {3aOy`@`7EB\Qܓ9|5jړU)X"W4Ͱ/C9 endstream endobj 72 0 obj << /Length1 1357 /Length2 5946 /Length3 0 /Length 6879 /Filter /FlateDecode >> stream xڍVT۲I HG~)JOBޫT)B PHQ MQK'"MJQ HE=w{kV|3g|^>oj!qA`8ID 46W )D$,ly#XAX?$pM,#ڴ`81 {P*UP@iD_ @R kb|Hw-(UTTX$a8x" X`H.)Dxp>J`p`` 'JH`C`v 1)0`caX@4x#1ij }#菃P)+;cP>0t0!U#)\N]9¼0xX s!:.訛0bu"}p~R~H_!^6UB!8?ЯXxcBc?k7$W >`+4rDA |D+e7e&naH7 ?w (pEq hF'E!DAȯϿWDnb.X@Hw440A^RZP4@\3) Wcn@O[WM_/ae!2Mp{Ni;c,oߨ/0;/Wj#Wc+>FԀ:ߗA!\M8[70!=($*#7 Gj_꒖`X,,D1q'D"~3K18b@l/ p`A)/#X,QVO<_F p~˛*y%J'M Tiϳfi=LEv&bRC͇AoWhx%-ՖB}CEzד_b0g "M[4[z.oH{T^U}dpQNJ$V0K)A8(lL!nVhȧ~\B\v|;,.5V 8>K Fe>8膏(\ F&_zM~~}Z m]/ZB7b2ұD 2#NN _KK' {0<ϭs1 {{2_e_w+| ߌ^U8 :#--pYږ2cU#ѸH8Wᢐpr,spp^-Q:Ly5p͖%'ՈNzRЪEq))飷Y[ȋhxu/%9߱{V޾gBO.֧VMyJ9uњiNH>~[ҥ y\iƈ< +PvQ)ݵVWrg6r+Q j-ZO mSuѦ= EaNB_kŌ5ಳp [. j-j2ٿry?g3畦1Y"s6|4~qjhiY!}SU,)+ׂڃkjӯGXf ="6O*{OVTbjL¸4LAیyy>HJʙs<;ߍDyfV5~`lsVUʫ)"Ž%M`kuu܏'t}ZGm6p5pQa5+ t4BmIw?57>pܘEa8㗺 vnYںM~:YW9OFU&5ZV(S7 ;~Ig,H!,B{=X@ 6_XPUmKog~|J2/:H{}{R \Ń(q^D:2wQ97K.VSU+(kMzVؙ<1  lP=!f!*7B6G qaQ<:Y] yO+QW9z\≀v%F]%f8& O:d 6M5=S'u E[!.òi6s>-p;bW.c<-rHrB*lsH:'n9ŗj>Űmܽp-$+!{ϷLsrvJ.j#ɽ]џ򹜑_.A[h*YH^ęう8vD# <+s-1{S%ޟt#PՔgWQO"Ǭ$hȘu=9U}Nc ;eMZ=d2[剦ܮ)j+(ȨfoG]nqJYތ$? )/(\c#/}H^VD_TnQϭgeW>h|gjƭILdfDHY3e Le-9SKs$ \UX ٫;>}O43uF})b t]aTnHpi/mC7)Ӟ `N;xubȃ]e^S׿2o={M5nC6ژyZ=Wo1WGF[1ϧ  c4M*be>ހFˢ\Fa#;A(T9e1^zmKeKrוu5#_ 0o=@qe,BvrPSʕe:Y(sMgeB \k>4su_f&Ukz9 ;Z\oipTlw^-]Y廦Z$-}l,q9+m̐x|Y(Q=˳sVzm2wAM2kMƈGm\M+ԫ/=Ż滺SRo-9 61^+ Fv0xz`t9 R]i^rf Vy\S G"-c&f:ƁG +2{R:N|6y:a5ɘUFC.Q.Hn`{{> -QMPTڪ7t0 >3Z4rƾF68JPSDxO_)Py7a)jN6v'"ldhz!ծ/l[:G&ԪlhFG>A*^M;ժ 7ZCHщk]1]z:҆4~z_w&n0!-(",adg#Llm' [qto_7/NNsUaj{[F>ʰ~,jn(WWX"&^ॠNadΓb\d\.4Itzy4p'-̉pus&k@) ^$}kK"/ NEBc}~ӗ^ӈ/|OOC>PîuԸ_CpT+F2 )Em9Qq(>Χ։'uHyg<'R q?K947-D.rZGf5f5#ǵzW ҂1Zbk-* ҮfnZURCyz.,vj Oj2+ӖZwWQ`g?Lf12Χ}Q5Ѵc%\&~tU-7cKKUA:_wզjuuxK 1V[/1"kMSɁO]1{CwJwa'%oM-kٜq+DQ}*EF_O{ǎ.F0 ^|R-hxv#Ua عyFbgCRn!!%VXpK}>n)-)``uGܟ{vaIc̐Kȑ.!cuQ%[2HytI) M *kO?mfRtV &:wFR2VGL6za˴48S]e'''MJnfzBesc.7)$]c@q+)/sBcE&B.>}jX@{KtV.v}${P7mTeK=>iOb0Ib21"1M;0bI<:7tg9%f.Ht[ lz+G3iv_Y = ݔq3EKe f]Z4}F6+5Gh7L VNr+*PZŸ4ҦC8u}}y4+3кx9.p9s>ǩ>۔2wN'(tw |cꂝI$eW5.0)<ۅ"mxҵ &6 N*Q i>+ù;8 X)|8j~I9)É>%w|TwﲿU ǖ! &jHЅ/`^wعbԇHxpWu@gw7U5շ\\"F +-8ku >;o3{|2~)h~?_G1dMj}gVVeiv0!<,/qNCLudSV6bb^d;fTrÐƌ䔀S=rS)A]Jat'@jY5v?YaY+S%cNҽ՞eW;Z?$,ZL<M3(2Ŕ[3ti5 [>3Jh2̝W\֫Q6ZRlA=G'[S. f"X+ʝ$@"_}$ gswVh7oUݶT`rZLBIi5b<1 BƳMCݴ%DT٬،4C|ޖsKuntd“مW#5,ݧ+o1D4pĔ:}i05j0ugMi8o50]n,gS z2޵?٬P?p XXϳ[&F\857Yw<)>gWBu4 gS,"8AV+BÊ);AŖ$|?ɽ+V%V~bCSE"^Ε/jQJ{ Թ>yXVUȭh;dtW?.$AKY?xɁŤVq^_~<7AV/=U"Jc3rB{7`B{p?CkGW7IsO gŋ {sM> `Sqf]sUE'ZxS o<`9jޏ1fޡPvySO\X4d{!"D]#MR6grh0A ɢvl( 8`Oe V}oJM}oDksKOQ2N1Wx]Rdg`\30@B@QMl/:oW1 endstream endobj 74 0 obj << /Length1 1619 /Length2 9184 /Length3 0 /Length 10246 /Filter /FlateDecode >> stream xڍT6Lt Ȁt)C3t% ]"䇾9=5k=s_}3jpHYC-AP-Qpsrrs`10ᎠX W ^dZԠ# E<2d-5N2a1@\v,:X@aaA?)'+Pہ3ZY8tV`B0"\\N0N vn@ kvN?qb1t:P+(p[ G75 pA2Vˀh@N; lCl6`G@C^ gX@Z8 `G G?[䥴 q;qrkaO zןku@= >mk-X9sA.n %ٿ-EXق~nnnAa yZq #~ yl=a,A矊FX@ lXlDl7 s?[P\.۟z|8x< 7@Q4-W_%  WSW>ߋXGƂ! 7?L?.BGp;zj K_9V nR[ {5p+\9! M( ApGUV쑏Tǥr+XZxa=^#.Nxl`u}B.ߢ?HXeo/ಂ:>/ .? /e>rp9#pAy\|=8? ʀ]c hG5G'?cz?kd ' k~j%ƾM)JQ)헩,>mn׸,ՙW]//m1_H.4գ6'jޚkOl`}'+<ƤЕsr@nB̐&Oӣ[|q8dv[kZ@|#Z/$d!2k AJx7}q9E3@φw[ck{RAAOaDN|A8<#NlΧhu8emd) 콭uԌaL X)2jY16/dIySTƮ~p5>Km $L Jozֳw(+Gv"dVb݈/7Фf)n:*b 3{kri$=QDTbYPPj~FvN&U i|_%5RrqAFwE.xL9W2{Mq5Rt + 6aQ!&˳ 4hD>53!}UIy>2 {e=XQC5V<*OR26.WWtʨqT}3L(MV?57>|s ?}M€']F הqp5Ehכo1+Tp6̚CC[XԪ:Fla 9DヒJӰ>s ᫙nfNS ,سuFo_~_wIGwP"fL@BV0,12ÏLhAhNHxO.DgDU'*n2{'Y-xw~C!3do(xAxv6 ஔ_ÒףIeOA$o\&Ƣz^wƘ<|҄]RZi a\Jɚԙ+}R ސcXn!Vlm|ih݈BFŃKu5ʸߒ{l%NMe&U!ǐC |~aKDsax*I`;pωJn OIg- 8SSFqA"f+S/+D(-Ir{\sQ}wgķI2r!XNoX( ڐfC##lwD*`-I,Xn!8W^HvOpSHll׿<ϫ$BҽY'omN^FO'CP$^(rXt'?1wU s=qwݮT&^? 8 &.=z;t7>#k越ΰFh7jxLDwy= t^fG%̟tfGۼrhii(f*Q?O%pZ̬;cHۑaUźabV!\;%Q3^*2asf仴O#٢h0k~(uv}kGݍNsI|3!"oGZ|#ĕZ2mR0bVxeh['&Ejo9MIbsBsIM+3Fۯy-97/{Nt̖..nԶ}΂U"絤H[Bff }r`%b~S?t%d NC[yX@mǯ%{Wβl˨GLSBL8=ľַhcJ8awxrQ3ƉvԙD[X M/ffpg6slO(:ͱ< }[>BKʚlE=g=|la2-4A}m\{ץ$gfм#]Iyg9Cu,ٗXp۽"WӤ-Rgnʎ +j6J5 H-T y*2C8-?5^y8mc-t߶ڙ,O(=5;%5^DP2{Ul>Sx0\mOKccֈcW(zR=A$Ϗ唇myJgOC$ӕI}4KfR,EWb978J .TO +sQg )aq5Yݱ:~l 7gAcB[Ke?h? yN 2MGK1[6́"yɐhyFbC,޴Ά5QOMؾ;k5'$]f|JoQIVvM40ٷ )ZZZ']MoȪc2yPuOJ۫!/1 dLk 9xtv+#m본 &Ĩ۷_CC2HKXAvxќKEԊ_+c.{=/El0觥עES%m4: \9(Hr(*9?>աRF'}GfEF SU9OEanχ{6* V8 cn-OwJOYiGG* F3Qu\+ʱ ?%8J=D gGWe6\*a.{B=2Q"Nz`ݏHҔďep[6vyb;b{15})71:shM9rګtfIw/d"R2饫JYqĖP{$.W@ c%0T%~z} 7M|+_$͡ pJ%g ccAJ%0l3A+b9}zpX'd(GmkvRۣ%ɋ -*͉S ijq06i53J*Vf]*[x'%#m go-+'IԱc+qRGsl %V`Ćpـ+IuGKcCf{Qw'Iݠ=pj[!{8nQZT7MFW P5I,%m皫VL ʰnB%je {n)}f`S%'C24f:#t.xU{3겝\9u ^g6aWKh:L$ƗF*|>#LrId[ū˿~1 ˫f Z$DW55X̧FP‰8Al6A ёQTG9A2B-i#}ٳȘ ɝ�QnWe41]ڸƤ-I}ey t:4KE7KCE5bۗ@ ՙZr&Lo|ݎs++n|6uA}:]F ?җj{XNsn4d?fpJߒ|&=IsҢkg #ޟQr^.{Sy$vzِ\w1#(6Bֻ듷C`/Sol.a/f1O*n+MB 5\#+=D9jI켭ZrKձ_ .f +n7dI&pIm旻-ezr#rfZ~3. m=Hx>9E_S:IއGэȫ!`s/%ZO!%rsbl˛\AElg!J;n4kIp_jn|v eB fj, w}3'J&F:{!y!==J 8rZEVm.MVwo Fċ:>S#k 5t˲壞荭KGuK Gϳ?#P[G_@ꨳzג?-R0iXޙ)9ӗ $H H\C@wۤEݼ߂šk]ՖB_'%xZj/(n\9y?\L,]S&n|K̩b9b^rUEvOs lLԻ:OU+aM{&At^)ٳ ?dL2F/O.:0]~ dIedcⅹ[z꼟^o 'pOe\9(oT+^5^bLB\ g] 9@:ҸmwUi.C/]])aI|0& OH1BDP-k+ %M!~_BoͅB )1)}%G+-ZDBO VAp &ݥ tS23rM{W]78S o$dj搐FS͎=Z*S9 ˒,)  k!W2g?..3+]WyIcfƿwgkд+|gom^`e\Eݒ;ag00BoY1%E/T" ׂLh4?lG-jBV4/ '/%y#"#I| ]2tk>ziwWqWIoe߲!/amo4j$M^tzGTjQf 硋5;Ց9Xi/*P17[&Z-E#r_VmKA?c^IS~In`Ȏg j$ v ]jp߳ɏwc8 V׫E"ąNF#:40z/P&ane2d#˶"'X9UsV+ˈ?fmYjl3ƿD4<'8U*nkPl!ԟ wL%4He,g~quWv>S=~RHa_ aTX+҅G-B](~5_|6u*_.|B~[4͜ AXœ Ks~a&ahX7HE<0tɛ3;nt蟾/q铍#Vխ㦞7hYW#S-tVLj]@=[GV GɻWTgs$Ȥ2 J}9M'Esٕn\9Տn27/e_QCeL% l鼯ݡ9*fCnFIchW{x_rnĠLJO'Z U߂\Z .^3~N!qw̵# _${uwbݯ6?ﻞ"l!6w| jm:[N.~5NŴ)Ok5JNNCIӆ'[_*d{O+i{ m&Uמ@yfOE+ȋn'>&a1ήH^E# 7Z $c6 n~u.Ov|H@("sAǯ[n|M:e)O#>wj8gey qU [E|wa]p!4Vד- t1qA^OO 2 ~)QѰ];OU"]%ǽM4XIm'% ]1#]X(+qPlQa/=UY՞N)YUt;B4pja^A`r0f9 zuz" 1~ o *z<UG%YT4ϲ [SwȽo~3CĜ3 ݏ1P˖]]^}W PWQH(kAK Zv{pyJ8fOʼe^0la-1[7CI~ZQV~WI4BNwEMgV 7o;jMTUfe9X F$K- *7@ɂ, v^TqJgOBb{iPʤ 6WJQ ͱ}ޮ8c˵J0 &#)bcp'oZ?FEX/$kF6B N ;w܋($4iNa4\?IخO"ҵLWY,v0@5]BŪ{ſ*Э nM OG̙(qi1*I}utP ܞ|B6>B0wZۛWɶO=c5=/XciUD7[ oʪfU Dۧ4qk\ֻ,ɪN_q+hyDnljd}%0xM+.; CNZ .2*\ZY<@{UiZh9]QCRemz١x_y֛Qtˋ"=u^XUUX} Ԫ`Bc 0(; ;J;QA C*gUhussL\o9v%Ka9"lEU%Qn4l~>@fLSsk%T&M7H3E^P $lWoNC8֠M}ɼrU)!eۢL"[v114TJpEMLaG _eL]2|{o,k:k;Ya\U4ȊJSo +զ* Ļ}<}2f~dYc7h@7D"W up:R'PFӶW>y^/7Iۨ*Qb ?_ 4p."!";G$.?;{%=_8Ζ3ƭ>m[yJ(_! endstream endobj 76 0 obj << /Length1 1973 /Length2 10976 /Length3 0 /Length 12194 /Filter /FlateDecode >> stream xڍeT\޸Ci,@ wwys=9{=FwWY֚"SVc1%AvLl̬15yuu6V++3++;" HdGh ; ;  `ge/7v2(0dAv@'D*13xКx L Ζ@[65Rоtvgaqssc6ub9Z1ܬ-@'+ m-VNCj sg7cG 찱29\̀5y=oFODNdeW)`ne(I3;;3~m@xcWc+c0"*cpىw,Ӏ7ZL dk svB]#,G;w+f.,vV.@.?> 3|@Ԓ"@np>^ {99d 8;} 02u-d`8ZtY"dO33_͢.'"-O w;+o"ecP;szߚ]# s)h][wz5IŠ/0,ag8(CaXhfbQgcXYIhlljLvk;+;2U`bce?xL?':QU%LAfg`h ; VЍiw[ )'b 63WEeyYʣBպ А%bx>v2ý y %ApNv꒵ >/5PcP6[P,!IEAc ?ܷ.qVT$Y;̪ηF (\~sR&e<]쏖r {"si-C'RP :||M*\8goQҷw_@NF0w 8.>);=+M{vjf̈b&G1Nh eآfštH[ W]IxF|! Tau@F7J⽳FrƺD SG6|%$uy;ڌݓi Mg\u.z+=B&˴GkMLj-cI_rsX?f?Y$Y}7S ČnoHݛ]/u3Gw.:z/*7e~Dqh47捨⨩LG?׺=YQ7(ĭH,%ۆ7n2Qe@=,sTxjfs6NCi]]9QY_yH*FoCnxZ`ppw[p $h$:M-Cn9y`HѡQTS`GL-Q䱷T4 Oێ UNUAU`zݽ~ʯ9E;l>]Q}-mWDT4cd@+k4'H|tYdL&^k=1~(PT g^AQF}聬OEEҬ_hWpLtPWU\ RZ^iIbg[QpKy/|qxE Kyew'pFu֘`>FRBYecs|x<('*-FXD*W?! @-̗7U pwW %RKĔP ky6\$Jɳiސd8CFǍvٯu\-k 6n)|I/qOϤd*X椃־;f'ǂʃ4juF$3nyy̆r:mAs֪$I}T[,EII^~5zr>);z vc|S,yA''W;.i׊~`Xyw'y(H쉑*2jj-IJ2Z/Hp`-IxJݑ{= ьȐ.T1T<*wݒYpuM!:McHr<+eLw~)un"ଓdw"x CK<:d>-:;0-Qw_5V~ԁSҁj9xxa0I j^=@.]%Tf_eSlGL=C5^UK%W8!$ݗ? y)Y_N"hgm g ~c 8/M{BT/domX$| Ez(zMx>?(jǜ;3Ny3蓦Go>IGci%ԕG ӧN f:쩰kM '_)i\ݟU8Pjjؽc r@& p"g*6_"lD"*4nvŢ{3yVw~l|rD2&WyuLmXnH_aqnkE]=1 Wsf4Z-)|Ubfr'[s[6P@m㡯Y,!gROt;x"n Ȏwg*ݛDꤗnGzYȽl_[RȊT؆i͌.f|w*(]̉S-mP*C!xE'P="ᨻ1kIEawJd*᧝o0dPv*MTo*z[8I"Wu1BY* gULRs-y8x59X-vGKNP"f% +E9#f't,ږK SeRHN&ߙ֤Hhri0CMutc((ڨc y קf0bę- >8Dn9 Qu{wzQ&`֋C2?f{@A:q$޾NDJBÛޏA! ԤI& K<&Jf (qbY_8qv%GGϣv 2]2^3h`@ hEp* 4)^Hsz;Lj$ O_%'uoŽR}]h_sQ:{Q!4&~Qux1D7CG@DQ9>s[X1a+EhU jGa˼d_SsD]rolQT23<by޶~ƗoiDAqd)ě8_{Sw$<K-#uB50 7ERҙ+&"T$(3x9Hi=kt #8 \Cm{=`KAU彖V˛lO1ίを*5B5(z0:H.HEa':`Տ)}1|tZ/צE,q-,ajJ:H!2C<K8dA_ Gq7,/&L~_ PF9LNG|TI6s޳լ|4?}CϙbiF5V ax,$ǯ۩0Q#. ),f~#u?{-B98z:Ұ|H? k^X!|q|;zRpMjwZkM %H ڰ-Fc^m]K_6}f`c7ۼ*qK۠Du_bzU5|iv_Ⱦme_X'.0˔ˬyl_q̥0el# zض5 yǽXD0ۅ=x)y _bK|{ԕp4p17(ƤS{z@U.VZ%|=)сVA b#<!I&VQ1!#L.ŪP_k =4&Y%1t ӷf| q;lfDtkGbS&[Z[u(%ݲM遞øinXM?mNKD^$:ry{rLhoB0m]q(c/ox}1(9,VQg]:q_ uӽb6, EjMu[2'&xWK8}_xg{2ɶ4VB_>.1)0uNxY֌ (H_P1 \J7 C(iyg}nEewl)ˊ ]V1Sejd DJTxpxw)z(t7V{bzAND6 شq +E"swR $ Y7a@?Ĺ0am/MF=Ym.'][{6͖J&_Gb\j9vډ$}0:~0q _8QľcB?a9߼qe y}Q;2̄鍴k~f'nC|y[-ơpxH3 a0mG2װó]"V 'Bbt"V$@<7X2>-ވ0>/^\ǁU*d@.o[Fcˊ q," HjnL.g#&_w^g .n0\36r br7 FN;D$$-RBTD@]R~UlW c(ֶTWZ 4KfDX5D I>KUu _j:gPK108iTT)Z:_9R8~&Ntyڋ:(b:r)|_ ]xdzWt$~5e=-S}^֡ћܢ䦡VZk< 0ԛHs^UP(4{ =mi=&5)N%E,)RU?ruWD,`綡,)Ed1+nn;ߌ{r]]# ,MTQ OĭG&sX'&h?e?O'z(ja%w;fiO\sj?䥉Уj3j ; b7ɞ D< < ͯ\ &D@3p4$p[yAU-\2 : N=~@@U&vW|5 C|XcNrHqȖ:)c\\,b#:G2e dNr!h~⸋ GTUK)MPiSrjO/z/A2r&VZ$ F9t݂KULmt0H m {D Ѐ,cRVOTQ=Ҩu4G)ջHt]xౚ _sƶz2/$iq7'^Kb3BvL{VUݖǂeV a!YO,?Jj97|pi2\ݗ[_1-}8#n'QwVEͱX|Óp&_Jt+, ޏAաG?[F܋Y*WAL.xtO~;1x$ݨL{QTDw߈ SQcj7 +}٦G'B8ѓ Hz0olq/V3@#S-ze|zqr|Ni!ӢV:Iw Z.S|E?c~Jz;,Gj(w$+4 s,fHc1aU>S=RRؕpmEc+̖Bվw ZMjZ#mRho LL`qAJ]}ؐ`"އ )ߓ*4,Fkp}YB9DG!hW%̰ =J-'!.XyQP:BE,CI!OIj^]CZ]`|~QtXDD%f[zޙGE&UnŏdBNRvEہEn Rؙ=˼Sv "|D" v!CİpZ~8|~PY`4Unm|SFf&'>yE$i>Qfj5S -oβTT,ƹ:3ɡT"O2+"=`!Z(uҍ&"$$]0&Ǟ鵌BVJp/, :|Tܞo|+p6c e#gD-x ,z<ʷ\#/}-FIsaRk\E~yAk-g2bXVMFHmVT#|m6f\s$e +EAC?λ}W ""7RHOq%%+( e6hRPjveM']H=6 )Ԏ$մDeER$>fܔf>jڋ)9_?J긱^Gf>` ǿM+`Dj1=]G;Gj ='&bE;|~2(~[)ߋz&D[:HDݎPN mBc^$aD޷a)QP$|WN8ys0؋DռЬS5ff`ކsV"aHXzZ TqA#IfjzރXzO'tlTYFY]GYG:5/9 "ULDO/a(mE]$I5QiMiu #&o,xi~'qO!| 'r2,k`[a{/XܓNVo&͊pLϧ[- N.H{oǂobS1(~7Xd6в!W _!mnZsXT5Y!;bMu+`~1,Թ&h |ZcZJ?=`B˲'#q%g)EMZ '{X96+Gz7L(m jHA.aMxI^m蒟*5Ol9> #< oy \Pt`}PrH6|)8xT>%SR.z_^L풕TQV*@ma'ηk!,'-!ꔴ_hx3" [4+4߱[d hqDbԒb3 K[ȷaϹR#PT~5gFJAXɻ= DO90ڛidsc OjCOfŻhe g^5%!l}ҍuh6 oELگ7'`4V CRshwפy(Vb&j{B*E͐D -R$رq4e+qX6tFQG ո ?e)u# m "IQ'u,~]=oY([%exmwT>gZpy?!RsQmmcwxG/>Mn{nm-&+mUhukSL*?`Ft>PuR~Λ_M>J Yٯ@kZbK,!%Ƶnay.βxxc0 G8VG L# ӹZ3|#,djJ3i88[?hQeBxAL E7ȏO/"kDAlt-?4-mr߶ {$bה{ȃ#bldj0K%v'H,4N.6!U ayy2/Ndq粉1+Y3hGBR*?!T ߳X2TEĔZT`>a>s`im UhR{:C"8kg3Hvڦ)"/+0뢸X<ȉfzBx @~!fNsrcT ߔc4>=a {wdZQl׉=xMJq(c|,ƺpV%$1OK4E"WSk(_eP"_:oë*'-dc HD1+X})3KG}fvLWǫ.8QQu>'U,XldjEJ>k=1Z J 4CeX <"@Upu/zk^626WdUbdJV0FIaw%EeUqk;;ri_f t߸TK|^ey< dA5a`E'{%K~* ؑ9~RNTE<4c&.ܔ+˦0_cL##,S#6ZMk@y_WHEXĥF BH?p|~B{c!ݭ  7" 1[]6zn9g SV׈kt{УFS[:u`sT2. SgdK^ 3qqI_vUǐΐZ:i:F7 ty9+R2? FhMqu} 2XZcj7NR5n/T̽@hиwv_ZY ǃE5Bq*Ya'ݗQpk#aFfMi6pYxT!E`-/Sõ@ D={cM&觧4H'ϊj r"VW?|y 7+LbNA*SOEhM}{լ~Z"oYAθg%dR@h2HCA9*o/TmǠ}8heA+n{"k@S%\oWj5۲~,f@8,G1w"g5g8K n:jǑ=~K|_tߚB}._Dl0O8hu=I55&FvO>q!7Jrxg\T!uɅ>hz.Ub|Bm]41m`%BcV!w]I4bz ͓C" |cEP5Rn^߅F~}u*mK%C<];ӴC!5IǬ@R`B]}~=N:k7S*)mt7)\_;tf>yq utT_HKzzeն!8 7vzD?,Z>v T%ݍBg$&/V`& Z|TӷbMgޕ%gT5SCJk ֛jHN L8,+it'e A^az+2tEj0׶gEs.QK%;)RH 1\ ;8};Xx*.7ujeYtN8س +{b o),f,Y"w ϖ@zo?^:TWG-NJԦL#F y7戩D2c=ٿH{#òP|XsU6cqqj( {ɄQSս2(s#N?; b84d#֞;ʵC@}icL Bgy==v&9C'9 gnڗRL!?s4 ^1gn*MX;I*騠B*D9Ҋ a7%Oύ+ cAX!%P벹ru8(CsRM3YdM]ӆE۠MC&9G/_oD^F|l{:#GFc+5FT+GGor_F9Gn6<W"g뺯C7 F=u/^}IJp9 (M {G`kpno$Y9suAk(73s"K[QZlt3M1}J;T!\DX05-xdLYAFq wTyB?j !V{VS㾫"bފ œ5| Mک.ޏa՟^b2s1R!XbKȀD endstream endobj 78 0 obj << /Length1 1452 /Length2 6556 /Length3 0 /Length 7533 /Filter /FlateDecode >> stream xڍtT]6! )- CH#ҍJ C3t ( -%t7Y랳}}>ڇ㖎ykL@4 ԄAAaAA01'0Hb( h AcH$J `AAHWI@4H E̡trڡ1<]ြ M qP8 vh$!qB ]mey8Ѓ`0kWˀ WkǡA{@\apCa& a s0j3 u8+;"!/8;me ' !($&;B0ߥCey]PPW3%;+ 昕 H''"U"Ŝu@ =>[6pͯ6ݜALM/"QAAAq8s`P;Я aB`L~>Hgn 0ߎ[BB5`p?10揍W'X#?!@?+3¬G迯dC|HO现(p,* E߿@b6H@Osd4׀Υ(p#tSAQA(#-!7W!NpG庡1S⿩ư? 9W L<;B""p8J ցvT75opLza0Q 0af*!H_ /b]c,QG30b@$`zlĿ.V#.)1/f sĊ JbZq|cmY}?uMJ0ıԢp;h. G_TRmjn{K9"V\ Ry"& E Z UhdHƉ R(57@% %gwT B#]o.c"s GfյRpܢ9cYd+ֿ٣"ϠM9qj>SǂֱJ7;[OӑB{mݑ*am-oJ!l\;y ˕л|9YNe6C5̮BʥqK¯RӶ4, )p2?>'[kV.~cYA[{|>}L9qkַF1rX3+`bnYy}~enX>,K8hZzWS&Fzws"S@- izϥ'lnPO-H jɦZ +ۺSץTD)S3 >f[1qg5~Z׹v9("34bh5*O콬Ah0Op` Hvvs59݇354M uΆe~yc Z^@ e'Ty䬿݇-g=vܙDJŀvM>jb}"xd]j1L-:B+wm9ֳYSYyWfr#-w^:Gej )4{c$}ؙ#mz17.F7;5,:tY҉^Ú0jw5 9A}@d+vs&(yEe$AZ髏FwRNO}#?"MzMC6mޅp攟&ϲe71&IJ~)nj6Y.q; No3~v:hެ2^l/t=A;9t&ѤOaUJFRW`a?%3hhN>x[󥑌!9O|u`jX^=)|5ȴ[<^4kom$wBTIOڳ Ċ$%t=[, HiNlL8쾻s;>HvBu;(J@Kq@v5yҐ}Rǐ.ժ/ҖhKA- lyD)X4- x0UVB Q:j M[|.(E2bf&NrҾ~Ŏ]Exo2%xFT>_6?RW9ܟJuC( 7Xoʃ$ d^A75b:z&ຘ9|EҘ%٦A@ -0"j,R{`=ܷbv+Q`%E%W _)>}0}쭇S}ae} "l™8'ƌj;[Aji4v5@+1^I ՍC *C\^2[֬GK2xb4ѱ/\墶BL;P3(<ɱX_~FyAF;m^r{p̳(ʽ®٩^cC5Ck$̓<0|/_$.(ps$.-6~<.W-!2Ü+r=ޢ.r}k+>#FfsmoF.Jq7=hSB$s(!e^m3R03bIlN^c#5g7ݜz4qͫх٪\tHKODWhOVoާ lJ v+ܢ^5 ,_?ʻE&ŧ֎,9dݭ-jZo5\ӛY6Ԩ^n(eok(_,i݁JLF×CRF+YVTNR/ؼhC^W·PNv.+DW¿K#O @՜&W]3S Jy\3,)\7;G׿ 9"ĝqxwn@NT-G,EڨN)#U'TSA\hB+/}n̢V Z ]Q~Ux G,?~T6w5Oys=zqY•O{X@uFFS2ٛQI]cZd-2x;ndžv ۖ&[hTLK2eMʟ7FYK߳R1SMW+Z&wf˞+Cb oe7z7u[+RZO7{Ns .ub'3jpZmQ{D[$.Ǫ*ʯ9#?/"}zXO(7^*upi M1msn<[vt\KO`0hq gu&p=oۏ=:Cuz<4Su.2d|ź<\yf[d7%w@QOCH> c gm{W0_ $)_wDXNA x< cF΋|*sƐ^ c*ݣ{wĊ`S5;۷m=:6z5kp/<Ԙ:z^7I.mYgǥ@Rrm"xGG3Ktr6]<> lhgp;^{CM8:>iY?ཬ˽#Spkng|xlf-M0](.nj 7~}ޞByW/gng֧㛦sȢNDZxm5)ѺTvcگm~Hy*򓼯,چlpX*lBݏ?pd#@MStQvۮ=N|wK6D6r]s"ƥELy'YёVfu"w I? V.yCSCx %C^:›-ȔaZ*85c%,zm>Q1/G\>V(oa=MCXߎ:W ײm 1&E#Dgo-(>XNV(ӿܬ.r$*eVbTjȜk쳸 4emGEڡd ,0 ^W +%tX0{ޡ wq#UXPkë́L+W?g881L:}d\-0H9cGsT;-,3 j.:Qλ!(*{i*!5BectCO达f(_ }kWx#`V#|龒dsʂ STsKmlSE .T>䌏n| 1]4W]HLi̓4IJE~)6694V6h<(LX"{f"P endstream endobj 80 0 obj << /Length1 1973 /Length2 12886 /Length3 0 /Length 14111 /Filter /FlateDecode >> stream xڍP #% wwNpwwwwȽ+`zޫ{w)(HULl6N ,̼9UUf33#33+<* BCh:lmV6 '/ /33?D[^  :Sڹ;̝G1 p5dlh3t2ZhlhP5''s'';^&&WWWFCkGF[3~z+ t:M 7]#<@Cx@@gt,@hY/=XY?l 6463q٘LAV@,={!tC¿s4v992:4m189O4~;ߗkicjdcbG&vLj6 {gߜw `fffc@7cs?Pud~`^d |h898=_ `2v@6drh3 ~}0[+^1KSX ``ecpq8y8EEJ٘xޥv{^撷}[ 1a`6~y 7dHO?_5o:;&_ŕW}l̬H8 hr26s63+ P``af?2|=GO}wD1c[?``>IOm49&F[{uS[?$ `0cqDk XLFƖw__{jc[agwi&VVX OwNx?/ ;`|f/]?1##6w/<Jzci ;=ζN@cyGU{-%5h's࿺._%;|?-_Ycg|V?@~y֘/Ȣ.F+Y]TeGd$̀ [^Ե10 JmO^qӻmKSBp {^/^-]9Ȋy}nec! J{՜2e3 Qj:sFYN n(s7ٓoqt'QlZxxZ7cӔ8%E10m{vjJ0[9,H{3b`G[gwKg*.\ԧ7 w@g"#FFnRcDt~kIx]%Sz۫"ݬ۞J@ؙ32R`Eθӆ7 /Q9+ 6{QzG1órMn{U)c'kHv̢^هY|GL՝^SB~AZgZQjDz5]Xᯟf}O26+.#R%%&)9B Rϻ.EEr|6XapsiRG;1d< fǏoYNS3#+3̯›2^i !M _yQIr.KiKԦJ#Mq1D QLRzs>WddrnXpfCq |KBUeW[?maIt iZDa_',̐u[dI AbzڝT%XSjq4BpHq3[&UPGgNyc̃XWĨ6?l):_H kG GEO%f']vO@ DT1uȮ*{* *nѷ{Dw~%Qqz{Rδߨb+CYPsݿ'/os'qcŸr!4!~kCBDC/ћY)~Zarɖ$dKw% ѲQ/ܬEǎڟQ0 $?i2 R&la*=0 H^}+ iMb?0:I-2C؟Uc lr(85jyE]p80CnXz}ZHH%h\;5L2qM$!Ԕy IթEu,mIn;`3:f@ u,,׆gOw4[#klA'i"6MZoC5m8=jZon1*^<ċ_.L%Ğ]5lp e--eSFj,26_sdM} 4Um -]zuc;cdVW?ѫXC`/PIOxaS0薼H vt+ mF;,sjwQHjO$J1Ξz^Z[s\Uf` ژ5lڍ4f &ZK.*яMl$p.Gz6p,0aN(zi wr\+hrnbi$šYe-F7m -l=a1\:6! GWi/9╖uPW ])U+{ta4Sr)4eɿ{6aʤ/5/G3t@I˲` `} 0*SA&8l15nvQ'<%CZf `X> ǼfvkĘ:/ė܈3To*v].}.I&X &nHs;ƈѹ7.gᆱdPek96j(5T4[gέq_4qGj$I59B|()@d۟R,>mYU.=ei>sTiB \դ+mi駻ڞȔ`Hf~lQ k笐 'oC<1FU-t4}pgx9?+bM5]l!##چHDkPvaxihQ?MI Np( ׈1«^CBDK*i (pqۂG^J*u#|~A'!,V} 7PYe \k0 6 t'$sė ﷡jd4wOuF0Tc݄EV¼z>)zE(&>pHt#Qc '>ÙYz8k]VB`cM7̘rkOfXD015`d;gRϕLja-A4Tw b6 œ&ҭbnU=iuUƉ(WvssSN_e/'~^A4Pzݡ}1a^,'qߥ5'jLdYX%5}n:/}OZO7SҫR%6 @v3U|q?JxwmjC`*H!|XpE+jz0u", ,|+c,mK>S"K.+FqbMN\y"hiʢ -)Rph)&k~1$..[~ϐLJΦyTRpڶ1-.hGg5 NN9mrRJN%,X;@yrC-@z%'u^ozj7Ch=?sx8= ͉M\D)+h-_F=gRmөn|y;GIc穉Xs0xy'4<`6g/i?Wxc-L(r!i"P""ansK(C|KVfI@r$Uz!&Efv~>leЍAJ|o^~|URgQ_ tLdY#us yg~SbB0%=,R F>mL[(gD8~ 7-nᑎh+a5DIy0x qfOeWrzl >} 31 n6 wn~hqr7c/NJrXtS jDTqDRmsB_4)YX{UN.:lw$\<.3/a˗1%cRVrujC ,"^ڭql\6]뼯U733&TD >θ >i=}"a(b!M)&=(ujB.sF&LV 7h4mF+Zװ1 TtN3Rl tI77в]EP]8c郳q*?p<FScf9 !ƍ$d`&d`]?} ,ytf)5tܙrL.}U䫦Aɾp&y!7" 0.ھ.Y "9CO#[ =i 揮fWl=Q^qʝhT({* R :}0U(m D*ynW0 :1^H ٲR߭"7lIMhzkĻډ`y)&Ȟ_fGI^o$pjl`D-u: r[آ(^>MD$Ouą/P箹PY!OGѶ[Jo="_BluM:<`rX#Fj_>eܭ5o`y,\~zDL_sOiԘ6J~8U~H]_avKX ߤAK%2<Ho05`bzW%c"k2CO-NHU'PKPxV/*<8j X|Ttb<dž]1l/.=zi!K܄KFK%|$LUH tcviieBb[wJ)tgjєmo@:#‡iRV.U&DNhӮ y p{f!giVH[b9\P;e8qlXSFj)!r%T֛5,k$e n3enãȍrTX[gB"4P}dkqIpcu4al9zD[H̐h3C/Ÿ YZQ^VV?7iB:e*XE-Y+rvy{~4M&7[\T4|O|ضP6CRɩ\j$f ꠜF\%fmeb~w7eWa*߬W:spPg#p QFA_xv?H3 !7! 5+Nk۬'a;.o`6Q#y7YB!O4hӛHeq$LH2{wΏʃ/# O |ubR8J.;Nzvpg`YlĿ/V$x2D,摨Iu0 M1az9hɶA?+N~<+F?BMvc&.vN2U'gn)Ǣ1]/9fI}-rDɬBm\ swRM#r :#tbD臹vmcOeHPiZv|ʊthf{1}ӷPLڹgx;ƈX^fQ]T|8'F M-Aq-A|y"`4ccj*MUfQʒL4gs!; 84U}p akiI>icQ X<j}9,.+fLm_g$aNzw - +҈wLF* { >@m  LPmvbK%J8ju D- x2ş/+-dn;JQ6($ZI2GTUAZOM|j88r[QO+"dZ٤7sᜠ[cz+UszklK  AZ)woŜYH$FՋTvrj{Q|%ShXk^,W|ZX3$<՞}5!F8JVxB\xLY E<?kFF{8f%`}M97dٍ"a}C. :}Q+ %#u"%;ں>anppZ}eܜYw+r˶CKgNԮ=F3!r蠑E|W^!Ìzp ^=.|Ԭk="4ȴB9(L{:GF :`S(u:5ĻS< T0BT mscD6B[4Ac$'N0'(i?A| )+Z\l )+ٓT*YF4,Gr;V[V- dG˵,1H7^u!^aoٱDsCv-gK.7MT`"a1;¸)!]Gunuaadt?F`RHxu87QpYI 6~+⣥H>|1+Zrl @^ۊvgڋC?oG)] 0gZ_0eiUs%ߤy>h-H2{  -2}Y*zs{)$+`+ "E2s1ˣ.UBtm6Al"J?|.HI`1yF'Wk" {QGr2|j\3_}DwljH|;-W\7:NMHSuaܓF2ةhyrK~/+&"g6VP83i4 -\sE;M4]pdy:VHs%"^0]Ѿ7\ݜ GxѮQ0>VVm -i-0y-si8 0'$x`xJ&468c&,YjY3|Xv;/SHo=d9&I]IJar)k>-rrc!< a3i\\qk >!? BfWMr|xe-kp Rޜ$XtPCO9Lj.8_K-ڧ"[Z-[)N(Hy_RS bM u/mKZ?07 JoӤ* 6 5 "ec@.p,gANYK[P@rbь P.a.e+K꽽.eaEL0Op͠r- wTI rtz!+;A͖ҤL9UW- g0H$ә).:4E62z7~z%-$(CchnhΤ)U^2LnO<eKuPˍ431cʿAϪxj C۪UbaGD\]YU[y U >{'ѠER3 {EY'S+4\AxI 5$]KȁC[; 9}/90NMd$M] I@kPbա]e1vC3hdÅca|[[ MĬ<췴 ffp7i͗LKE bJ>UڪBE4ݩwo;eA4˫/nr5h | R y4@Ԛ>*nbob c:ɴ%5ߐM ?Ts8O<'*aؖy(UMPNY*ǐ%aK(̓$-k֛ DH آ gr3TLQ E=K%ÈQ*~'c2:eyƼa.Sե㯄$H^S;/ܦ6زJZv^#n__0~h8 &o8AҬr=$tzz5/^2(+&K87#j|JW91P/Ny)Nn)kj_ƕJӫ' ټA} a,l HkJ)v=(KM+u(F16TRH&'%vT^Ohc/A)mMb$ң7zGO/R>XV;I:jPqYώ\3AL-UWYJT1zN` "Qyy+Tr̍;Dd_WLwף==\X^R;n ŊACc/:xn8d| |+ ƒ:@G )GEWZQBʍv 4SmZgչn~h$ >N4D5`M|.Zi?unjIHVϬtML2Ǻ)Rԝ;WI Cp 7I!" x?_f#Hv;`>y[[-LP.y"kDYχps]jd" ELgm0閐&4~yZТ볌eCM1(!Bd5m { FxU}bqFg) `N\Ƿ;#pF\Tng'x}%vM^d:=!gc;2 f'h[(j_FH雖[-I\i(AoЧxI\ϩ-+̹:`WHFV:M5+VQX|lBwU +wZ17yƓTy"1H7e#Y5i CZ~;M3w\TRTieGz>lvnR\ s!^bxBoC$`NJuZ(|CvFh'Ͽ ]R2Qs}B#P mazy2{@Ls0n9ӊAl+F07xH)%nxZ-˶r" `su:a{&/϶ WvH8fߵ91L&#c_݋?_: X#Dg IHM !;?le[{0= %IE6efFTG9aPT7NCpv `/b8Qk>]XFo폢q#n5Q=H#iRhd~&\7ƒ0#bF2Bde#!%'_ʸS揄?m8Dm;i߀+>}e ۴D9w9[7*R"F \AC&ALҘ2GfBW*v<04 ]#b/gAx;20d)H8ۗaC}7I1 MZ*65򌶍sކ+GXӱZ:0 =rKb')+\7LuepT:iu  (D=vթgL>s<%&So9N\5cW<Dt$?ϜD>k|` Z &`X˝Ym4xi+ k^;P$؁FPE[@H6ed˰W0!e9P9՟#H14 y/['iNSJݒ$=+'AQH( ÌGi;\Bcoa,r,E)5)$ތE4p)P&}F<6H;a ށ;sSqȴ 7%a#O3,.ױ/{b*ii]Q5՝F9wy++69 9Rl"f:bΣpy%F^m!4X22!F8nOC!Όs{r5B:[I`Se0/e.

IJRn Cn';| =fq5"5MⷎDKΖbQha=y"b783Z!9qzL!~bFiYEq/>.̄QǴ/㈮Zbl)XNM[&j8@ԖEcx9.5!<ؔn_*-l4lLk4M endstream endobj 82 0 obj << /Length1 1444 /Length2 2121 /Length3 0 /Length 3047 /Filter /FlateDecode >> stream xڍT 8ToӂT(Yc6FY3cR;20 &K)$R-dY# $H։]}}}{9w{~M"3a&LlqxBcx#a( 1a_&,A|de€n X@&K0%BT X1aR2azX;P8]M dA2 ؒ9t YBf;~+j@p0???4ًf܍4?C@6608!&Gf`@f#)\ du` ` 684GBٗ 1n`u2`N cSX7fC1sem6&L//QsB,;p0n J84] .O;X,v?[ qsndo7@C |Pl/pX\0( Yqo6r,p"ع^aT&1ٚqaAhM6@k: *dh LKt5} 5ZۘoA@'],yoϧ7U4#s.1W8 boDLD ]7ڂTgԒCF@?6bC PvA{&YMG =%C W4)Lby(,$<5RAy4 )2]@cPsGj9߂0~U1_L<$/̛HXNYݞ@^0)s2~} xmH^o11Jj%V<돚g;կRX}^*]BslZa8m[9SݥFj5|_0P.ʞIR3l8%ff-Q{ċIyge Ϯ3>_Om!u_4Jx[#m} hV2[~ih mix Bh}~Y[CB]NlHwY;§UK vkE4ܳOflQ6N p.SY©IUM+"I|".i I6N(S/>døbE}WʧתONFN:OJQt<f ƼAvHrǔ`g 2a%~Ubo(PĜh.yBA7;e5++>*SQVaXQS_m+]1HFLRwns̱5">}xdH&p힤 Wֺ#b41u\7'F 8{N&k",v!guߊTI,Ҽ sț2_Wv> H$뺄pdTEcXmNo\D8@dX s}gf0I&k$J؆P~C%6jZ*1X=aN q{G=4/}aYR MSφp9=RyI`UR{#w ?R/a:0G Uʓj73{!eo<~9+|W;ku:٦}@RGI8ݚ2Jpr #ϨnHBNa_ދAc^VnX|)u/UN<;\]Ҧv`.s[={^&p.rʿ0IG7Cs1oėG|={ZҬ'W9n祵 KbNP4&X\05d/iMc\Bgl7t _bLy>d'Rޚ<ѫR)x)m6NZE{Z܆9,4E Bg}9¥a)7:@OW\9xSLA!ӳ__.`OD?HN HHF.ߵu~LdyZ[Fx㹎5aSW' Kkt(ǍEEзDM%̘1 )l̶#g;$v G;EZ׼VeTQy<樤4c;oM.Fڸ4ȓ 0,x{!z$LǥpKA^S1Uy!W|fYYޔ˧TnjG'o4(4//RoF*> endobj 15 0 obj << /Type /ObjStm /N 60 /First 461 /Length 2686 /Filter /FlateDecode >> stream xZKs8W8- VjlyqSv)˜ȢCQN2~J$)sn|&)E[2ADH#8o{ݓprR.pT*+᪵  jAZG;ÈygA΀Q{h\0 +2<5DO@-| v= 3\mx@5AMW20y-h<Ic82X*gS:10$q -=Hբgsc3љ0_/3x AW0Y ͰbmwbX ){/_C ]6 =:(fUUsa/z"̋E9 sXpyvT|! }y遖h/ =j\]EfZ-Fbz@7u.:bt*r O/Yg+`seȪgU ?[0k&Jξa^Mќ/E"/F^7}U`Ӌ.B{^.>TycѣlWa|/Q1g5kz:66޴,哺h>y}p(Mb줟EOs:)@Ѣ t4|U>zbF?d`H6*q&gE5t+8fƻlih1)f#eo&q^ Iwu0JN!0>bǦT[(INDxu&tQ><:L=:bl!3{qjjifsUeL쳘ZV&IEBĐݴy[=#rg{jp}}nh ]}@W N/͠Xo n41ׇ45!4 }WSsZgL2*ُI/r݇\ٲ9Y+5I5rFSԚ+LA$c=i-՞P06Ԣ0_szlg8z<ͫ헨Opk%e'_!g&f6}C|-ֈ:u9a- ć0iRxVrXIOt T*S^`-p9n% nıՒaVZ o 2[̌2模;<XI"tSKMTV x6他B b~$q!31gǗyc?zt]9Èbl]-yݢ ^BEl-Ib1kՅŔ-SM1kEhql[g k{#l8GePeJS?|_ Π}M@R bXd"s|׀ {x]! ciMl2 _V7%yJ'zH_S^!fQ1-fPgtL9g :w4ЏtJ@H-чPŘ~%4ъVwe\}"?aF_0/g] _Eg΄~_sǗz/=<|Gh+ #3EeowK^FUZ6HPWsӋ[g˭½.X_^^# %OF"A2x{~ruHʙe 1; RdTOvHnF˷( cr]!Bt'E#:Mw%j/CNȦ2~O-z(ׇ0oM)~b,8lkl1Th]OPRb:k)OY[ŏDܫI o&?H82D ~ޝ L7 l7`5߭R~J|1!_3pK]aٶyǶmlm7kmՍmrԣkuʷLƲ6[ k-oYh_A3ev[Mok7Xi1o7~ o7lkmM]c q&;֛OFfKd ~:?t6}r dtI/Y^~cQQ(Up }i endstream endobj 86 0 obj << /Type /XRef /Index [0 87] /Size 87 /W [1 3 1] /Root 84 0 R /Info 85 0 R /ID [<2B69538EDEDDA58864962245106C2A21> <2B69538EDEDDA58864962245106C2A21>] /Length 247 /Filter /FlateDecode >> stream x%9NBaAyEqV` ֆm VvHm1qBy͓of'rMv;=Ǹ؃]8S88'q pY>uA -;+QoĖ~葝b,d/ױ:t'0 y!u*?o a&G,L ,, šT ֥eԆ*H_)OǨ"ږ_uqGުF&kk$ endstream endobj startxref 182928 %%EOF gplots/inst/TODO0000644000176200001440000000052212471456254013240 0ustar liggesusers plot.lm2 -------- - Upgrade to match current plot.lm code - For predictor vs resid, use boxplot when predictor is a factor - Rug plot or histogram for residuals/fitted values in both dimensions - Confidence region for normal distribution with equivalent number of points on QQ plot - display "bad" cutoff line for cook's distance plot gplots/inst/NEWS0000644000176200001440000003713312676770503013262 0ustar liggesusersRelease 3.0.1 - 2016-03-30 -------------------------- Bug Fixes: - An error in plotLowess() prevented it from finding objects in the caller's environment. - The manual page for heatmap.2() stated the incorrect type for the 'layout' element of the return list. It is a named list, not a named numeric vector. Release 3.0.0 - 2016-03-28 --------------------------- New Features: - venn(): - now support matrices of indicator values. Previously indicator values were only supported when supplied as a dataframe. - The 'intersections' attribute returned from venn() has been improved so that goups are labeled using set names instead of indicators, and are ordered from simplest to most complex set intersection. - New angleAxis() function to create axis labels with rotated text. - heatmap.2(): - heatmap.2() can now be used to plot subsets of a previous heatmap. - Decrease the granularity of the carpet in heatmap.2()'s color key to avoid visual artifacts. - Returned object now includes 'layout' element that contains layout information. (Patch provided by Jenny Drnevich.) - lowess(): - New function plotLowess() to display a scatter plot with a superimposed lowess curve. - The lowess() functions now returns a list object of class 'lowess' - A new lowess method for plot() method for 'lowess' objects that generates a scatterplot of the raw data with a lowess curve superimposed. Bug Fixes: - Defunct message for boxplot.n() was recommending the wrong function. - heatmap.2(): - Remove debugging print() statement. - Now properly sets 'srtCol' default if missing and 'colCol' is specified. - Corrected a bug causing "Error in plot.new() : figure margins too large" to occur when 'key=FALSE'. (Reported and patch provided by Sveinung Gundersen.) - Corrected a bug causing an error when "Rowv=FALSE" or "Colv=FALSE". - Corrected message when "Rowv=FALSE" or "Colv=FALSE" and the the "dendrogram" argument requested the corresponding dendrogram. - venn(): - Fix warning message that was missing spaces between words. Other Changes: - The smartlegend(), plot.lm2(), and boxplot.n() functions are now defunct. Please use grephics::legend(), lmplot2() or boxplot2() respectively. Release 2.17.0 - 2015-05-01 --------------------------- New Features: - heatmap.2() has two new arguments, 'colRow' and 'colCol' to control the color of row and column text labels. See the man page for examples. - heatmap.2() has been modified to make it easier to extract and plot subclusters from a large heatmap. Simply pass the dendrogram of the subcluster together with the full data matrix and, optionally, the breaks of the full heatmap in order to obtain the same color scaling. (Suggestion and patch contributed by Ilia Kats.) - venn() now returns a list of the members of each set intersection in the attribute 'intersections'. This can be disabled using the argument 'intersection=FALSE' (Patch by Steffen Möller.) Bug Fixes: - In heatmap.2(), the color key now properly handles color breaks that are not equally spaced. (Issue reported by Tim Richter-Heitmann.) - In heatmap.2(), row/column traces in could be plotted on the wrong row/column. - plotCI() now properly respects the 'type=' argument. (Bug report and correction by Wiktor Żelazny.) - Remove stray browser() call from overplot() - In the balloonplot() examples, explicitly specify the 'neworder' argument to gplots:::reorder.factor to prevent errors. Other Changes: - smartlegend() is now deprecated because the relative positioning feature ('top', 'right') has been added to graphics::legend(). Calling smartlegend() will generate a warning. - boxplot.n() and plot.lm2() are defunct have been removed. Use of these functions will now generate an error. - Update out-of-date URLs in man pages. Release 2.16.0 - 2015-01-02 --------------------------- New Features: - plotmeans() has a new argument, 'text.n.label' which specifies the text used for labeling the number of elements in a group. Bug Fixes: - plotmeans() now respects (optional) graphical arguments captured in '...' when drawing the x axis. Release 2.15.0 - 2014-12-01 --------------------------- New features: - Convert bandplot() to S3-method dispatch and add method for class formula, so that 'bandplot( y ~ x, data=dataframe )' now works as expected. Other changes: - heatmap.2() now uses a local *non-byte-compiled* copy of plot.dengrogram, because the byte-compiled stats:::plot.dendrogram uses a recursive algorithm that generates a 'node stack overflow' error for deeply nested dendrograms and the node stack size cannot be changed at execution time. Instead, tne local non-byte-compiled gplots:::plot.dendrogram will trigger a recursion limit for such dengrograms. heatmap.2() will detect this error and recommend that the user increase the recursion limit (via, e.g. 'options("expressions"=20000)' ) and rerun. Release 2.14.2 - 2014-09-17 --------------------------- Bug Fixes: - heatmap.2() was not respecting key.title=NA when density.info="none". - Correct the man page for heatmap.2 to state that the default color for 'notecol' is cyan. - In heatmap.2(), modify default arguments to 'symbreaks' and 'symkey' to make the logic more evident by replacing min(...) with any(...). (The previous code executed properly, but relied on implicit coercion of logicals to numeric, obscuring the intent.) - Calling heatmap.2 with deeply nested dendrograms could trigger a 'node stack overflow' error. Now, this situation is deteceted, and a message is generated indicating how to increase the relevant recursion limit via options("expressions"=...). Release 2.14.1 - 2014-06-30 --------------------------- Bug Fixes: - Correct heatmap.2() bug in Colv dendrogram object dimension checking introduced in 2.14.0. (Reported by Yong Fuga Li.) Release 2.14.0 - 2014-06-18 --------------------------- Bug Fixes: - heatmap.2(): Fix typo in heatmap.2() that caused an error when 'Rowv=FALSE'. (Reported by Yuanhua Liu.) Enhancements: - heatmap.2(): Add new 'reorderfun' argument to allow the user to specify an alternative function to reorder rows/columns based on row/column dendrogram. (Suggested by Yuanhua Liu.) - heatmap.2(): Center margin labels. - heatmap.2(): Check size of user-provided Rowv and Colv dendrogram objects to ensure they match the dimensions of the data. - Add references to man page for hist2d() and ci2d() to the new r2d2 package which implements an improved algorithm for 2-dimensional emprical confidence regions. Release 2.13.0 - 2014-04-04 --------------------------- Bug Fixes: - heatmap.2 was not properly handling row trace reference line ('hline'). Patch submitted by Ilia Kats. Enhancements: - In heatmap.2, when the row or column trace is enabled, show the corresponding reference line in the color key. - In heatmap.2, a new 'extrafun' argument is provided that allows the user to specify a function to be called before the function returns. This allows the user to add additional plots to the page. Release 2.12.1 - 2013-10-14 --------------------------- API Changes: - boxplot.n() has been renamed to boxplot2() to avoid potential S3 method calling issues. - plot.lm2() has been rename to lmplot2() to avoid potential S3 method calling issues. Enhancements: - Add heatmap.2() parameters to control row and column label rotation ('srtRow', 'srtCol'), justification ('adjRow', 'adjCol'), and space from plot edge ('offsetRow', 'offsetCol'). Bug Fixes: - Fix error in in venn() when all groups contained the same number of TRUE cases. - Correct error in overplot() when that occured when a group-category contained no finite values. Other Changes: - Changes to overplot() to avoid warnings from upcoming enhancements to R CMD check. - Move several packages from Depends to Imports or Suggests. - Packages caTools and KernSmooth now have namespaces, so import needed functions in NAMESPACE. - Mark one example in manual page for ci2d 'dontrun' to avoid timing warning in R CMD check. Release 2.11.3 - 2013-06-27 --------------------------- Enhancements: - Modify sinkplot() to use a local environment rather than the global environment, to conform to CRAN policies. Bug Fixes: - Fixed typo/spelling error in plotmeans() man page. Release 2.11.2 - 2013-03-24 --------------------------- Enhancements: - Add ci.width argument to barplot2() to allow varying the length of the 't' at the end of confidence interval bars. Bug Fixes: - Fix error in heatmap.2 when colsep argument had length 1. Updates: - Update manual page for lowess.default() to match changed argument list for lowess() in R 3.0.0 Release 2.11.1 - 2012-12-14 --------------------------- Bug Fixes: - Replace corrupted BalloonPlot.pdf in inst/doc. Release 2.11.0 - 2012-06-08 --------------------------- New Features: - Objects returned by hist2d() have been changed: 1) $x and $y now contain the n midpoints of the bins in each direction 2) $x.breaks, $y.breaks now contain the n+1 limits of the bins in each direction. - Add lwd argument to plotmeans(). Bug Fixes: - Correct error in handling binning in hist2d(): (N+1)x(N+1) bins were being created instead of NxN bins, and the highest row/column in each direction was being omitted from the results and plot. - Changes to fix R CMD check warnings Release 2.10.1 - 2011-09-02 --------------------------- New features: - Make results of hist2d() and ci2d() into objects, and add print() methods to display them. Release 2.10.0 - 2011-08-26 --------------------------- New Features: - New ci2d() function to create 2-dimensional empirical confidence intervals utilizing KernSmooth:bkde2D and gplots::hist2d(). See ?ci2d for details. - Add 'alpha' argument to rich.colors() to control transparency. Improvements: - Accellerate hist2d by replacing for() loop with tapply(), and allow user to specify summary function applied (per suggestion by Peter Hagedorn). Bug Fixes: - Correct error in heatmap.2() that arises when data includes NA values (identified by Melissa Key). Release 2.8.0 - 2010-06-10 -------------------------- Improvements: - venn() now returns an object of class venn() and a plot method for this class is provided. - Manual page for venn has been improved, based on contributions by Steffen Moeller Release 2.7.5 - ?? -------------------------- Improvements: - Performance of 'hist2d' improved thanks to a suggestion from Joerg van den Hoff. Release 2.7.4 - 2009-11-12 -------------------------- Bug Fixes: - Correct bug reported by Alan Yong: plotmeans() failed when bars=FALSE. Release 2.7.3 - 2009-10-22 -------------------------- Bug Fixes: - Correct bug reported by Rudolf Talens: heatmap.2() incorrectly transposed the displayed matrix when the option symm=TRUE. Release 2.7.2 - 2009-05-08 -------------------------- Bug Fixes: - Correct bug reported by Ken Lo: cox2hex() had blue and green components swapped. Release 2.7.1 - 2009-05-08 -------------------------- New Features: - Enhancements to heatmap.2() - New arguments 'lmat', 'lhei', and 'lwid' that allow controlling component plot layout. Users can now resize and rearrange plot components. - heatmap.2() will now compute color breakpoints that are symmetric about 0 when the new 'symbreak' parameter is TRUE. This parameter, as well as the symkey parameter now default to TRUE whenever negative values of x are present, and to FALSE othewise. - the heatmap.2() return value now includes additional useful information, including: call, rowMeans, rowSDs, colMeans, colSDs, carpet (reordered and scaled 'x' values), rowDendrogram, colDendrogram, breaks, col, vline, hline, and colorTable. Of these, the most useful are breaks, col, and colorTable. The latter is a three-column data frame providing the lower and upper bound and color for each bin. See the manual page for complete details and examples. - New function venn(), contributed by Steffen Moeller (Thanks Steffen!) to generate Venn diagrams for up to 5 sets. See ?venn for details. - Performance of bandplot() has been dramatically improved, in part by using runsd() and runmean() from the caTools package. As a consequence, gplots now depends on the caTools package. - Improved performance of gplots::plot.lm for large lm objects by using the new bandplot() and by using fitted() instead of predict() to obtain y-hat. - Add 'scale.range' argument to balloonplot(), option to scale balloons so [min,max]->[0,1] ('relative') or [0,max] -> [0,1] ('absolute'). Bug Fixes: - balloonplot() now properly handles dimension labels provided by 'xlab' and 'ylab' - plotCI now properly handles 'NULL' and 'NA' values for ui, li, uiw, and liw. - Corrections of minor typos in man pages - Update Greg's email address to 'greg@random-technologies-llc.com' Release 2.6.0 - 2008-04-07 -------------------------- New Features: - heatmap() now allows control of the location of individual plot components (e.g. color key) Bug Fixes: - Fix bug in handling rowsep, per suggestion by Steven Paugh - Fix examples for overplot() - Two letter clarification of help text for heatmap.2() - Restore plot layout settings to default state at end of ooplot() example - Various typo fixes Release 2.5.0 - 2007-11-02 -------------------------- New Features: - textplot() now converts tab characters to spaces before processing to avoid problems with computing height and width of text that includes tabs. - Add col2hex() function to convert color names to rgb hex codes Bug Fixes: - Correct balloonplot.default to properly show specified x and y axis labels when explicitly provided - R/balloonplot.R: Correct error in balloonplot when z contains NA values. - Fix typos and code/doc mismatches identified by the latest R CMD check Other: - Clarify GPL version Release 2.4.0 - 2007-02-08 -------------------------- New Features: - Add parameters to bandplot() to control line width and type. - Add paramaeters to textplot.matrix() to allow specification of the color of the matrix data, rows, and column Bug Fixes: Other: Release 2.3.2 - 2006-11-14 -------------------------- - heatmap.2.Rd: Fix example that was broken by changes in 2.3.0. Release 2.3.1 ------------- - Changed maintainer back to Greg Warnes - Updated Greg's email address - heatmap.2.R: Fixed a bug which displayed warnings when Rowv and Colv were specified as dendrograms Release 2.3.0 ------------- - heatmap.2.R, heatmap.2.Rd: Updated the code and man page to make sure the Rowv and Colv values are properly handled - Added the tests directory Release 2.2.0 ------------- - plotmeans.R: Fixed bug in plotmeans - based on Stefano Calza's suggestion (the function didn't account for factors unused levels, returning an error.) - exported plot.lm to NAMESPACE, Remove .Alias calls in plot.lm.R since .Alias is defunct. - barplot2.R: Changed the default grey colors to heat colors, if height is matrix - Updated Greg's email address - balloonplot.R: Recent changes to align row totals with the overall total broke how the marginal cumulative fractions were displayed. Added example using Titanic data that exercises the multi-factor display. Added -.tex, .pdf files and figuers, and RNEWS article in inst/doc - colorpanel.R: colorpanel now allows only 2 colors to be specified if no 'middle' color is desired. Release 2.0.8 ------------- - Added DESCRIPTION and removed DESCRIPTION.in - Updated barplot2 - Updated heatmap.2