Overview

This Notebook will demonstrate how you can use caladaptR to:


Setup

The first thing we do is to load caladaptR and the other package we’re going to need. (If you haven’t installed these yet, see this setup script).

library(caladaptr)
library(units)
library(ggplot2)
library(dplyr)
library(sf)
library(tidyr)

We use the conflicted package to tell R which package we want it to use for some common function names:

library(conflicted)
conflict_prefer("filter", "dplyr", quiet = TRUE)
conflict_prefer("count", "dplyr", quiet = TRUE)
conflict_prefer("select", "dplyr", quiet = TRUE)


Part I. Get temperature data for a point location

In Part I, you generate a time series plot of projected maximum annual temperature like the one below for a point location using the four recommended GCMs for California and emissions scenario RCP 4.5.

1. Create the API Request

The first step in getting climate variables back is to create a Cal-Adapt API request object. This involves stringing together a series of functions that specify the pieces of the request.

The following will create an API request for projected temperature data from Scripps:

pt1_cap <- ca_loc_pt(coords = c(-119.168765, 35.487802)) %>%
  ca_gcm(gcms[1:4]) %>%                                 
  ca_scenario(c("rcp45", "rcp85")) %>%
  ca_period("year") %>%
  ca_years(start = 2030, end = 2080) %>%
  ca_cvar(c("tasmin", "tasmax"))


Pro Tip:

  • the order of the constructor functions doesn’t matter

  • when entering coordinates, they must be i) in decimal degrees, and ii) formatted as longitude, latitude (in that order!)

  • this example creates an API request for modeled climate data; for other datasets you might use different constructor functions

  • you don’t have to memorize a bunch of keywords. caladaptr has several built-in constants that contain the values you can pass to API construction functions, including gcms, scenarios, cvars, and periods.


Challenge 1

Enter the following constants to see what they contain gcms, scenarios, cvars, and periods [Answer].

## Your answer here

Pro Tip:

  • not every combination of GCM, scenario, climate variable, and period has a data set

  • these constants are useful for constructing API requests for modeled climate data; they may not be needed for other datasets


2. Examine an API Request

To see what’s in an API request object, type its name at the console:

pt1_cap

Pro Tip:

  • you can customize the colors with ca_settings(). Let console_colors = "dark" or light depending on your RStudio color background.
ca_settings(console_colors = "dark")
pt1_cap


You can double-check if your API request is complete by passing it to ca_preflight():

pt1_cap %>% ca_preflight()


To verify the location in an API request, you can plot it:

plot(pt1_cap)

Pro Tip:

  • To view the LOCA grid cells, add locagrid = TRUE to the plot command.
plot(pt1_cap, locagrid = TRUE)

Your Turn:

Where is this point located? [Answer].

Answer:


3. Fetch Data

Now it’s time to fetch data by feeding our API request into ca_getvals_tbl(). The object returned will be a tibble (data frame):

pt1_tbl <- pt1_cap %>% ca_getvals_tbl(quiet = TRUE)

head(pt1_tbl)


4. Wrangle the Results for Plotting

To produce the desired time series plot, we need to i) pull out just values for RCP 4.5, and ii) convert degrees to °F. For the unit conversion, we can use the handy set_units function from the units package.

pt1_rcp45_tbl <- pt1_tbl %>%
  filter(scenario == "rcp45", cvar == "tasmax") %>%
  mutate(temp_f = set_units(val, degF))

pt1_rcp45_tbl %>% head()


5. Plot the Time Series

Plot these with ggplot:

ggplot(data = pt1_rcp45_tbl, aes(x = as.Date(dt), y = as.numeric(temp_f))) +
  geom_line(aes(color=gcm)) +
  labs(title = "Average Maximum Daily Temperature Per Year for RCP4.5", x = "year", y = "temp (F)")

Challenge 2

Modify the above to create a similar plot for RCP 8.5. [Answer].

## Your answer here

Challenge 3

For the same point, make a plot of average maximum daily temperature year for the same 4 GCMs for the period 1950-2005. [Hint]. [Answer].

## Your answer here
LS0tDQp0aXRsZTogIkdldHRpbmcgU3RhcnRlZCB3aXRoIGNhbGFkYXB0UiINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogDQogICAgY3NzOiBodHRwczovL3VjYW5yLWlnaXMuZ2l0aHViLmlvL2NhbGFkYXB0ci1yZXMvYXNzZXRzL25iX2NzczAxLmNzcw0KICAgIGluY2x1ZGVzOg0KICAgICAgYWZ0ZXJfYm9keTogaHR0cHM6Ly91Y2Fuci1pZ2lzLmdpdGh1Yi5pby9jYWxhZGFwdHItcmVzL2Fzc2V0cy9uYl9mb290ZXIwMS5odG1sDQotLS0NCg0KIyBPdmVydmlldw0KDQpUaGlzIE5vdGVib29rIHdpbGwgZGVtb25zdHJhdGUgaG93IHlvdSBjYW4gdXNlIGNhbGFkYXB0UiB0bzoNCg0KLSBjcmVhdGUgYSBDYWwtQWRhcHQgQVBJIHJlcXVlc3Qgb2JqZWN0IGZvciBhIHBvaW50IGxvY2F0aW9uDQotIGZldGNoIGRhdGEgZnJvbSBDYWwtQWRhcHQgICAgIA0KLSBwbG90IHRoZSBkYXRhIGFzIGEgdGltZSBzZXJpZXMNCg0KXA0KDQojIFNldHVwDQoNClRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpcyB0byBsb2FkIGNhbGFkYXB0UiBhbmQgdGhlIG90aGVyIHBhY2thZ2Ugd2UncmUgZ29pbmcgdG8gbmVlZC4gKElmIHlvdSBoYXZlbid0IGluc3RhbGxlZCB0aGVzZSB5ZXQsIHNlZSB0aGlzIFtzZXR1cCBzY3JpcHRdKGh0dHBzOi8vZ2l0aHViLmNvbS91Y2Fuci1pZ2lzL2NhbGFkYXB0ci1yZXMvYmxvYi9tYWluL2RvY3Mvd29ya3Nob3BzL2NhX2ludHJvX2FwcjIyL3NjcmlwdHMvY2FsYWRhcHRyX3NldHVwLlIpKS4gDQoNCmBgYHtyIGNodW5rMDEsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0naG9sZCd9DQpsaWJyYXJ5KGNhbGFkYXB0cikNCmxpYnJhcnkodW5pdHMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzZikNCmxpYnJhcnkodGlkeXIpDQpgYGANCg0KV2UgdXNlIHRoZSBgY29uZmxpY3RlZGAgcGFja2FnZSB0byB0ZWxsIFIgd2hpY2ggcGFja2FnZSB3ZSB3YW50IGl0IHRvIHVzZSBmb3Igc29tZSBjb21tb24gZnVuY3Rpb24gbmFtZXM6DQoNCmBgYHtyIGNodW5rMDIsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0naG9sZCd9DQpsaWJyYXJ5KGNvbmZsaWN0ZWQpDQpjb25mbGljdF9wcmVmZXIoImZpbHRlciIsICJkcGx5ciIsIHF1aWV0ID0gVFJVRSkNCmNvbmZsaWN0X3ByZWZlcigiY291bnQiLCAiZHBseXIiLCBxdWlldCA9IFRSVUUpDQpjb25mbGljdF9wcmVmZXIoInNlbGVjdCIsICJkcGx5ciIsIHF1aWV0ID0gVFJVRSkNCmBgYA0KDQpcDQoNCiMgUGFydCBJLiBHZXQgdGVtcGVyYXR1cmUgZGF0YSBmb3IgYSBwb2ludCBsb2NhdGlvbg0KDQpJbiBQYXJ0IEksIHlvdSBnZW5lcmF0ZSBhIHRpbWUgc2VyaWVzIHBsb3Qgb2YgcHJvamVjdGVkIG1heGltdW0gYW5udWFsIHRlbXBlcmF0dXJlIGxpa2UgdGhlIG9uZSBiZWxvdyBmb3IgYSBwb2ludCBsb2NhdGlvbiB1c2luZyB0aGUgZm91ciByZWNvbW1lbmRlZCBHQ01zIGZvciBDYWxpZm9ybmlhIGFuZCBlbWlzc2lvbnMgc2NlbmFyaW8gUkNQIDQuNS4NCg0KIVtdKGh0dHBzOi8vdWNhbnItaWdpcy5naXRodWIuaW8vY2FsYWRhcHRyLXJlcy9pbWFnZXMvcHQtdGFzbWF4LXBsb3RfNDAweDI2OHgyNTYucG5nKXtjbGFzcz0nY2VudGVyZWQnfQ0KDQoNCiMjIDFcLiBDcmVhdGUgdGhlIEFQSSBSZXF1ZXN0IA0KDQpUaGUgZmlyc3Qgc3RlcCBpbiBnZXR0aW5nIGNsaW1hdGUgdmFyaWFibGVzIGJhY2sgaXMgdG8gY3JlYXRlIGEgQ2FsLUFkYXB0IEFQSSByZXF1ZXN0IG9iamVjdC4gVGhpcyBpbnZvbHZlcyBzdHJpbmdpbmcgdG9nZXRoZXIgYSBzZXJpZXMgb2YgZnVuY3Rpb25zIHRoYXQgc3BlY2lmeSB0aGUgcGllY2VzIG9mIHRoZSByZXF1ZXN0LiANCg0KVGhlIGZvbGxvd2luZyB3aWxsIGNyZWF0ZSBhbiBBUEkgcmVxdWVzdCBmb3IgcHJvamVjdGVkIHRlbXBlcmF0dXJlIGRhdGEgZnJvbSBTY3JpcHBzOg0KDQpgYGB7ciBjaHVuazAzfQ0KcHQxX2NhcCA8LSBjYV9sb2NfcHQoY29vcmRzID0gYygtMTE5LjE2ODc2NSwgMzUuNDg3ODAyKSkgJT4lDQogIGNhX2djbShnY21zWzE6NF0pICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBjYV9zY2VuYXJpbyhjKCJyY3A0NSIsICJyY3A4NSIpKSAlPiUNCiAgY2FfcGVyaW9kKCJ5ZWFyIikgJT4lDQogIGNhX3llYXJzKHN0YXJ0ID0gMjAzMCwgZW5kID0gMjA4MCkgJT4lDQogIGNhX2N2YXIoYygidGFzbWluIiwgInRhc21heCIpKQ0KYGBgDQoNClwNCg0KKipQcm8gVGlwOioqDQoNCi0gdGhlIG9yZGVyIG9mIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgZG9lc24ndCBtYXR0ZXINCg0KLSB3aGVuIGVudGVyaW5nIGNvb3JkaW5hdGVzLCB0aGV5IG11c3QgYmUgaSkgaW4gZGVjaW1hbCBkZWdyZWVzLCBhbmQgaWkpIGZvcm1hdHRlZCBhcyAqbG9uZ2l0dWRlLCBsYXRpdHVkZSogKGluIHRoYXQgb3JkZXIhKQ0KDQotIHRoaXMgZXhhbXBsZSBjcmVhdGVzIGFuIEFQSSByZXF1ZXN0IGZvciBtb2RlbGVkIGNsaW1hdGUgZGF0YTsgZm9yIG90aGVyIGRhdGFzZXRzIHlvdSBtaWdodCB1c2UgZGlmZmVyZW50IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucw0KDQotIHlvdSBkb24ndCBoYXZlIHRvIG1lbW9yaXplIGEgYnVuY2ggb2Yga2V5d29yZHMuIGBjYWxhZGFwdHJgIGhhcyBzZXZlcmFsIGJ1aWx0LWluIGNvbnN0YW50cyB0aGF0IGNvbnRhaW4gdGhlIHZhbHVlcyB5b3UgY2FuIHBhc3MgdG8gQVBJIGNvbnN0cnVjdGlvbiBmdW5jdGlvbnMsIGluY2x1ZGluZyBgZ2Ntc2AsIGBzY2VuYXJpb3NgLCBgY3ZhcnNgLCBhbmQgYHBlcmlvZHNgLg0KDQpcDQoNCiMjIyBDaGFsbGVuZ2UgMQ0KDQpFbnRlciB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyB0byBzZWUgd2hhdCB0aGV5IGNvbnRhaW4gYGdjbXNgLCBgc2NlbmFyaW9zYCwgYGN2YXJzYCwgYW5kIGBwZXJpb2RzYCBbW0Fuc3dlcl0oaHR0cHM6Ly9iaXQubHkvM2tSVVA1WSldLg0KDQpgYGB7ciBjaHVuazA0fQ0KIyMgWW91ciBhbnN3ZXIgaGVyZQ0KDQpgYGANCg0KKipQcm8gVGlwOioqDQoNCi0gbm90IGV2ZXJ5IGNvbWJpbmF0aW9uIG9mIEdDTSwgc2NlbmFyaW8sIGNsaW1hdGUgdmFyaWFibGUsIGFuZCBwZXJpb2QgaGFzIGEgZGF0YSBzZXQNCg0KLSB0aGVzZSBjb25zdGFudHMgYXJlIHVzZWZ1bCBmb3IgY29uc3RydWN0aW5nIEFQSSByZXF1ZXN0cyBmb3IgbW9kZWxlZCBjbGltYXRlIGRhdGE7IHRoZXkgbWF5IG5vdCBiZSBuZWVkZWQgZm9yIG90aGVyIGRhdGFzZXRzDQoNClwNCg0KIyMgMlwuIEV4YW1pbmUgYW4gQVBJIFJlcXVlc3QNCg0KVG8gc2VlIHdoYXQncyBpbiBhbiBBUEkgcmVxdWVzdCBvYmplY3QsIHR5cGUgaXRzIG5hbWUgYXQgdGhlIGNvbnNvbGU6DQoNCmBgYHtyIGNodW5rMDV9DQpwdDFfY2FwDQpgYGANCg0KKipQcm8gVGlwOioqDQoNCi0geW91IGNhbiBjdXN0b21pemUgdGhlIGNvbG9ycyB3aXRoIGBjYV9zZXR0aW5ncygpYC4gTGV0IGBjb25zb2xlX2NvbG9yc2AgPSBgImRhcmsiYCBvciBgbGlnaHRgIGRlcGVuZGluZyBvbiB5b3VyIFJTdHVkaW8gY29sb3IgYmFja2dyb3VuZC4NCg0KYGBge3IgY2h1bmswNn0NCmNhX3NldHRpbmdzKGNvbnNvbGVfY29sb3JzID0gImRhcmsiKQ0KcHQxX2NhcA0KYGBgDQoNClwNCg0KWW91IGNhbiBkb3VibGUtY2hlY2sgaWYgeW91ciBBUEkgcmVxdWVzdCBpcyBjb21wbGV0ZSBieSBwYXNzaW5nIGl0IHRvIGBjYV9wcmVmbGlnaHQoKWA6DQoNCmBgYHtyIGNodW5rMDd9DQpwdDFfY2FwICU+JSBjYV9wcmVmbGlnaHQoKQ0KYGBgDQoNClwNCg0KVG8gdmVyaWZ5IHRoZSBsb2NhdGlvbiBpbiBhbiBBUEkgcmVxdWVzdCwgeW91IGNhbiBwbG90IGl0Og0KDQpgYGB7ciBjaHVuazA4LCBjYWNoZSA9IEZBTFNFfQ0KcGxvdChwdDFfY2FwKQ0KYGBgDQoNCioqUHJvIFRpcDoqKg0KDQotIFRvIHZpZXcgdGhlIExPQ0EgZ3JpZCBjZWxscywgYWRkIGBsb2NhZ3JpZCA9IFRSVUVgIHRvIHRoZSBwbG90IGNvbW1hbmQuDQoNCmBgYHtyIGNodW5rMDksIGNhY2hlID0gRkFMU0V9DQpwbG90KHB0MV9jYXAsIGxvY2FncmlkID0gVFJVRSkNCmBgYA0KDQoNCiMjIyMgWW91ciBUdXJuOg0KDQpXaGVyZSBpcyB0aGlzIHBvaW50IGxvY2F0ZWQ/IFtbQW5zd2VyXShodHRwczovL2JpdC5seS8zdXFVeDk2KV0uDQoNCkFuc3dlcjogDQoNClwNCg0KIyMgM1wuIEZldGNoIERhdGENCg0KTm93IGl0J3MgdGltZSB0byBmZXRjaCBkYXRhIGJ5IGZlZWRpbmcgb3VyIEFQSSByZXF1ZXN0IGludG8gYGNhX2dldHZhbHNfdGJsKClgLiBUaGUgb2JqZWN0IHJldHVybmVkIHdpbGwgYmUgYSB0aWJibGUgKGRhdGEgZnJhbWUpOiAgDQoNCmBgYHtyIGNodW5rMTAsIGNhY2hlID0gVFJVRX0NCnB0MV90YmwgPC0gcHQxX2NhcCAlPiUgY2FfZ2V0dmFsc190YmwocXVpZXQgPSBUUlVFKQ0KDQpoZWFkKHB0MV90YmwpDQpgYGANCg0KXA0KDQojIyA0XC4gV3JhbmdsZSB0aGUgUmVzdWx0cyBmb3IgUGxvdHRpbmcNCg0KVG8gcHJvZHVjZSB0aGUgZGVzaXJlZCB0aW1lIHNlcmllcyBwbG90LCB3ZSBuZWVkIHRvIGkpIHB1bGwgb3V0IGp1c3QgdmFsdWVzIGZvciBSQ1AgNC41LCBhbmQgaWkpIGNvbnZlcnQgZGVncmVlcyB0byAmIzE3NjtGLiBGb3IgdGhlIHVuaXQgY29udmVyc2lvbiwgd2UgY2FuIHVzZSB0aGUgaGFuZHkgYHNldF91bml0c2AgZnVuY3Rpb24gZnJvbSB0aGUgYHVuaXRzYCBwYWNrYWdlLg0KDQpgYGB7ciBjaHVuazExfQ0KcHQxX3JjcDQ1X3RibCA8LSBwdDFfdGJsICU+JQ0KICBmaWx0ZXIoc2NlbmFyaW8gPT0gInJjcDQ1IiwgY3ZhciA9PSAidGFzbWF4IikgJT4lDQogIG11dGF0ZSh0ZW1wX2YgPSBzZXRfdW5pdHModmFsLCBkZWdGKSkNCg0KcHQxX3JjcDQ1X3RibCAlPiUgaGVhZCgpDQpgYGANCg0KXA0KDQojIyA1XC4gUGxvdCB0aGUgVGltZSBTZXJpZXMNCg0KUGxvdCB0aGVzZSB3aXRoIGdncGxvdDoNCg0KYGBge3IgY2h1bmsxMiwgY2FjaGUgPSBUUlVFfQ0KZ2dwbG90KGRhdGEgPSBwdDFfcmNwNDVfdGJsLCBhZXMoeCA9IGFzLkRhdGUoZHQpLCB5ID0gYXMubnVtZXJpYyh0ZW1wX2YpKSkgKw0KICBnZW9tX2xpbmUoYWVzKGNvbG9yPWdjbSkpICsNCiAgbGFicyh0aXRsZSA9ICJBdmVyYWdlIE1heGltdW0gRGFpbHkgVGVtcGVyYXR1cmUgUGVyIFllYXIgZm9yIFJDUDQuNSIsIHggPSAieWVhciIsIHkgPSAidGVtcCAoRikiKQ0KYGBgDQoNCiMjIyBDaGFsbGVuZ2UgMg0KDQpNb2RpZnkgdGhlIGFib3ZlIHRvIGNyZWF0ZSBhIHNpbWlsYXIgcGxvdCBmb3IgUkNQIDguNS4gW1tBbnN3ZXJdKGh0dHBzOi8vYml0Lmx5LzNGNFZpdHkpXS4NCg0KYGBge3IgY2h1bmsxM30NCiMjIFlvdXIgYW5zd2VyIGhlcmUNCg0KDQpgYGANCg0KIyMjIENoYWxsZW5nZSAzDQoNCkZvciB0aGUgc2FtZSBwb2ludCwgbWFrZSBhIHBsb3Qgb2YgYXZlcmFnZSBtYXhpbXVtIGRhaWx5IHRlbXBlcmF0dXJlIHllYXIgZm9yIHRoZSBzYW1lIDQgR0NNcyBmb3IgdGhlIHBlcmlvZCAxOTUwLTIwMDUuIFtbSGludF0oaHR0cHM6Ly9iaXQubHkvM29XQjEyVildLiBbW0Fuc3dlcl0oaHR0cHM6Ly9iaXQubHkvM0kzWlZwMildLg0KDQpgYGB7ciBjaHVuazE0fQ0KIyMgWW91ciBhbnN3ZXIgaGVyZQ0KDQoNCmBgYA0KDQoNCg==