This is the 9th post in a series attempting to recreate the figures in Lattice: Multivariate Data Visualization with R (R code available here) with ggplot2.
Previous parts in this series: Part 1, Part 2, Part 3, Part 4, Part 5, Part 6, Part 7, Part 8.
Chapter 9 – Labels and Legends
Topics covered:
- Labels (main, sub, xlab, ylab)
- Legends, color keys
- Legends in grouped displays; auto.key
- Dropping unused levels of grouping variable
- Page annotation
Figure 9.1
> library(lattice)
> library(ggplot2)
|
> data(Cars93, package = "MASS")
|
lattice
> sup.sym <- Rows(trellis.par.get("superpose.symbol"),
+ 1:5)
|
> pl <- xyplot(Price ~ EngineSize | reorder(AirBags, Price),
+ data = Cars93, groups = Cylinders, subset = Cylinders !=
+ "rotary", scales = list(y = list(log = 2, tick.number = 3)),
+ xlab = "Engine Size (litres)", ylab = "Average Price (1000 USD)",
+ key = list(text = list(levels(Cars93$Cylinders)[1:5]),
+ points = sup.sym, space = "right"))
> print(pl)
|
ggplot2
> Cars93$AirBags <- with(Cars93, reorder(AirBags, Price))
|
> pg <- ggplot(Cars93, aes(EngineSize, Price, colour = factor(Cylinders))) +
+ geom_point(subset = .(Cylinders != "rotary")) + facet_grid(~AirBags) +
+ xlab("Engine Size (litres)") + ylab("Average Price (1000 USD)") +
+ scale_y_log2()
> print(pg)
|
Figure 9.2
lattice
> my.pch <- c(21:25, 20)
> my.fill <- c("transparent", "grey", "black")
|
> pl <- with(Cars93, xyplot(Price ~ EngineSize, scales = list(y = list(log = 2,
+ tick.number = 3)), panel = function(x, y, ..., subscripts) {
+ pch <- my.pch[Cylinders[subscripts]]
+ fill <- my.fill[AirBags[subscripts]]
+ panel.xyplot(x, y, pch = pch, fill = fill, col = "black")
+ }, key = list(space = "right", adj = 1, text = list(levels(Cylinders)),
+ points = list(pch = my.pch), text = list(levels(AirBags)),
+ points = list(pch = 21, fill = my.fill), rep = FALSE)))
> print(pl)
|
ggplot2
> pg <- ggplot(Cars93, aes(EngineSize, Price, shape = factor(Cylinders),
+ colour = factor(AirBags))) + geom_point() + scale_y_log2()
> print(pg)
|
Figure 9.3
lattice
> library(latticeExtra)
> hc1 <- hclust(dist(USArrests, method = "canberra"))
> hc1 <- as.dendrogram(hc1)
> ord.hc1 <- order.dendrogram(hc1)
> hc2 <- reorder(hc1, state.region[ord.hc1])
> ord.hc2 <- order.dendrogram(hc2)
> region.colors <- trellis.par.get("superpose.polygon")$col
|
> pl <- levelplot(t(scale(USArrests))[, ord.hc2], scales = list(x = list(rot = 90)),
+ colorkey = FALSE, legend = list(right = list(fun = dendrogramGrob,
+ args = list(x = hc2, ord = ord.hc2, side = "right",
+ size = 10, size.add = 0.5, add = list(rect = list(col = "transparent",
+ fill = region.colors[state.region])),
+ type = "rectangle"))))
> print(pl)
|
ggplot2
> USArrests2 <- melt(t(scale(USArrests)))
> USArrests2$X2 <- factor(USArrests2$X2, levels = state.name[ord.hc2])
|
> pg <- ggplot(USArrests2, aes(X1, X2, fill = value)) +
+ geom_tile() + opts(axis.text.x = theme_text(angle = 90,
+ hjust = 1, colour = "grey50")) + opts(aspect.ratio = 50/5)
> print(pg)
|
Note |
ggplot2 does not support the inclusion of dendrograms in the legend. |
It would be nice if the ggplot legend could drop the background colour in legends. Compared with lattice the legend often looks clumpsy. But the syntax is nice I think.
I have opted to use the default settings.
Nevertheless,
opts(legend.key = theme_blank())
should drop the legend key background fill and colour.Is it possible to add scale to lattice cluster?
And is it possible to set scale color to white to blue ?
I am fairly certain this is possible, however I do not know much about lattice, so am not able to answer your queries.