suppressPackageStartupMessages(library("tidyverse"))
package 㤼㸱tidyverse㤼㸲 was built under R version 3.6.3
suppressPackageStartupMessages(library("modelr"))
package 㤼㸱modelr㤼㸲 was built under R version 3.6.3
suppressPackageStartupMessages(library("lubridate"))
1. Why doesn’t the following code override the default scale?
df <- tibble(
x = rnorm(10000),
y = rnorm(10000)
)
ggplot(df, aes(x, y)) +
geom_hex() +
scale_colour_gradient(low = "white", high = "red") +
coord_fixed()

It does not override the default scale because the colors in geom_hex()
are set by the fill aesthetic, not the color aesthetic.
ggplot(df, aes(x, y)) +
geom_hex() +
scale_fill_gradient(low = "white", high = "red") +
coord_fixed()

2. The first argument to every scale is the label for the scale. It is equivalent to using the labs function.
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
geom_smooth(se = FALSE) +
labs(
x = "Engine displacement (L)",
y = "Highway fuel economy (mpg)",
colour = "Car type"
)

ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
geom_smooth(se = FALSE) +
scale_x_continuous("Engine displacement (L)") +
scale_y_continuous("Highway fuel economy (mpg)") +
scale_colour_discrete("Car type")

3. Change the display of the presidential terms by:
1. Combining the two variants shown above. 2. Improving the display of the y axis. 3. Labeling each term with the name of the president. 4. Adding informative plot labels. 5. Placing breaks every 4 years (this is trickier than it seems!).
fouryears <- lubridate::make_date(seq(year(min(presidential$start)),
year(max(presidential$end)),
by = 4
), 1, 1)
presidential %>%
mutate(
id = 33 + row_number(),
name_id = fct_inorder(str_c(name, " (", id, ")"))
) %>%
ggplot(aes(start, name_id, colour = party)) +
geom_point() +
geom_segment(aes(xend = end, yend = name_id)) +
scale_colour_manual("Party", values = c(Republican = "red", Democratic = "blue")) +
scale_y_discrete(NULL) +
scale_x_date(NULL,
breaks = presidential$start, date_labels = "'%y",
minor_breaks = fouryears
) +
ggtitle("Terms of US Presdients",
subtitle = "Roosevelth (34th) to Obama (44th)"
) +
theme(
panel.grid.minor = element_blank(),
axis.ticks.y = element_blank()
)

To include both the start dates of presidential terms and every four years, I use different levels of emphasis. The presidential term start years are used as major breaks with thicker lines and x-axis labels. Lines for every four years is indicated with minor breaks that use thinner lines to distinguish them from presidential term start years and to avoid cluttering the plot.
4. Use override.aes
to make the legend on the following plot easier to see.
ggplot(diamonds, aes(carat, price)) +
geom_point(aes(colour = cut), alpha = 1 / 20)

The problem with the legend is that the alpha value make the colors hard to see. So I’ll override the alpha value to make the points solid in the legend.
ggplot(diamonds, aes(carat, price)) +
geom_point(aes(colour = cut), alpha = 1 / 20) +
theme(legend.position = "bottom") +
guides(colour = guide_legend(nrow = 1, override.aes = list(alpha = 1)))

LS0tDQp0aXRsZTogIlNjYWxlcyINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQotLS0NCg0KYGBge3J9DQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeSgidGlkeXZlcnNlIikpDQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeSgibW9kZWxyIikpDQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeSgibHVicmlkYXRlIikpDQpgYGANCg0KIyMjIDEuIFdoeSBkb2VzbuKAmXQgdGhlIGZvbGxvd2luZyBjb2RlIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNjYWxlPw0KDQpgYGB7cn0NCmRmIDwtIHRpYmJsZSgNCiAgeCA9IHJub3JtKDEwMDAwKSwNCiAgeSA9IHJub3JtKDEwMDAwKQ0KKQ0KZ2dwbG90KGRmLCBhZXMoeCwgeSkpICsNCiAgZ2VvbV9oZXgoKSArDQogIHNjYWxlX2NvbG91cl9ncmFkaWVudChsb3cgPSAid2hpdGUiLCBoaWdoID0gInJlZCIpICsNCiAgY29vcmRfZml4ZWQoKQ0KYGBgDQoNCkl0IGRvZXMgbm90IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNjYWxlIGJlY2F1c2UgdGhlIGNvbG9ycyBpbiBgZ2VvbV9oZXgoKWAgYXJlIHNldCBieSB0aGUgZmlsbCBhZXN0aGV0aWMsIG5vdCB0aGUgY29sb3IgYWVzdGhldGljLg0KDQpgYGB7cn0NCmdncGxvdChkZiwgYWVzKHgsIHkpKSArDQogIGdlb21faGV4KCkgKw0KICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJ3aGl0ZSIsIGhpZ2ggPSAicmVkIikgKw0KICBjb29yZF9maXhlZCgpDQpgYGANCg0KIyMjIDIuIFRoZSBmaXJzdCBhcmd1bWVudCB0byBldmVyeSBzY2FsZSBpcyB0aGUgbGFiZWwgZm9yIHRoZSBzY2FsZS4gSXQgaXMgZXF1aXZhbGVudCB0byB1c2luZyB0aGUgbGFicyBmdW5jdGlvbi4NCg0KYGBge3J9DQpnZ3Bsb3QobXBnLCBhZXMoZGlzcGwsIGh3eSkpICsNCiAgZ2VvbV9wb2ludChhZXMoY29sb3VyID0gY2xhc3MpKSArDQogIGdlb21fc21vb3RoKHNlID0gRkFMU0UpICsNCiAgbGFicygNCiAgICB4ID0gIkVuZ2luZSBkaXNwbGFjZW1lbnQgKEwpIiwNCiAgICB5ID0gIkhpZ2h3YXkgZnVlbCBlY29ub215IChtcGcpIiwNCiAgICBjb2xvdXIgPSAiQ2FyIHR5cGUiDQogICkNCg0KZ2dwbG90KG1wZywgYWVzKGRpc3BsLCBod3kpKSArDQogIGdlb21fcG9pbnQoYWVzKGNvbG91ciA9IGNsYXNzKSkgKw0KICBnZW9tX3Ntb290aChzZSA9IEZBTFNFKSArDQogIHNjYWxlX3hfY29udGludW91cygiRW5naW5lIGRpc3BsYWNlbWVudCAoTCkiKSArDQogIHNjYWxlX3lfY29udGludW91cygiSGlnaHdheSBmdWVsIGVjb25vbXkgKG1wZykiKSArDQogIHNjYWxlX2NvbG91cl9kaXNjcmV0ZSgiQ2FyIHR5cGUiKQ0KYGBgDQoNCiMjIyAzLiBDaGFuZ2UgdGhlIGRpc3BsYXkgb2YgdGhlIHByZXNpZGVudGlhbCB0ZXJtcyBieToNCg0KKioxLioqIENvbWJpbmluZyB0aGUgdHdvIHZhcmlhbnRzIHNob3duIGFib3ZlLg0KKioyLioqIEltcHJvdmluZyB0aGUgZGlzcGxheSBvZiB0aGUgeSBheGlzLg0KKiozLioqIExhYmVsaW5nIGVhY2ggdGVybSB3aXRoIHRoZSBuYW1lIG9mIHRoZSBwcmVzaWRlbnQuDQoqKjQuKiogQWRkaW5nIGluZm9ybWF0aXZlIHBsb3QgbGFiZWxzLg0KKio1LioqIFBsYWNpbmcgYnJlYWtzIGV2ZXJ5IDQgeWVhcnMgKHRoaXMgaXMgdHJpY2tpZXIgdGhhbiBpdCBzZWVtcyEpLg0KDQpgYGB7cn0NCmZvdXJ5ZWFycyA8LSBsdWJyaWRhdGU6Om1ha2VfZGF0ZShzZXEoeWVhcihtaW4ocHJlc2lkZW50aWFsJHN0YXJ0KSksDQogIHllYXIobWF4KHByZXNpZGVudGlhbCRlbmQpKSwNCiAgYnkgPSA0DQopLCAxLCAxKQ0KDQpwcmVzaWRlbnRpYWwgJT4lDQogIG11dGF0ZSgNCiAgICBpZCA9IDMzICsgcm93X251bWJlcigpLA0KICAgIG5hbWVfaWQgPSBmY3RfaW5vcmRlcihzdHJfYyhuYW1lLCAiICgiLCBpZCwgIikiKSkNCiAgKSAlPiUNCiAgZ2dwbG90KGFlcyhzdGFydCwgbmFtZV9pZCwgY29sb3VyID0gcGFydHkpKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fc2VnbWVudChhZXMoeGVuZCA9IGVuZCwgeWVuZCA9IG5hbWVfaWQpKSArDQogIHNjYWxlX2NvbG91cl9tYW51YWwoIlBhcnR5IiwgdmFsdWVzID0gYyhSZXB1YmxpY2FuID0gInJlZCIsIERlbW9jcmF0aWMgPSAiYmx1ZSIpKSArDQogIHNjYWxlX3lfZGlzY3JldGUoTlVMTCkgKw0KICBzY2FsZV94X2RhdGUoTlVMTCwNCiAgICBicmVha3MgPSBwcmVzaWRlbnRpYWwkc3RhcnQsIGRhdGVfbGFiZWxzID0gIicleSIsDQogICAgbWlub3JfYnJlYWtzID0gZm91cnllYXJzDQogICkgKw0KICBnZ3RpdGxlKCJUZXJtcyBvZiBVUyBQcmVzZGllbnRzIiwNCiAgICBzdWJ0aXRsZSA9ICJSb29zZXZlbHRoICgzNHRoKSB0byBPYmFtYSAoNDR0aCkiDQogICkgKw0KICB0aGVtZSgNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKQ0KICApDQpgYGANCg0KVG8gaW5jbHVkZSBib3RoIHRoZSBzdGFydCBkYXRlcyBvZiBwcmVzaWRlbnRpYWwgdGVybXMgYW5kIGV2ZXJ5IGZvdXIgeWVhcnMsIEkgdXNlIGRpZmZlcmVudCBsZXZlbHMgb2YgZW1waGFzaXMuIFRoZSBwcmVzaWRlbnRpYWwgdGVybSBzdGFydCB5ZWFycyBhcmUgdXNlZCBhcyBtYWpvciBicmVha3Mgd2l0aCB0aGlja2VyIGxpbmVzIGFuZCB4LWF4aXMgbGFiZWxzLiBMaW5lcyBmb3IgZXZlcnkgZm91ciB5ZWFycyBpcyBpbmRpY2F0ZWQgd2l0aCBtaW5vciBicmVha3MgdGhhdCB1c2UgdGhpbm5lciBsaW5lcyB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gcHJlc2lkZW50aWFsIHRlcm0gc3RhcnQgeWVhcnMgYW5kIHRvIGF2b2lkIGNsdXR0ZXJpbmcgdGhlIHBsb3QuDQoNCiMjIyA0LiBVc2UgYG92ZXJyaWRlLmFlc2AgdG8gbWFrZSB0aGUgbGVnZW5kIG9uIHRoZSBmb2xsb3dpbmcgcGxvdCBlYXNpZXIgdG8gc2VlLg0KDQpgYGB7cn0NCmdncGxvdChkaWFtb25kcywgYWVzKGNhcmF0LCBwcmljZSkpICsNCiAgZ2VvbV9wb2ludChhZXMoY29sb3VyID0gY3V0KSwgYWxwaGEgPSAxIC8gMjApDQpgYGANCg0KVGhlIHByb2JsZW0gd2l0aCB0aGUgbGVnZW5kIGlzIHRoYXQgdGhlIGFscGhhIHZhbHVlIG1ha2UgdGhlIGNvbG9ycyBoYXJkIHRvIHNlZS4gU28gSeKAmWxsIG92ZXJyaWRlIHRoZSBhbHBoYSB2YWx1ZSB0byBtYWtlIHRoZSBwb2ludHMgc29saWQgaW4gdGhlIGxlZ2VuZC4NCg0KYGBge3J9DQpnZ3Bsb3QoZGlhbW9uZHMsIGFlcyhjYXJhdCwgcHJpY2UpKSArDQogIGdlb21fcG9pbnQoYWVzKGNvbG91ciA9IGN1dCksIGFscGhhID0gMSAvIDIwKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogIGd1aWRlcyhjb2xvdXIgPSBndWlkZV9sZWdlbmQobnJvdyA9IDEsIG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSkpDQpgYGA=