Example - Challenger O-Ring Failure

Challenger O-Ring data

The raw challenger o-ring data shows the o-ring erosion and blow-by events on shuttle launches leading up to the Challenger disaster.

This dataset was sourced from tufte

Presented in order of launch date, there are obvious signs of damage on some flights, but it’s difficult to see trends in this presentation.

library(dplyr)
library(ggplot2)
library(emphatic)

challenger
#>    flight temp erosion blowby damage       date
#> 1       1   66       0      0      0 1981-04-12
#> 2       2   70       1      0      4 1981-11-12
#> 3       3   69       0      0      0 1982-03-22
#> 4       5   68       0      0      0 1982-11-11
#> 5       6   67       0      0      0 1983-04-04
#> 6       7   72       0      0      0 1983-06-18
#> 7       8   73       0      0      0 1983-08-30
#> 8       9   70       0      0      0 1983-11-28
#> 9    41-B   57       1      0      4 1984-02-03
#> 10   41-C   63       1      0      2 1984-04-06
#> 11   41-D   70       1      0      4 1984-08-30
#> 12   41-G   78       0      0      0 1984-10-05
#> 13   51-A   67       0      0      0 1984-11-08
#> 14   51-C   53       3      2     11 1985-01-24
#> 15   51-D   67       0      0      0 1985-04-12
#> 16   51-B   75       0      0      0 1985-04-29
#> 17   51-G   70       0      0      0 1985-06-17
#> 18   51-F   81       0      0      0 1985-07-29
#> 19   51-I   76       0      0      0 1985-08-27
#> 20   51-J   79       0      0      0 1985-10-03
#> 21   61-A   75       0      2      4 1985-10-30
#> 22   61-B   76       0      0      0 1985-11-26
#> 23   61-C   58       1      0      4 1986-01-12

Ordering by temperature

When ordered by decreasing temperature, a trend is somewhat apparent in the data i.e. lower temperatures have more incidents.

Finding this trend still requires close inspection of the data.

challenger %>% 
  arrange(desc(temp))
#>    flight temp erosion blowby damage       date
#> 1    51-F   81       0      0      0 1985-07-29
#> 2    51-J   79       0      0      0 1985-10-03
#> 3    41-G   78       0      0      0 1984-10-05
#> 4    51-I   76       0      0      0 1985-08-27
#> 5    61-B   76       0      0      0 1985-11-26
#> 6    51-B   75       0      0      0 1985-04-29
#> 7    61-A   75       0      2      4 1985-10-30
#> 8       8   73       0      0      0 1983-08-30
#> 9       7   72       0      0      0 1983-06-18
#> 10      2   70       1      0      4 1981-11-12
#> 11      9   70       0      0      0 1983-11-28
#> 12   41-D   70       1      0      4 1984-08-30
#> 13   51-G   70       0      0      0 1985-06-17
#> 14      3   69       0      0      0 1982-03-22
#> 15      5   68       0      0      0 1982-11-11
#> 16      6   67       0      0      0 1983-04-04
#> 17   51-A   67       0      0      0 1984-11-08
#> 18   51-D   67       0      0      0 1985-04-12
#> 19      1   66       0      0      0 1981-04-12
#> 20   41-C   63       1      0      2 1984-04-06
#> 21   61-C   58       1      0      4 1986-01-12
#> 22   41-B   57       1      0      4 1984-02-03
#> 23   51-C   53       3      2     11 1985-01-24

First Iteration with {emphatic}

The cluster of damage at lower temperatures is now much more visually apparent.


challenger %>%
  arrange(desc(temp)) %>%
  hl(palette = scale_color_viridis_c(option = 'B'), cols = 'temp') %>%
  hl(
    scale_color_gradient(low = 'pink', high = 'red'),
    rows = damage > 0,
    cols = damage
  ) 
     flight temp erosion blowby damage       date
1 51-F 81 0 0 0 1985-07-29
2 51-J 79 0 0 0 1985-10-03
3 41-G 78 0 0 0 1984-10-05
4 51-I 76 0 0 0 1985-08-27
5 61-B 76 0 0 0 1985-11-26
6 51-B 75 0 0 0 1985-04-29
7 61-A 75 0 2 4 1985-10-30
8 8 73 0 0 0 1983-08-30
9 7 72 0 0 0 1983-06-18
10 2 70 1 0 4 1981-11-12
11 9 70 0 0 0 1983-11-28
12 41-D 70 1 0 4 1984-08-30
13 51-G 70 0 0 0 1985-06-17
14 3 69 0 0 0 1982-03-22
15 5 68 0 0 0 1982-11-11
16 6 67 0 0 0 1983-04-04
17 51-A 67 0 0 0 1984-11-08
18 51-D 67 0 0 0 1985-04-12
19 1 66 0 0 0 1981-04-12
20 41-C 63 1 0 2 1984-04-06
21 61-C 58 1 0 4 1986-01-12
22 41-B 57 1 0 4 1984-02-03
23 51-C 53 3 2 11 1985-01-24

Second Iteration with {emphatic}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Expand temperature range to include challenger launch temperature
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
challenger_expanded <- challenger %>%
  mutate(temp = factor(temp, levels = 30:81)) %>%
  tidyr::complete(temp) %>%
  arrange(desc(temp)) %>%
  as.data.frame() %>%
  mutate(temp = as.numeric(levels(temp))[temp]) %>%
  select(flight, everything()) %>%
  mutate(
    flight = if_else(temp == 31, "Challenger", flight)
  )


challenger_expanded %>% 
  hl(scale_color_viridis_c(option = 'B'), cols = temp, show_legend = TRUE) %>%
  hl(
    scale_color_gradient(low = 'lightblue', high = 'orange'),
    rows = !is.na(damage),
    cols = damage,
    show_legend = TRUE
  ) %>%
  hl('firebrick1', rows = temp == 31, cols = flight) %>%
  hl_adjust(na = '')
         flight temp erosion blowby damage       date
1 51-F 81 0 0 0 1985-07-29
2 80
3 51-J 79 0 0 0 1985-10-03
4 41-G 78 0 0 0 1984-10-05
5 77
6 51-I 76 0 0 0 1985-08-27
7 61-B 76 0 0 0 1985-11-26
8 51-B 75 0 0 0 1985-04-29
9 61-A 75 0 2 4 1985-10-30
10 74
11 8 73 0 0 0 1983-08-30
12 7 72 0 0 0 1983-06-18
13 71
14 2 70 1 0 4 1981-11-12
15 9 70 0 0 0 1983-11-28
16 41-D 70 1 0 4 1984-08-30
17 51-G 70 0 0 0 1985-06-17
18 3 69 0 0 0 1982-03-22
19 5 68 0 0 0 1982-11-11
20 6 67 0 0 0 1983-04-04
21 51-A 67 0 0 0 1984-11-08
22 51-D 67 0 0 0 1985-04-12
23 1 66 0 0 0 1981-04-12
24 65
25 64
26 41-C 63 1 0 2 1984-04-06
27 62
28 61
29 60
30 59
31 61-C 58 1 0 4 1986-01-12
32 41-B 57 1 0 4 1984-02-03
33 56
34 55
35 54
36 51-C 53 3 2 11 1985-01-24
37 52
38 51
39 50
40 49
41 48
42 47
43 46
44 45
45 44
46 43
47 42
48 41
49 40
50 39
51 38
52 37
53 36
54 35
55 34
56 33
57 32
58 Challenger 31
59 30

temp: 30 35 40 45 50 55 60 65 70 75 80
damage: 0.00 1.25 2.50 3.75 5.00 6.25 7.50 8.75 10.00