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)

## 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()
