## 12.7 Coloring a Shaded Region Based on Value

### 12.7.1 Problem

You want to set the color of a shaded region based on the y value.

### 12.7.2 Solution

Add a column that categorizes the y values, then map that column to fill. In this example, we’ll first categorize the values as positive or negative:

``````library(gcookbook)  # Load gcookbook for the climate data set
library(dplyr)

climate_mod <- climate %>%
filter(Source == "Berkeley") %>%
mutate(valence = if_else(Anomaly10y >= 0, "pos", "neg"))

climate_mod
#>       Source Year Anomaly1y Anomaly5y Anomaly10y Unc10y valence
#> 1   Berkeley 1800        NA        NA     -0.435  0.505     neg
#> 2   Berkeley 1801        NA        NA     -0.453  0.493     neg
#> 3   Berkeley 1802        NA        NA     -0.460  0.486     neg
#>  ...<199 more rows>...
#> 203 Berkeley 2002        NA        NA      0.856  0.028     pos
#> 204 Berkeley 2003        NA        NA      0.869  0.028     pos
#> 205 Berkeley 2004        NA        NA      0.884  0.029     pos``````

Once we’ve categorized the values as positive or negative, we can make the plot, mapping valence to the fill color, as shown in Figure 12.13:

``````ggplot(climate_mod, aes(x = Year, y = Anomaly10y)) +
geom_area(aes(fill = valence)) +
geom_line() +
geom_hline(yintercept = 0)``````

### 12.7.3 Discussion

If you look closely at the figure, you’ll notice that there are some stray shaded areas near the zero line. This is because each of the two colored areas is a single polygon bounded by the data points, and the data points are not actually at zero. To solve this problem, we can interpolate the data to 1,000 points by using `approx()`:

``````# approx() returns a list with x and y vectors
interp <- approx(climate_mod\$Year, climate_mod\$Anomaly10y, n = 1000)

# Put in a data frame and recalculate valence
cbi <- data.frame(Year = interp\$x, Anomaly10y = interp\$y) %>%
mutate(valence = if_else(Anomaly10y >= 0, "pos", "neg"))``````

It would be more precise (and more complicated) to interpolate exactly where the line crosses zero, but `approx()` works fine for the purposes here.

Now we can plot the interpolated data (Figure 12.14). This time we’ll make a few adjustments – we’ll make the shaded regions partially transparent, change the colors, remove the legend, and remove the padding on the left and right sides:

``````ggplot(cbi, aes(x = Year, y = Anomaly10y)) +
geom_area(aes(fill = valence), alpha = .4) +
geom_line() +
geom_hline(yintercept = 0) +
scale_fill_manual(values = c("#CCEEFF", "#FFDDDD"), guide = FALSE) +
scale_x_continuous(expand = c(0, 0))``````
The text passage describes a method for categorizing and visualizing temperature anomaly data using the R programming language and the ggplot2 package. It includes code snippets and explanations for creating a plot with shaded regions based on the value of the anomalies.
no_question
Given a text passage, determine:
    1. If it contains a mathematical question (including word problems or calculations)
    2. If an answer to that mathematical question is provided in the text

First, describe the content structure you found in 1-2 sentences.

Then provide your analysis in the following format:
TYPE: <one of the following values>
- NO_QUESTION
- SINGLE_QUESTION
- SINGLE_QUESTION_WITH_ANSWER
- MULTIPLE_QUESTIONS
- MULTIPLE_QUESTIONS_WITH_ANSWERS
system
## 12.7 Coloring a Shaded Region Based on Value

### 12.7.1 Problem

You want to set the color of a shaded region based on the y value.

### 12.7.2 Solution

Add a column that categorizes the y values, then map that column to fill. In this example, we’ll first categorize the values as positive or negative:

``````library(gcookbook)  # Load gcookbook for the climate data set
library(dplyr)

climate_mod <- climate %>%
filter(Source == "Berkeley") %>%
mutate(valence = if_else(Anomaly10y >= 0, "pos", "neg"))

climate_mod
#>       Source Year Anomaly1y Anomaly5y Anomaly10y Unc10y valence
#> 1   Berkeley 1800        NA        NA     -0.435  0.505     neg
#> 2   Berkeley 1801        NA        NA     -0.453  0.493     neg
#> 3   Berkeley 1802        NA        NA     -0.460  0.486     neg
#>  ...<199 more rows>...
#> 203 Berkeley 2002        NA        NA      0.856  0.028     pos
#> 204 Berkeley 2003        NA        NA      0.869  0.028     pos
#> 205 Berkeley 2004        NA        NA      0.884  0.029     pos``````

Once we’ve categorized the values as positive or negative, we can make the plot, mapping valence to the fill color, as shown in Figure 12.13:

``````ggplot(climate_mod, aes(x = Year, y = Anomaly10y)) +
geom_area(aes(fill = valence)) +
geom_line() +
geom_hline(yintercept = 0)``````

### 12.7.3 Discussion

If you look closely at the figure, you’ll notice that there are some stray shaded areas near the zero line. This is because each of the two colored areas is a single polygon bounded by the data points, and the data points are not actually at zero. To solve this problem, we can interpolate the data to 1,000 points by using `approx()`:

``````# approx() returns a list with x and y vectors
interp <- approx(climate_mod\$Year, climate_mod\$Anomaly10y, n = 1000)

# Put in a data frame and recalculate valence
cbi <- data.frame(Year = interp\$x, Anomaly10y = interp\$y) %>%
mutate(valence = if_else(Anomaly10y >= 0, "pos", "neg"))``````

It would be more precise (and more complicated) to interpolate exactly where the line crosses zero, but `approx()` works fine for the purposes here.

Now we can plot the interpolated data (Figure 12.14). This time we’ll make a few adjustments – we’ll make the shaded regions partially transparent, change the colors, remove the legend, and remove the padding on the left and right sides:

``````ggplot(cbi, aes(x = Year, y = Anomaly10y)) +
geom_area(aes(fill = valence), alpha = .4) +
geom_line() +
geom_hline(yintercept = 0) +
scale_fill_manual(values = c("#CCEEFF", "#FFDDDD"), guide = FALSE) +
scale_x_continuous(expand = c(0, 0))``````
user
The text passage describes a method for categorizing and visualizing temperature anomaly data using the R programming language and the ggplot2 package. It includes code snippets and explanations for creating a plot with shaded regions based on the value of the anomalies.

TYPE: NO_QUESTION