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. Use geom_text() with infinite positions to place text at the four corners of the plot.

I can use similar code as the example in the text. However, I need to use vjust and hjust in order for the text to appear in the plot, and these need to be different for each corner. But, geom_text() takes hjust and vjust as aesthetics, I can add them to the data and mappings, and use a single geom_text() call instead of four different geom_text() calls with four different data arguments, and four different values of hjust and vjust arguments.

label <- tribble(
  ~displ, ~hwy, ~label, ~vjust, ~hjust,
  Inf, Inf, "Top right", "top", "right",
  Inf, -Inf, "Bottom right", "bottom", "right",
  -Inf, Inf, "Top left", "top", "left",
  -Inf, -Inf, "Bottom left", "bottom", "left"
)

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_text(aes(label = label, vjust = vjust, hjust = hjust), data = label)

2. Read the documentation for annotate(). How can you use it to add a text label to a plot without having to create a tibble?

With annotate you use what would be aesthetic mappings directly as arguments:

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  annotate("text",
    x = Inf, y = Inf,
    label = "Increasing engine size is \nrelated to decreasing fuel economy.", vjust = "top", hjust = "right"
  )

3. How do labels with geom_text() interact with faceting? How can you add a label to a single facet? How can you put a different label in each facet? (Hint: think about the underlying data.)

If the facet variable is not specified, the text is drawn in all facets.

label <- tibble(
  displ = Inf,
  hwy = Inf,
  label = "Increasing engine size is \nrelated to decreasing fuel economy."
)

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_text(aes(label = label),
    data = label, vjust = "top", hjust = "right",
    size = 2
  ) +
  facet_wrap(~class)

To draw the label in only one facet, add a column to the label data frame with the value of the faceting variable(s) in which to draw it.

label <- tibble(
  displ = Inf,
  hwy = Inf,
  class = "2seater",
  label = "Increasing engine size is \nrelated to decreasing fuel economy."
)

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_text(aes(label = label),
    data = label, vjust = "top", hjust = "right",
    size = 2
  ) +
  facet_wrap(~class)

To draw labels in different plots, simply have the facetting variable(s):

label <- tibble(
  displ = Inf,
  hwy = Inf,
  class = unique(mpg$class),
  label = str_c("Label for ", class)
)

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_text(aes(label = label),
    data = label, vjust = "top", hjust = "right",
    size = 3
  ) +
  facet_wrap(~class)

4. What arguments to geom_label() control the appearance of the background box?

  • label.padding: padding around label
  • label.r: amount of rounding in the corners
  • label.size: size of label border

5. What are the four arguments to arrow()? How do they work? Create a series of plots that demonstrate the most important options.

The four arguments are (from the help for arrow()):

  • angle: angle of arrow head
  • length: length of the arrow head
  • ends: ends of the line to draw arrow head
  • type: “open” or “close”: whether the arrow head is a closed or open triangle
LS0tDQp0aXRsZTogIkFubm90YXRpb25zIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCi0tLQ0KDQpgYGB7cn0NCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KCJ0aWR5dmVyc2UiKSkNCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KCJtb2RlbHIiKSkNCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KCJsdWJyaWRhdGUiKSkNCmBgYA0KDQojIyMgMS4gVXNlIGBnZW9tX3RleHQoKWAgd2l0aCBpbmZpbml0ZSBwb3NpdGlvbnMgdG8gcGxhY2UgdGV4dCBhdCB0aGUgZm91ciBjb3JuZXJzIG9mIHRoZSBwbG90Lg0KDQpJIGNhbiB1c2Ugc2ltaWxhciBjb2RlIGFzIHRoZSBleGFtcGxlIGluIHRoZSB0ZXh0LiBIb3dldmVyLCBJIG5lZWQgdG8gdXNlIGB2anVzdGAgYW5kIGBoanVzdGAgaW4gb3JkZXIgZm9yIHRoZSB0ZXh0IHRvIGFwcGVhciBpbiB0aGUgcGxvdCwgYW5kIHRoZXNlIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZvciBlYWNoIGNvcm5lci4gQnV0LCBgZ2VvbV90ZXh0KClgIHRha2VzIGBoanVzdGAgYW5kIGB2anVzdGAgYXMgYWVzdGhldGljcywgSSBjYW4gYWRkIHRoZW0gdG8gdGhlIGRhdGEgYW5kIG1hcHBpbmdzLCBhbmQgdXNlIGEgc2luZ2xlIGBnZW9tX3RleHQoKWAgY2FsbCBpbnN0ZWFkIG9mIGZvdXIgZGlmZmVyZW50IGBnZW9tX3RleHQoKWAgY2FsbHMgd2l0aCBmb3VyIGRpZmZlcmVudCBkYXRhIGFyZ3VtZW50cywgYW5kIGZvdXIgZGlmZmVyZW50IHZhbHVlcyBvZiBgaGp1c3RgIGFuZCBgdmp1c3RgIGFyZ3VtZW50cy4NCg0KYGBge3J9DQpsYWJlbCA8LSB0cmliYmxlKA0KICB+ZGlzcGwsIH5od3ksIH5sYWJlbCwgfnZqdXN0LCB+aGp1c3QsDQogIEluZiwgSW5mLCAiVG9wIHJpZ2h0IiwgInRvcCIsICJyaWdodCIsDQogIEluZiwgLUluZiwgIkJvdHRvbSByaWdodCIsICJib3R0b20iLCAicmlnaHQiLA0KICAtSW5mLCBJbmYsICJUb3AgbGVmdCIsICJ0b3AiLCAibGVmdCIsDQogIC1JbmYsIC1JbmYsICJCb3R0b20gbGVmdCIsICJib3R0b20iLCAibGVmdCINCikNCg0KZ2dwbG90KG1wZywgYWVzKGRpc3BsLCBod3kpKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCwgdmp1c3QgPSB2anVzdCwgaGp1c3QgPSBoanVzdCksIGRhdGEgPSBsYWJlbCkNCmBgYA0KDQojIyMgMi4gUmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGFubm90YXRlKClgLiBIb3cgY2FuIHlvdSB1c2UgaXQgdG8gYWRkIGEgdGV4dCBsYWJlbCB0byBhIHBsb3Qgd2l0aG91dCBoYXZpbmcgdG8gY3JlYXRlIGEgdGliYmxlPw0KDQpXaXRoIGFubm90YXRlIHlvdSB1c2Ugd2hhdCB3b3VsZCBiZSBhZXN0aGV0aWMgbWFwcGluZ3MgZGlyZWN0bHkgYXMgYXJndW1lbnRzOg0KDQpgYGB7cn0NCmdncGxvdChtcGcsIGFlcyhkaXNwbCwgaHd5KSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBhbm5vdGF0ZSgidGV4dCIsDQogICAgeCA9IEluZiwgeSA9IEluZiwNCiAgICBsYWJlbCA9ICJJbmNyZWFzaW5nIGVuZ2luZSBzaXplIGlzIFxucmVsYXRlZCB0byBkZWNyZWFzaW5nIGZ1ZWwgZWNvbm9teS4iLCB2anVzdCA9ICJ0b3AiLCBoanVzdCA9ICJyaWdodCINCiAgKQ0KYGBgDQoNCiMjIyAzLiBIb3cgZG8gbGFiZWxzIHdpdGggYGdlb21fdGV4dCgpYCBpbnRlcmFjdCB3aXRoIGZhY2V0aW5nPyBIb3cgY2FuIHlvdSBhZGQgYSBsYWJlbCB0byBhIHNpbmdsZSBmYWNldD8gSG93IGNhbiB5b3UgcHV0IGEgZGlmZmVyZW50IGxhYmVsIGluIGVhY2ggZmFjZXQ/IChIaW50OiB0aGluayBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhLikNCg0KSWYgdGhlIGZhY2V0IHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSB0ZXh0IGlzIGRyYXduIGluIGFsbCBmYWNldHMuDQoNCmBgYHtyfQ0KbGFiZWwgPC0gdGliYmxlKA0KICBkaXNwbCA9IEluZiwNCiAgaHd5ID0gSW5mLA0KICBsYWJlbCA9ICJJbmNyZWFzaW5nIGVuZ2luZSBzaXplIGlzIFxucmVsYXRlZCB0byBkZWNyZWFzaW5nIGZ1ZWwgZWNvbm9teS4iDQopDQoNCmdncGxvdChtcGcsIGFlcyhkaXNwbCwgaHd5KSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLA0KICAgIGRhdGEgPSBsYWJlbCwgdmp1c3QgPSAidG9wIiwgaGp1c3QgPSAicmlnaHQiLA0KICAgIHNpemUgPSAyDQogICkgKw0KICBmYWNldF93cmFwKH5jbGFzcykNCmBgYA0KDQpUbyBkcmF3IHRoZSBsYWJlbCBpbiBvbmx5IG9uZSBmYWNldCwgYWRkIGEgY29sdW1uIHRvIHRoZSBsYWJlbCBkYXRhIGZyYW1lIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBmYWNldGluZyB2YXJpYWJsZShzKSBpbiB3aGljaCB0byBkcmF3IGl0Lg0KDQpgYGB7cn0NCmxhYmVsIDwtIHRpYmJsZSgNCiAgZGlzcGwgPSBJbmYsDQogIGh3eSA9IEluZiwNCiAgY2xhc3MgPSAiMnNlYXRlciIsDQogIGxhYmVsID0gIkluY3JlYXNpbmcgZW5naW5lIHNpemUgaXMgXG5yZWxhdGVkIHRvIGRlY3JlYXNpbmcgZnVlbCBlY29ub215LiINCikNCg0KZ2dwbG90KG1wZywgYWVzKGRpc3BsLCBod3kpKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksDQogICAgZGF0YSA9IGxhYmVsLCB2anVzdCA9ICJ0b3AiLCBoanVzdCA9ICJyaWdodCIsDQogICAgc2l6ZSA9IDINCiAgKSArDQogIGZhY2V0X3dyYXAofmNsYXNzKQ0KYGBgDQoNClRvIGRyYXcgbGFiZWxzIGluIGRpZmZlcmVudCBwbG90cywgc2ltcGx5IGhhdmUgdGhlIGZhY2V0dGluZyB2YXJpYWJsZShzKToNCg0KYGBge3J9DQpsYWJlbCA8LSB0aWJibGUoDQogIGRpc3BsID0gSW5mLA0KICBod3kgPSBJbmYsDQogIGNsYXNzID0gdW5pcXVlKG1wZyRjbGFzcyksDQogIGxhYmVsID0gc3RyX2MoIkxhYmVsIGZvciAiLCBjbGFzcykNCikNCg0KZ2dwbG90KG1wZywgYWVzKGRpc3BsLCBod3kpKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksDQogICAgZGF0YSA9IGxhYmVsLCB2anVzdCA9ICJ0b3AiLCBoanVzdCA9ICJyaWdodCIsDQogICAgc2l6ZSA9IDMNCiAgKSArDQogIGZhY2V0X3dyYXAofmNsYXNzKQ0KYGBgDQoNCiMjIyA0LiBXaGF0IGFyZ3VtZW50cyB0byBgZ2VvbV9sYWJlbCgpYCBjb250cm9sIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBiYWNrZ3JvdW5kIGJveD8NCg0KIC0gYGxhYmVsLnBhZGRpbmdgOiBwYWRkaW5nIGFyb3VuZCBsYWJlbA0KIC0gYGxhYmVsLnJgOiBhbW91bnQgb2Ygcm91bmRpbmcgaW4gdGhlIGNvcm5lcnMNCiAtIGBsYWJlbC5zaXplYDogc2l6ZSBvZiBsYWJlbCBib3JkZXINCg0KIyMjIDUuIFdoYXQgYXJlIHRoZSBmb3VyIGFyZ3VtZW50cyB0byBhcnJvdygpPyBIb3cgZG8gdGhleSB3b3JrPyBDcmVhdGUgYSBzZXJpZXMgb2YgcGxvdHMgdGhhdCBkZW1vbnN0cmF0ZSB0aGUgbW9zdCBpbXBvcnRhbnQgb3B0aW9ucy4NCg0KVGhlIGZvdXIgYXJndW1lbnRzIGFyZSAoZnJvbSB0aGUgaGVscCBmb3IgYXJyb3coKSk6DQoNCiAtIGBhbmdsZWA6IGFuZ2xlIG9mIGFycm93IGhlYWQNCiAtIGBsZW5ndGhgOiBsZW5ndGggb2YgdGhlIGFycm93IGhlYWQNCiAtIGBlbmRzYDogZW5kcyBvZiB0aGUgbGluZSB0byBkcmF3IGFycm93IGhlYWQNCiAtIGB0eXBlYDogIm9wZW4iIG9yICJjbG9zZSI6IHdoZXRoZXIgdGhlIGFycm93IGhlYWQgaXMgYSBjbG9zZWQgb3Igb3BlbiB0cmlhbmdsZQ0K