Before you begin, note that, in the header, the output format of this document is html_notebook. When you save this file, it automatically creates another file with the same file name but with .nb.html extension in the same directory. This is the file you will submit as your homework solution along with the .Rmd file.

Warnings:

  1. Don’t delete the nb.html file.
  2. Don’t knit your .Rmd file to html. If you want to look at the output, just open the nb.html in the browser. Alternatively, click on the “Preview” button on top of the document.

If you delete nb.html file, you may have to create a new .Rmd file and restart from there. If you knit your .Rmd file to html, you will not be able to retain any of the interactivity in the plots. This means the TAs will not be able to grade you!

The objective of this homework is to give you more practice on interactive visualizations using plotly and highcharter.

As always recreate these visualizations exactly. Q1 and Q2 use plotly while Q3-Q5 use highcharter.

Note: The output width of the plotly plots is set to 100% but they still don’t fill up the full width of the HTML document. Don’t worry about it.

Q1 (3 points)

Use mpg data set from ggplot2 to create a static visualization and then use ggplotly() to create a limited interactive plot.

Hint: You will need to supply only frame. No ids used.

gg = ggplot(mpg, aes(x = cty, y = hwy, color = class)) +
  geom_point(aes(frame = class)) + 
  labs(x = 'cty', y = 'hwy') +
  theme(legend.position='none')

ggplotly(gg)

NA

Q2 (3 points)

For this visualization you will use plot_ly() function. There is only one more function in the plot: layout(). To create this plot, we will use economics data set from ggplot2.

Hint: Download Plotly cheatsheet

base = economics %>%
  plot_ly(x = ~ date,
          y = ~ unemploy,
          hoverinfo = 'date') %>%
  add_trace(y = ~ unemploy, 
            mode = 'lines') %>% 
  layout(title = 'Unemployment peaked after the financial crisis',
        yaxis = list(title = "Unemployment in '000"),
        xaxis = list(title = 'Date',
        showlegend = F))
 
base

As an aside, the Y axis in this line graph doesn’t start from 0, which is commonly frowned upon. There is usually no hard and fast rule about this but generally if you are just interested in the trend, truncating the Y axis is OK.

For the next three questions, you will use highcharter.

Q3 (3 points)

This example creates a heatmap similar to the one shown here.

Use mpg data and hchart() function. We want to create a heatmap of average highway mileage for different class and cyl. This plot removes all the observations with five cylinders or with 2seater class.

df_mpg = filter(mpg, cyl != 5) %>% 
  filter(class != '2seater') %>% 
  group_by(class, cyl) %>% 
  summarize(avghwy = mean(hwy),
            .groups = "drop")

hc = hchart(df_mpg, "heatmap", hcaes(x = class, y = as.character(cyl), value = avghwy))

hc

Q4 (3 points)

For this example, use a randomly selected subset of diamonds:

set.seed(2020)
d1 <- diamonds[sample(nrow(diamonds), 1000),]

Next use d1 to create the following plot. You have created this same plot in Homework 1 but with the full diamonds data set.

You can check out the themes here.

I have used hc_theme_flat() for this plot. Please use this theme for your plot too! You can add a theme to the plot using hc_add_theme() function.

hc_diam = hchart(d1, "scatter", hcaes(x = carat, y = price, group = clarity)) 
  
hc_diam %>% 
  hc_title(text = 'Variation in Diamond Prices Increases with Carats') %>% 
  hc_xAxis(title = list(text = "Weight of Diamonds in Carats")) %>% 
  hc_yAxis(title = list(text = "Price of Diamonds")) %>% 
  hc_add_theme(hc_theme_flat())

Q5 (3 points)

Recreate the plot in Q2 using hchart(). I used hc_theme_chalk(). You can use any theme you want.

base_2 = hchart(economics, "line", hcaes(x = date, y = unemploy))

base_2 %>% 
  hc_title(text = 'Unemployment peaked after the financial crisis') %>% 
  hc_xAxis(title = list(text = "Date")) %>% 
  hc_yAxis(title = list(text = "Unemployment in '000")) %>% 
  hc_add_theme(hc_theme_chalk())
LS0tCnRpdGxlOiAiSG9tZXdvcmsgMiIKc3VidGl0bGU6ICJEQSA2MjMzIgphdXRob3I6ICJSdWR5IE1hcnRpbmV6IgpkYXRlOiAiT2N0b2JlciAyMDIwIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogeWV0aQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpCnRoZW1lX3NldCh0aGVtZV9taW5pbWFsKCkpCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpCZWZvcmUgeW91IGJlZ2luLCBub3RlIHRoYXQsIGluIHRoZSBoZWFkZXIsIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoaXMgZG9jdW1lbnQgaXMgYGh0bWxfbm90ZWJvb2tgLiBXaGVuIHlvdSBzYXZlIHRoaXMgZmlsZSwgaXQgYXV0b21hdGljYWxseSBjcmVhdGVzIGFub3RoZXIgZmlsZSB3aXRoIHRoZSBzYW1lIGZpbGUgbmFtZSBidXQgd2l0aCBgLm5iLmh0bWxgIGV4dGVuc2lvbiBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuIFRoaXMgaXMgdGhlIGZpbGUgeW91IHdpbGwgc3VibWl0IGFzIHlvdXIgaG9tZXdvcmsgc29sdXRpb24gYWxvbmcgd2l0aCB0aGUgYC5SbWRgIGZpbGUuIAoKPGZvbnQgY29sb3IgPSAicmVkIj4gCioqV2FybmluZ3MqKjogCgoxKSBEb24ndCBkZWxldGUgdGhlIGBuYi5odG1sYCBmaWxlLiAKMikgRG9uJ3QgYGtuaXRgIHlvdXIgYC5SbWRgIGZpbGUgdG8gYGh0bWxgLiBJZiB5b3Ugd2FudCB0byBsb29rIGF0IHRoZSBvdXRwdXQsIGp1c3Qgb3BlbiB0aGUgYG5iLmh0bWxgIGluIHRoZSBicm93c2VyLiBBbHRlcm5hdGl2ZWx5LCBjbGljayBvbiB0aGUgIlByZXZpZXciIGJ1dHRvbiBvbiB0b3Agb2YgdGhlIGRvY3VtZW50LgoKSWYgeW91IGRlbGV0ZSBgbmIuaHRtbGAgZmlsZSwgeW91IG1heSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBgLlJtZGAgZmlsZSBhbmQgcmVzdGFydCBmcm9tIHRoZXJlLiBJZiB5b3Uga25pdCB5b3VyIGAuUm1kYCBmaWxlIHRvIGBodG1sYCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gcmV0YWluIGFueSBvZiB0aGUgaW50ZXJhY3Rpdml0eSBpbiB0aGUgcGxvdHMuICpUaGlzIG1lYW5zIHRoZSBUQXMgd2lsbCBub3QgYmUgYWJsZSB0byBncmFkZSB5b3UhKgo8L2ZvbnQ+CgoKVGhlIG9iamVjdGl2ZSBvZiB0aGlzIGhvbWV3b3JrIGlzIHRvIGdpdmUgeW91IG1vcmUgcHJhY3RpY2Ugb24gaW50ZXJhY3RpdmUgdmlzdWFsaXphdGlvbnMgdXNpbmcgYHBsb3RseWAgYW5kIGBoaWdoY2hhcnRlcmAuIAoKQXMgYWx3YXlzIHJlY3JlYXRlIHRoZXNlIHZpc3VhbGl6YXRpb25zIGV4YWN0bHkuIFExIGFuZCBRMiB1c2UgYHBsb3RseWAgd2hpbGUgUTMtUTUgdXNlIGBoaWdoY2hhcnRlcmAuIAoKTm90ZTogVGhlIG91dHB1dCB3aWR0aCBvZiB0aGUgYHBsb3RseWAgcGxvdHMgaXMgc2V0IHRvIDEwMCUgYnV0IHRoZXkgc3RpbGwgZG9uJ3QgZmlsbCB1cCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgSFRNTCBkb2N1bWVudC4gRG9uJ3Qgd29ycnkgYWJvdXQgaXQuCgojIyBRMSAoMyBwb2ludHMpCgpVc2UgYG1wZ2AgZGF0YSBzZXQgZnJvbSBgZ2dwbG90MmAgdG8gY3JlYXRlIGEgc3RhdGljIHZpc3VhbGl6YXRpb24gYW5kIHRoZW4gdXNlIGBnZ3Bsb3RseSgpYCB0byBjcmVhdGUgYSBsaW1pdGVkIGludGVyYWN0aXZlIHBsb3QuCgoqKkhpbnQqKjogWW91IHdpbGwgbmVlZCB0byBzdXBwbHkgb25seSBgZnJhbWVgLiBObyBgaWRzYCB1c2VkLgoKYGBge3Igd2FybmluZz1GQUxTRSwgb3V0LndpZHRoPScxNTAlJ30KZ2cgPSBnZ3Bsb3QobXBnLCBhZXMoeCA9IGN0eSwgeSA9IGh3eSwgY29sb3IgPSBjbGFzcykpICsKICBnZW9tX3BvaW50KGFlcyhmcmFtZSA9IGNsYXNzKSkgKyAKICBsYWJzKHggPSAnY3R5JywgeSA9ICdod3knKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSdub25lJykKCmdncGxvdGx5KGdnKQogICAgICAgICAKYGBgCgoKIyMgUTIgKDMgcG9pbnRzKQoKRm9yIHRoaXMgdmlzdWFsaXphdGlvbiB5b3Ugd2lsbCB1c2UgYHBsb3RfbHkoKWAgZnVuY3Rpb24uIFRoZXJlIGlzIG9ubHkgb25lIG1vcmUgZnVuY3Rpb24gaW4gdGhlIHBsb3Q6IGBsYXlvdXQoKWAuICBUbyBjcmVhdGUgdGhpcyBwbG90LCB3ZSB3aWxsIHVzZSBgZWNvbm9taWNzYCBkYXRhIHNldCBmcm9tIGBnZ3Bsb3QyYC4KCioqSGludDoqKiBbRG93bmxvYWQgUGxvdGx5IGNoZWF0c2hlZXRdKGh0dHBzOi8vaW1hZ2VzLnBsb3QubHkvcGxvdGx5LWRvY3VtZW50YXRpb24vaW1hZ2VzL3JfY2hlYXRfc2hlZXQucGRmKQoKCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIG91dC53aWR0aD0nMTAwJSd9CmJhc2UgPSBlY29ub21pY3MgJT4lCiAgcGxvdF9seSh4ID0gfiBkYXRlLAogICAgICAgICAgeSA9IH4gdW5lbXBsb3ksCiAgICAgICAgICBob3ZlcmluZm8gPSAnZGF0ZScpICU+JQogIGFkZF90cmFjZSh5ID0gfiB1bmVtcGxveSwgCiAgICAgICAgICAgIG1vZGUgPSAnbGluZXMnKSAlPiUgCiAgbGF5b3V0KHRpdGxlID0gJ1VuZW1wbG95bWVudCBwZWFrZWQgYWZ0ZXIgdGhlIGZpbmFuY2lhbCBjcmlzaXMnLAogICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJVbmVtcGxveW1lbnQgaW4gJzAwMCIpLAogICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICdEYXRlJywKICAgICAgICBzaG93bGVnZW5kID0gRikpCiAKYmFzZQpgYGAKCkFzIGFuIGFzaWRlLCB0aGUgWSBheGlzIGluIHRoaXMgbGluZSBncmFwaCBkb2Vzbid0IHN0YXJ0IGZyb20gMCwgd2hpY2ggaXMgY29tbW9ubHkgZnJvd25lZCB1cG9uLiBUaGVyZSBpcyB1c3VhbGx5IG5vIGhhcmQgYW5kIGZhc3QgcnVsZSBhYm91dCB0aGlzIGJ1dCBnZW5lcmFsbHkgaWYgeW91IGFyZSBqdXN0IGludGVyZXN0ZWQgaW4gdGhlIHRyZW5kLCB0cnVuY2F0aW5nIHRoZSBZIGF4aXMgaXMgT0suCgoKRm9yIHRoZSBuZXh0IHRocmVlIHF1ZXN0aW9ucywgeW91IHdpbGwgdXNlIFtgaGlnaGNoYXJ0ZXJgXShodHRwczovL2prdW5zdC5jb20vaGlnaGNoYXJ0ZXIvKS4gCgojIyBRMyAoMyBwb2ludHMpClRoaXMgZXhhbXBsZSBjcmVhdGVzIGEgaGVhdG1hcCBzaW1pbGFyIHRvIHRoZSBvbmUgW3Nob3duIGhlcmVdKGh0dHBzOi8vamt1bnN0LmNvbS9oaWdoY2hhcnRlci9hcnRpY2xlcy9oaWdoY2hhcnRlci5odG1sKS4KClVzZSBgbXBnYCBkYXRhIGFuZCBgaGNoYXJ0KClgIGZ1bmN0aW9uLiBXZSB3YW50IHRvIGNyZWF0ZSBhIGhlYXRtYXAgb2YgYXZlcmFnZSBoaWdod2F5IG1pbGVhZ2UgZm9yIGRpZmZlcmVudCBgY2xhc3NgIGFuZCBgY3lsYC4gVGhpcyBwbG90IHJlbW92ZXMgYWxsIHRoZSBvYnNlcnZhdGlvbnMgd2l0aCBmaXZlIGN5bGluZGVycyBvciB3aXRoIGAyc2VhdGVyYCBjbGFzcy4KCmBgYHtyfQpkZl9tcGcgPSBmaWx0ZXIobXBnLCBjeWwgIT0gNSkgJT4lIAogIGZpbHRlcihjbGFzcyAhPSAnMnNlYXRlcicpICU+JSAKICBncm91cF9ieShjbGFzcywgY3lsKSAlPiUgCiAgc3VtbWFyaXplKGF2Z2h3eSA9IG1lYW4oaHd5KSwKICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikKCmhjID0gaGNoYXJ0KGRmX21wZywgImhlYXRtYXAiLCBoY2Flcyh4ID0gY2xhc3MsIHkgPSBhcy5jaGFyYWN0ZXIoY3lsKSwgdmFsdWUgPSBhdmdod3kpKQoKaGMKYGBgCgojIyBRNCAoMyBwb2ludHMpCgpGb3IgdGhpcyBleGFtcGxlLCB1c2UgYSByYW5kb21seSBzZWxlY3RlZCBzdWJzZXQgb2YgYGRpYW1vbmRzYDoKCmBgYHtyfQpzZXQuc2VlZCgyMDIwKQpkMSA8LSBkaWFtb25kc1tzYW1wbGUobnJvdyhkaWFtb25kcyksIDEwMDApLF0KYGBgCgpOZXh0IHVzZSBgZDFgIHRvIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHBsb3QuIFlvdSBoYXZlIGNyZWF0ZWQgdGhpcyBzYW1lIHBsb3QgaW4gSG9tZXdvcmsgMSBidXQgd2l0aCB0aGUgZnVsbCBgZGlhbW9uZHNgIGRhdGEgc2V0LiAKCllvdSBjYW4gY2hlY2sgb3V0IHRoZSB0aGVtZXMgW2hlcmVdKGh0dHBzOi8vamt1bnN0LmNvbS9oaWdoY2hhcnRlci9hcnRpY2xlcy90aGVtZXMuaHRtbCkuCgpJIGhhdmUgdXNlZCBgaGNfdGhlbWVfZmxhdCgpYCBmb3IgdGhpcyBwbG90LiAqKlBsZWFzZSB1c2UgdGhpcyB0aGVtZSBmb3IgeW91ciBwbG90IHRvbyEqKgpZb3UgY2FuIGFkZCBhIHRoZW1lIHRvIHRoZSBwbG90IHVzaW5nIGBoY19hZGRfdGhlbWUoKWAgZnVuY3Rpb24uCgpgYGB7cn0KaGNfZGlhbSA9IGhjaGFydChkMSwgInNjYXR0ZXIiLCBoY2Flcyh4ID0gY2FyYXQsIHkgPSBwcmljZSwgZ3JvdXAgPSBjbGFyaXR5KSkgCiAgCmhjX2RpYW0gJT4lIAogIGhjX3RpdGxlKHRleHQgPSAnVmFyaWF0aW9uIGluIERpYW1vbmQgUHJpY2VzIEluY3JlYXNlcyB3aXRoIENhcmF0cycpICU+JSAKICBoY194QXhpcyh0aXRsZSA9IGxpc3QodGV4dCA9ICJXZWlnaHQgb2YgRGlhbW9uZHMgaW4gQ2FyYXRzIikpICU+JSAKICBoY195QXhpcyh0aXRsZSA9IGxpc3QodGV4dCA9ICJQcmljZSBvZiBEaWFtb25kcyIpKSAlPiUgCiAgaGNfYWRkX3RoZW1lKGhjX3RoZW1lX2ZsYXQoKSkKYGBgCgoKIyMgUTUgKDMgcG9pbnRzKQoKUmVjcmVhdGUgdGhlIHBsb3QgaW4gUTIgdXNpbmcgYGhjaGFydCgpYC4gSSB1c2VkIGBoY190aGVtZV9jaGFsaygpYC4gWW91IGNhbiB1c2UgYW55IHRoZW1lIHlvdSB3YW50LgoKCmBgYHtyIGZpZy53aWR0aD05fQpiYXNlXzIgPSBoY2hhcnQoZWNvbm9taWNzLCAibGluZSIsIGhjYWVzKHggPSBkYXRlLCB5ID0gdW5lbXBsb3kpKQoKYmFzZV8yICU+JSAKICBoY190aXRsZSh0ZXh0ID0gJ1VuZW1wbG95bWVudCBwZWFrZWQgYWZ0ZXIgdGhlIGZpbmFuY2lhbCBjcmlzaXMnKSAlPiUgCiAgaGNfeEF4aXModGl0bGUgPSBsaXN0KHRleHQgPSAiRGF0ZSIpKSAlPiUgCiAgaGNfeUF4aXModGl0bGUgPSBsaXN0KHRleHQgPSAiVW5lbXBsb3ltZW50IGluICcwMDAiKSkgJT4lIAogIGhjX2FkZF90aGVtZShoY190aGVtZV9jaGFsaygpKQpgYGAKCg==