Graphics with the mosaic package

Randall Pruim

August, 2014

This vignette is simply a suite of plots that exist primarily as part of our quality control for the package. But since the examples might be useful to others as well, we've added this as a vignette in the package.

lattice extras

The mosaic package resets the default panel function for histograms. This changes the default for bin selection and provides some additional arguments to histogram.

histogram(~ rbinom( 500, 20, .3), width=1, fit="normal", v=c(6,10), h=0.1 )

plot of chunk unnamed-chunk-3

ladd()

ladd() provides a relatively easy way to add additional things to a lattice graphic.

xyplot( rnorm(100) ~ rnorm(100) )
ladd( grid.text("Here is some text", x=0, y=0, default.units="native") )
ladd( panel.abline( a=0, b=1, col="red", lwd=3, alpha=.4 ) )
ladd( panel.rect(x=-1, y=-1, width=1, height=1, col="gray80", fill="lightsalmon"))
ladd( panel.rect(x=0, y=0, width=2, height=2, col="gray80", fill="lightskyblue"), 
      under=TRUE)

plot of chunk unnamed-chunk-4

mplot()

In addition to the interactive uses of mplot(), it can be used in place of plot() in several settings.

require(gridExtra)
## Loading required package: gridExtra
## Loading required package: grid
mod <- lm( width ~ length * sex, data=KidsFeet )
mplot(mod, which=1:7, multiplot = TRUE, ncol=2)

plot of chunk unnamed-chunk-5

mplot(mod, which=1:7, system="ggplot", ncol=2)
## geom_smooth: method="auto" and size of largest group is <1000, so using loess. Use 'method = x' to change the smoothing method.
## geom_smooth: method="auto" and size of largest group is <1000, so using loess. Use 'method = x' to change the smoothing method.
## geom_smooth: method="auto" and size of largest group is <1000, so using loess. Use 'method = x' to change the smoothing method.
## geom_smooth: method="auto" and size of largest group is <1000, so using loess. Use 'method = x' to change the smoothing method.

plot of chunk unnamed-chunk-6

mplot(mod, which=7)

plot of chunk unnamed-chunk-7

mplot(mod, which=7, rows=-1)

plot of chunk unnamed-chunk-7

mplot(mod, which=7, rows=c("sexG", "length", "length:sexG"), 
      title="Custom titles are supported")

plot of chunk unnamed-chunk-7

mod <- lm(age ~ substance, data=HELPrct)
mplot(TukeyHSD(mod))

plot of chunk unnamed-chunk-8

mplot(TukeyHSD(mod), system="ggplot")

plot of chunk unnamed-chunk-8

plotFun() and makeFun()

mod <- lm(width ~ length* sex, data = KidsFeet)
L <- makeFun(mod)
L( length=15, sex="B")
##     1 
## 7.041
L( length=15, sex="G")
##     1 
## 6.655
xyplot(width ~ length, groups = sex, data = KidsFeet, auto.key=TRUE)
plotFun( L(length, sex="B") ~ length, add=TRUE, col=1 )
## converting numerical color value into a color using lattice settings
plotFun( L(length, sex="G") ~ length, add=TRUE, col=2 )
## converting numerical color value into a color using lattice settings
## converting numerical color value into a color using lattice settings

plot of chunk unnamed-chunk-9

For logistic regression, makeFun() handles the conversion back to probabilities by default.

mod <- glm( smoker=="yes" ~ age + sex, data=NHANES, family=binomial())
SmokerProb <- makeFun(mod)
xyplot( smoker=="yes" ~ age, groups=sex, data=NHANES, alpha=.01 )
plotFun(SmokerProb(age, sex="female") ~ age, col=1, add=TRUE)
## converting numerical color value into a color using lattice settings
plotFun(SmokerProb(age, sex="male") ~ age, add=TRUE, col=2) 
## converting numerical color value into a color using lattice settings
## converting numerical color value into a color using lattice settings

plot of chunk unnamed-chunk-10

f <- makeFun(sin(x) ~ x)
plotFun( f(x) ~ x, xlim = c( -2 * pi, 2 * pi) )

plot of chunk unnamed-chunk-11

plotFun( x * sin(1/x) ~ x, xlim=c(-1,1) )

plot of chunk unnamed-chunk-12

plotFun( x * sin(1/x) ~ x, xlim=c(-1,1), npts=10000 )

plot of chunk unnamed-chunk-12

Visualizing distributions

plotDist("chisq", df=3)

plot of chunk unnamed-chunk-13

plotDist("chisq", df=3, kind="cdf")

plot of chunk unnamed-chunk-13

xpnorm(80, mean=100, sd=15)
## 
## If X ~ N(100,15), then 
## 
##  P(X <= 80) = P(Z <= -1.333) = 0.0912
##  P(X >  80) = P(Z >  -1.333) = 0.9088

plot of chunk unnamed-chunk-14

## [1] 0.09121
xpnorm(c(80,120), mean=100, sd=15)
## 
## If X ~ N(100,15), then 
## 
##  P(X <= 80) = P(Z <= -1.333) = 0.0912
##      P(X <= 120) = P(Z <= 1.333) = 0.9088
##  P(X >  80) = P(Z >  -1.333) = 0.9088
##      P(X >  120) = P(Z >  1.333) = 0.0912

plot of chunk unnamed-chunk-14

## [1] 0.09121 0.90879
pdist("chisq", 4, df=3)

plot of chunk unnamed-chunk-15

## [1] 0.7385
pdist("f", 3, df1=5, df2=20)

plot of chunk unnamed-chunk-15

## [1] 0.9648
qdist("t", c(.025, .975) , df=5)

plot of chunk unnamed-chunk-15

## [1] -2.571  2.571
histogram( ~ rbinom(1000, 20, .4), width=1, v=20 * .4 )

plot of chunk unnamed-chunk-16

SD <- sqrt(20 * .4 * .6)
plotDist("norm", mean=.4*20, sd=SD, add=TRUE, alpha=.7)

plot of chunk unnamed-chunk-16

plotDist("norm", col="blue", mean=2, xlim=c(-4,8))
plotDist("norm", mean=5, col="green", kind='histogram', add=TRUE)  # add, overtop
plotDist("norm", mean=0, col="red", kind='histogram', under=TRUE)  # add, but underneath!

plot of chunk unnamed-chunk-17

Maps

The mosaic package now provides facilities for producing choropleth maps. The API is still under developement and may change in future releases.

# we need to get state names into the data frame and then fix two of them with
# wrong state abbreviations.  Then we are ready to make maps
sAnscombe <- Anscombe %>%
group_by(state = rownames(Anscombe)) %>%
summarise(income = sum(income)) %>%
mutate(state = standardName(state, c(IO = "IA", KA = "KS"), quiet=TRUE))

mUSMap(sAnscombe, key="state", fill="income")
## Mapping API still under development and may change in future releases.

plot of chunk unnamed-chunk-18

mUSMap(sAnscombe, key="state", fill="income", style="real") 
## Mapping API still under development and may change in future releases.

plot of chunk unnamed-chunk-18

# A sillier example
if (require(mapproj)) {
Countries %>% mutate( nletters = nchar(gapminder) ) %>%
  mWorldMap( key="gapminder", fill="nletters") + coord_map()
} else {
Countries %>% mutate( nletters = nchar(gapminder) ) %>%
  mWorldMap( key="gapminder", fill="nletters") 
}
## Loading required package: mapproj
## Loading required package: maps
## Mapping API still under development and may change in future releases.
## Warning: 99 items were not translated

plot of chunk unnamed-chunk-18