1 ggpcp

library(ggpcp)
library(tidyverse)
data(flea, package = "GGally")
head(flea)
##    species tars1 tars2 head aede1 aede2 aede3
## 1 Concinna   191   131   53   150    15   104
## 2 Concinna   185   134   50   147    13   105
## 3 Concinna   200   137   52   144    14   102
## 4 Concinna   173   127   50   144    16    97
## 5 Concinna   171   118   49   153    13   106
## 6 Concinna   160   118   47   140    15    99
flea %>%
  pcp_select(species, 2:7, species) %>%
  pcp_scale(method="uniminmax") %>%
  pcp_arrange() %>%
  ggplot(aes_pcp()) + 
  geom_pcp_axes() + 
  geom_pcp(aes(colour = species))+theme_bw()

flea %>%
  pcp_select(1:7) %>%
  pcp_scale(method="uniminmax") %>%
  pcp_arrange() %>%
  ggplot(aes_pcp()) + 
  geom_pcp_axes() + 
  geom_pcp_boxes(boxwidth = 0.1, fill="grey70") +
  geom_pcp(aes(colour = species), overplot = "none") +
  geom_pcp_labels()+theme_bw(base_size=12)

titanic <- as.data.frame(Titanic)
titanic <- titanic %>%
  purrr::map(.f = function(x) rep(x, titanic$Freq)) %>%
  as.data.frame() %>% select(-Freq)
head(titanic)
##   Class  Sex   Age Survived
## 1   3rd Male Child       No
## 2   3rd Male Child       No
## 3   3rd Male Child       No
## 4   3rd Male Child       No
## 5   3rd Male Child       No
## 6   3rd Male Child       No
titanic %>% 
  pcp_select(1:4) %>%
  pcp_scale() %>%
  pcp_arrange(method="from-right") %>%
  ggplot(aes_pcp()) + 
  geom_pcp_boxes(boxwidth=0.1) + 
  geom_pcp(aes(colour = Survived), alpha = 0.1, axiswidth = c(0,0)) +
  scale_colour_manual(values=c("darkorange", "steelblue")) +
  guides(colour=guide_legend(override.aes = list(alpha=1))) +
  geom_pcp_labels() +
  scale_x_discrete(expand = expansion(add=0.2))+theme_bw(base_size=12)

titanic %>% 
  pcp_select(1:4) %>%
  pcp_scale() %>%
  pcp_arrange(method="from-both") %>%
  ggplot(aes_pcp()) + 
  geom_pcp_boxes(boxwidth=0.1) + 
  geom_pcp(aes(colour = Survived), alpha = 0.1) +
  scale_colour_manual(values=c("darkorange", "steelblue")) +
  guides(colour=guide_legend(override.aes = list(alpha=1))) +
  geom_pcp_labels() +
  scale_x_discrete(expand = expansion(add=0.2))+theme_bw(base_size=16)

head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
mtcars %>%
  mutate(cyl = factor(cyl),
         vs = factor(vs),
         am = factor(am),
         gear=factor(gear),
         carb = factor(carb),
         `liter/100km` = 1/(mpg*1.6/4),
         `-disp` = -disp) %>%
  arrange(mpg) %>% # draw lines from lowest to highest mileage
  pcp_select(1,12, 2:11,13) %>%
  pcp_scale() %>%
  pcp_arrange(method="from-left") %>%
  ggplot(aes_pcp()) + 
  geom_pcp_axes() + 
  geom_pcp_boxes(fill="grey80") + 
  geom_pcp(aes(colour = as.numeric(mpg)), size = 1, overplot = "none") +
  scale_colour_gradient2("mpg", mid="grey80", midpoint = 20, low="darkred", high="darkblue") +
  theme_bw() + 
  facet_grid(mpg>20~., labeller = "label_both")

data(nasa, package="ggpcp")
data(nasa)
library(ggplot2)
nasa |>
  dplyr::filter(id == "1-10") |>
  pcp_select(starts_with("cloud"), ozone, temperature) |>
  pcp_scale() |>
  ggplot(aes_pcp()) +
  geom_pcp(aes(colour=month))+theme_bw()

library(ggplot2)
head(Carcinoma)
## # A tibble: 6 × 9
##      No Average A     B     C     D     E     F     G    
##   <dbl>   <dbl> <fct> <fct> <fct> <fct> <fct> <fct> <fct>
## 1     1    3.14 4     3     4     2     3     3     3    
## 2     2    1    1     1     1     1     1     1     1    
## 3     3    3    3     3     3     3     3     3     3    
## 4     4    3.29 4     3     3     4     3     3     3    
## 5     5    3    3     3     3     3     3     3     3    
## 6     6    1.29 2     1     2     1     1     1     1
Carcinoma |>
  pcp_select(F, D, C, A, G, E, B, Average) |>
  pcp_scale(method="uniminmax") |>
  pcp_arrange() |>
  ggplot(aes_pcp()) +
  geom_pcp_axes() +
  geom_pcp(aes(colour = Average > 2)) +
  geom_pcp_boxes(colour="black", alpha=0) +
  geom_pcp_labels(aes(label = pcp_level), fill="white", alpha = 1) +
  theme_bw() +
  scale_x_discrete(expand = expansion(add=0.25)) +
  xlab("Pathologist") + 
  ylab("Carcinoma score 1 (Negative) to 5 (Invasive Carcinoma)") +
  theme(axis.text.y=element_blank(), axis.ticks.y=element_blank(), 
        legend.position="none")

mtcars_pcp <- mtcars |>
  dplyr::mutate(
    cyl = factor(cyl),
    vs = factor(vs),
    am = factor(am),
    gear = factor(gear),
    carb = factor(carb)
  ) |>
  pcp_select(1:11) |> # select everything
  pcp_scale() |>
  pcp_arrange()
base <- mtcars_pcp |> ggplot(aes_pcp())

# Just the base plot:
base + geom_pcp()

# with the pcp theme
base + geom_pcp() + theme_pcp()

# with boxplots:
base +
  geom_pcp(aes(colour = cyl)) +
  geom_boxplot(aes(x = pcp_x, y = pcp_y),
               inherit.aes=FALSE,
               data = dplyr::filter(mtcars_pcp, pcp_class!="factor")) +
  theme_pcp()

# base plot with boxes and labels
base +
  geom_pcp(aes(colour = cyl)) +
  geom_pcp_boxes() +
  geom_pcp_labels() +
  theme_pcp()