1. What happens if you facet on a continuous variable?
Let’s see.
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(. ~ cty)

The continuous variable is converted to a categorical variable, and the plot contains a facet for each distinct value.
2. What do the empty cells in plot with facet_grid(drv ~ cyl)
mean? How do they relate to this plot?
ggplot(data = mpg) +
geom_point(mapping = aes(x = drv, y = cyl))

ggplot(data = mpg) +
geom_point(mapping = aes(x = hwy, y = cty)) +
facet_grid(drv ~ cyl)

The empty cells (facets) in this plot are combinations of drv
and cyl
that have no observations. These are the same locations in the scatter plot of drv
and cyl
that have no plots.
3. What plots does the following code make? What does .
do?
The symbol .
ignores that dimension when faceting. For example, drv ~ .
facet by values of drv
on the y-axis.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ .)

While, . ~ cyl
will facet by values of cyl
on the x-axis.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(. ~ cyl)

4. Take the first faceted plot in this section:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~class, nrow = 2)

5. What are the advantages to using faceting instead of the colour aesthetic? What are the disadvantages? How might the balance change if you had a larger dataset?
In the following plot the class variable is mapped to color.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))

Advantages of encoding class
with facets instead of color include the ability to encode more distinct categories. For me, it is difficult to distinguish between the colors of "midsize"
and "minivan"
.
Given human visual perception, the max number of colors to use when encoding unordered categorical (qualitative) data is nine, and in practice, often much less than that. Displaying observations from different categories on different scales makes it difficult to directly compare values of observations across categories. However, it can make it easier to compare the shape of the relationship between the x and y variables across categories.
Disadvantages of encoding the class
variable with facets instead of the color aesthetic include the difficulty of comparing the values of observations between categories since the observations for each category are on different plots. Using the same x- and y-scales for all facets makes it easier to compare values of observations across categories, but it is still more difficult than if they had been displayed on the same plot. Since encoding class within color also places all points on the same plot, it visualizes the unconditional relationship between the x and y variables; with facets, the unconditional relationship is no longer visualized since the points are spread across multiple plots.
The benefits encoding a variable through facetting over color become more advantageous as either the number of points or the number of categories increase. In the former, as the number of points increases, there is likely to be more overlap.
It is difficult to handle overlapping points with color. Jittering will still work with color. But jittering will only work well if there are few points and the classes do not overlap much, otherwise, the colors of areas will no longer be distinct, and it will be hard to pick out the patterns of different categories visually. Transparency (alpha
) does not work well with colors since the mixing of overlapping transparent colors will no longer represent the colors of the categories. Binning methods use already color to encode density, so color cannot be used to encode categories.
As noted before, as the number of categories increases, the difference between colors decreases, to the point that the color of categories will no longer be visually distinct.
6. Read ?facet_wrap
. What does nrow
do? What does ncol
do? What other options control the layout of the individual panels? Why doesn’t facet_grid()
have nrow
and ncol
variables?
The arguments nrow
(ncol
) determines the number of rows (columns) to use when laying out the facets. It is necessary since facet_wrap()
only facets on one variable.
The nrow
and ncol
arguments are unnecessary for facet_grid()
since the number of unique values of the variables specified in the function determines the number of rows and columns.
7. When using facet_grid()
you should usually put the variable with more unique levels in the columns. Why?
There will be more space for columns if the plot is laid out horizontally (landscape).
LS0tDQp0aXRsZTogIkZhY2V0cyBkZW1vIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KHRpZHl2ZXJzZSkpDQpgYGANCg0KIyMjIDEuIFdoYXQgaGFwcGVucyBpZiB5b3UgZmFjZXQgb24gYSBjb250aW51b3VzIHZhcmlhYmxlPw0KDQpMZXTigJlzIHNlZS4NCg0KYGBge3IgZmFjZXRjb250aW51b3VzfQ0KZ2dwbG90KG1wZywgYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsNCiAgZ2VvbV9wb2ludCgpICsNCiAgZmFjZXRfZ3JpZCguIH4gY3R5KQ0KYGBgDQoNClRoZSBjb250aW51b3VzIHZhcmlhYmxlIGlzIGNvbnZlcnRlZCB0byBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlLCBhbmQgdGhlIHBsb3QgY29udGFpbnMgYSBmYWNldCBmb3IgZWFjaCBkaXN0aW5jdCB2YWx1ZS4NCg0KDQojIyMgMi4gV2hhdCBkbyB0aGUgZW1wdHkgY2VsbHMgaW4gcGxvdCB3aXRoIGBmYWNldF9ncmlkKGRydiB+IGN5bClgIG1lYW4/IEhvdyBkbyB0aGV5IHJlbGF0ZSB0byB0aGlzIHBsb3Q/DQoNCmBgYHtyIHJlbGF0ZX0NCmdncGxvdChkYXRhID0gbXBnKSArDQogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZHJ2LCB5ID0gY3lsKSkNCg0KDQpnZ3Bsb3QoZGF0YSA9IG1wZykgKw0KICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGh3eSwgeSA9IGN0eSkpICsNCiAgZmFjZXRfZ3JpZChkcnYgfiBjeWwpDQpgYGANCg0KVGhlIGVtcHR5IGNlbGxzIChmYWNldHMpIGluIHRoaXMgcGxvdCBhcmUgY29tYmluYXRpb25zIG9mIGBkcnZgIGFuZCBgY3lsYCB0aGF0IGhhdmUgbm8gb2JzZXJ2YXRpb25zLiBUaGVzZSBhcmUgdGhlIHNhbWUgbG9jYXRpb25zIGluIHRoZSBzY2F0dGVyIHBsb3Qgb2YgYGRydmAgYW5kIGBjeWxgIHRoYXQgaGF2ZSBubyBwbG90cy4NCg0KIyMjIDMuIFdoYXQgcGxvdHMgZG9lcyB0aGUgZm9sbG93aW5nIGNvZGUgbWFrZT8gV2hhdCBkb2VzIGAuYCBkbz8NCg0KVGhlIHN5bWJvbCBgLmAgaWdub3JlcyB0aGF0IGRpbWVuc2lvbiB3aGVuIGZhY2V0aW5nLiBGb3IgZXhhbXBsZSwgYGRydiB+IC5gIGZhY2V0IGJ5IHZhbHVlcyBvZiBgZHJ2YCBvbiB0aGUgeS1heGlzLg0KDQpgYGB7ciBwZXJpb2R9DQpnZ3Bsb3QoZGF0YSA9IG1wZykgKw0KICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKw0KICBmYWNldF9ncmlkKGRydiB+IC4pDQpgYGANCg0KV2hpbGUsIGAuIH4gY3lsYCB3aWxsIGZhY2V0IGJ5IHZhbHVlcyBvZiBgY3lsYCBvbiB0aGUgeC1heGlzLg0KDQpgYGB7ciB4YXhpc30NCmdncGxvdChkYXRhID0gbXBnKSArDQogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKSArDQogIGZhY2V0X2dyaWQoLiB+IGN5bCkNCmBgYA0KDQojIyMgNC4gVGFrZSB0aGUgZmlyc3QgZmFjZXRlZCBwbG90IGluIHRoaXMgc2VjdGlvbjoNCg0KYGBge3IgZmlyc3RmYWNldH0NCmdncGxvdChkYXRhID0gbXBnKSArDQogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKSArDQogIGZhY2V0X3dyYXAofmNsYXNzLCBucm93ID0gMikNCmBgYA0KDQojIyMgNS4gV2hhdCBhcmUgdGhlIGFkdmFudGFnZXMgdG8gdXNpbmcgZmFjZXRpbmcgaW5zdGVhZCBvZiB0aGUgY29sb3VyIGFlc3RoZXRpYz8gV2hhdCBhcmUgdGhlIGRpc2FkdmFudGFnZXM/IEhvdyBtaWdodCB0aGUgYmFsYW5jZSBjaGFuZ2UgaWYgeW91IGhhZCBhIGxhcmdlciBkYXRhc2V0Pw0KDQpJbiB0aGUgZm9sbG93aW5nIHBsb3QgdGhlIGNsYXNzIHZhcmlhYmxlIGlzIG1hcHBlZCB0byBjb2xvci4NCg0KYGBge3IgY2xhc3Njb2xvcn0NCmdncGxvdChkYXRhID0gbXBnKSArDQogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIGNvbG9yID0gY2xhc3MpKQ0KYGBgDQoNCkFkdmFudGFnZXMgb2YgZW5jb2RpbmcgYGNsYXNzYCB3aXRoIGZhY2V0cyBpbnN0ZWFkIG9mIGNvbG9yIGluY2x1ZGUgdGhlIGFiaWxpdHkgdG8gZW5jb2RlIG1vcmUgZGlzdGluY3QgY2F0ZWdvcmllcy4gRm9yIG1lLCBpdCBpcyBkaWZmaWN1bHQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgY29sb3JzIG9mIGAibWlkc2l6ZSJgIGFuZCBgIm1pbml2YW4iYC4NCg0KR2l2ZW4gaHVtYW4gdmlzdWFsIHBlcmNlcHRpb24sIHRoZSBtYXggbnVtYmVyIG9mIGNvbG9ycyB0byB1c2Ugd2hlbiBlbmNvZGluZyB1bm9yZGVyZWQgY2F0ZWdvcmljYWwgKHF1YWxpdGF0aXZlKSBkYXRhIGlzIG5pbmUsIGFuZCBpbiBwcmFjdGljZSwgb2Z0ZW4gbXVjaCBsZXNzIHRoYW4gdGhhdC4gRGlzcGxheWluZyBvYnNlcnZhdGlvbnMgZnJvbSBkaWZmZXJlbnQgY2F0ZWdvcmllcyBvbiBkaWZmZXJlbnQgc2NhbGVzIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBkaXJlY3RseSBjb21wYXJlIHZhbHVlcyBvZiBvYnNlcnZhdGlvbnMgYWNyb3NzIGNhdGVnb3JpZXMuIEhvd2V2ZXIsIGl0IGNhbiBtYWtlIGl0IGVhc2llciB0byBjb21wYXJlIHRoZSBzaGFwZSBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHggYW5kIHkgdmFyaWFibGVzIGFjcm9zcyBjYXRlZ29yaWVzLg0KDQpEaXNhZHZhbnRhZ2VzIG9mIGVuY29kaW5nIHRoZSBgY2xhc3NgIHZhcmlhYmxlIHdpdGggZmFjZXRzIGluc3RlYWQgb2YgdGhlIGNvbG9yIGFlc3RoZXRpYyBpbmNsdWRlIHRoZSBkaWZmaWN1bHR5IG9mIGNvbXBhcmluZyB0aGUgdmFsdWVzIG9mIG9ic2VydmF0aW9ucyBiZXR3ZWVuIGNhdGVnb3JpZXMgc2luY2UgdGhlIG9ic2VydmF0aW9ucyBmb3IgZWFjaCBjYXRlZ29yeSBhcmUgb24gZGlmZmVyZW50IHBsb3RzLiBVc2luZyB0aGUgc2FtZSB4LSBhbmQgeS1zY2FsZXMgZm9yIGFsbCBmYWNldHMgbWFrZXMgaXQgZWFzaWVyIHRvIGNvbXBhcmUgdmFsdWVzIG9mIG9ic2VydmF0aW9ucyBhY3Jvc3MgY2F0ZWdvcmllcywgYnV0IGl0IGlzIHN0aWxsIG1vcmUgZGlmZmljdWx0IHRoYW4gaWYgdGhleSBoYWQgYmVlbiBkaXNwbGF5ZWQgb24gdGhlIHNhbWUgcGxvdC4gU2luY2UgZW5jb2RpbmcgY2xhc3Mgd2l0aGluIGNvbG9yIGFsc28gcGxhY2VzIGFsbCBwb2ludHMgb24gdGhlIHNhbWUgcGxvdCwgaXQgdmlzdWFsaXplcyB0aGUgdW5jb25kaXRpb25hbCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgeCBhbmQgeSB2YXJpYWJsZXM7IHdpdGggZmFjZXRzLCB0aGUgdW5jb25kaXRpb25hbCByZWxhdGlvbnNoaXAgaXMgbm8gbG9uZ2VyIHZpc3VhbGl6ZWQgc2luY2UgdGhlIHBvaW50cyBhcmUgc3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBwbG90cy4NCg0KVGhlIGJlbmVmaXRzIGVuY29kaW5nIGEgdmFyaWFibGUgdGhyb3VnaCBmYWNldHRpbmcgb3ZlciBjb2xvciBiZWNvbWUgbW9yZSBhZHZhbnRhZ2VvdXMgYXMgZWl0aGVyIHRoZSBudW1iZXIgb2YgcG9pbnRzIG9yIHRoZSBudW1iZXIgb2YgY2F0ZWdvcmllcyBpbmNyZWFzZS4gSW4gdGhlIGZvcm1lciwgYXMgdGhlIG51bWJlciBvZiBwb2ludHMgaW5jcmVhc2VzLCB0aGVyZSBpcyBsaWtlbHkgdG8gYmUgbW9yZSBvdmVybGFwLg0KDQpJdCBpcyBkaWZmaWN1bHQgdG8gaGFuZGxlIG92ZXJsYXBwaW5nIHBvaW50cyB3aXRoIGNvbG9yLiBKaXR0ZXJpbmcgd2lsbCBzdGlsbCB3b3JrIHdpdGggY29sb3IuIEJ1dCBqaXR0ZXJpbmcgd2lsbCBvbmx5IHdvcmsgd2VsbCBpZiB0aGVyZSBhcmUgZmV3IHBvaW50cyBhbmQgdGhlIGNsYXNzZXMgZG8gbm90IG92ZXJsYXAgbXVjaCwgb3RoZXJ3aXNlLCB0aGUgY29sb3JzIG9mIGFyZWFzIHdpbGwgbm8gbG9uZ2VyIGJlIGRpc3RpbmN0LCBhbmQgaXQgd2lsbCBiZSBoYXJkIHRvIHBpY2sgb3V0IHRoZSBwYXR0ZXJucyBvZiBkaWZmZXJlbnQgY2F0ZWdvcmllcyB2aXN1YWxseS4gVHJhbnNwYXJlbmN5IChgYWxwaGFgKSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBjb2xvcnMgc2luY2UgdGhlIG1peGluZyBvZiBvdmVybGFwcGluZyB0cmFuc3BhcmVudCBjb2xvcnMgd2lsbCBubyBsb25nZXIgcmVwcmVzZW50IHRoZSBjb2xvcnMgb2YgdGhlIGNhdGVnb3JpZXMuIEJpbm5pbmcgbWV0aG9kcyB1c2UgYWxyZWFkeSBjb2xvciB0byBlbmNvZGUgZGVuc2l0eSwgc28gY29sb3IgY2Fubm90IGJlIHVzZWQgdG8gZW5jb2RlIGNhdGVnb3JpZXMuDQoNCkFzIG5vdGVkIGJlZm9yZSwgYXMgdGhlIG51bWJlciBvZiBjYXRlZ29yaWVzIGluY3JlYXNlcywgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBjb2xvcnMgZGVjcmVhc2VzLCB0byB0aGUgcG9pbnQgdGhhdCB0aGUgY29sb3Igb2YgY2F0ZWdvcmllcyB3aWxsIG5vIGxvbmdlciBiZSB2aXN1YWxseSBkaXN0aW5jdC4NCg0KDQojIyMgNi4gUmVhZCBgP2ZhY2V0X3dyYXBgLiBXaGF0IGRvZXMgYG5yb3dgIGRvPyBXaGF0IGRvZXMgYG5jb2xgIGRvPyBXaGF0IG90aGVyIG9wdGlvbnMgY29udHJvbCB0aGUgbGF5b3V0IG9mIHRoZSBpbmRpdmlkdWFsIHBhbmVscz8gV2h5IGRvZXNu4oCZdCBgZmFjZXRfZ3JpZCgpYCBoYXZlIGBucm93YCBhbmQgYG5jb2xgIHZhcmlhYmxlcz8NCg0KVGhlIGFyZ3VtZW50cyBgbnJvd2AgKGBuY29sYCkgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgKGNvbHVtbnMpIHRvIHVzZSB3aGVuIGxheWluZyBvdXQgdGhlIGZhY2V0cy4gSXQgaXMgbmVjZXNzYXJ5IHNpbmNlIGBmYWNldF93cmFwKClgIG9ubHkgZmFjZXRzIG9uIG9uZSB2YXJpYWJsZS4NCg0KVGhlIGBucm93YCBhbmQgYG5jb2xgIGFyZ3VtZW50cyBhcmUgdW5uZWNlc3NhcnkgZm9yIGBmYWNldF9ncmlkKClgIHNpbmNlIHRoZSBudW1iZXIgb2YgdW5pcXVlIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzIHNwZWNpZmllZCBpbiB0aGUgZnVuY3Rpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuDQoNCiMjIyA3LiBXaGVuIHVzaW5nIGBmYWNldF9ncmlkKClgIHlvdSBzaG91bGQgdXN1YWxseSBwdXQgdGhlIHZhcmlhYmxlIHdpdGggbW9yZSB1bmlxdWUgbGV2ZWxzIGluIHRoZSBjb2x1bW5zLiBXaHk/DQoNClRoZXJlIHdpbGwgYmUgbW9yZSBzcGFjZSBmb3IgY29sdW1ucyBpZiB0aGUgcGxvdCBpcyBsYWlkIG91dCBob3Jpem9udGFsbHkgKGxhbmRzY2FwZSku