Parallel Coordinates Plot in ggplot2
How to make Parallel Coordinates Plot in ggplot2 with Plotly.
Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Sign up for early access now.
Default parallel coordinates plot
The input dataset must be a data frame with several numeric variables, each being used as a vertical axis on the chart. Columns number of these variables are specified in the columns
argument of the function.
For this example, a categoric variable is used to color lines, as specified in the groupColumn
variable.
library(plotly)
library(GGally)
data <- iris
p <- ggparcoord(data,
columns = 1:4, groupColumn = 5
)
ggplotly(p)
Custom colour, theme and style
This is the same chart as the previous one, except for the following customizations:
- color palette is improved thanks to the
viridis
package - title is added with
title
, and customized intheme
- dots are added with
showPoints
- a bit of transparency is applied to lines with
alphaLines
theme_ipsum()
is used for the general appearance
library(plotly)
library(GGally)
library(viridis)
library(hrbrthemes)
data <- iris
p <- ggparcoord(data,
columns = 1:4, groupColumn = 5, order = "anyClass",
showPoints = TRUE,
title = "Parallel Coordinate Plot for the Iris Data",
alphaLines = 0.3
) +
scale_color_viridis(discrete=TRUE) +
theme_ipsum()+
theme(
plot.title = element_text(size=10)
)
ggplotly(p)
Scaling
Scaling transforms the raw data to a new scale that is common with other variables. It is a crucial step to compare variables that do not have the same unit, but can also help otherwise as shown in the example below.
The ggally
package offers a scale
argument. Four possible options are applied on the same dataset below:
globalminmax
→ No scalinguniminmax
→ Standardize to Min = 0 and Max = 1std
→ Normalize univariately (substract mean & divide by sd)center
→ Standardize and center variables
library(plotly)
library(GGally)
library(viridis)
library(hrbrthemes)
data <- iris
p <- ggparcoord(data,
columns = 1:4, groupColumn = 5, order = "anyClass",
scale="globalminmax",
showPoints = TRUE,
title = "No scaling",
alphaLines = 0.3
) +
scale_color_viridis(discrete=TRUE) +
theme_ipsum()+
theme(
legend.position="none",
plot.title = element_text(size=13)
) +
xlab("")
ggplotly(p)
Standardize to Min = 0 and Max = 1:
library(plotly)
library(GGally)
library(viridis)
library(hrbrthemes)
data <- iris
p <- ggparcoord(data,
columns = 1:4, groupColumn = 5, order = "anyClass",
scale="uniminmax",
showPoints = TRUE,
title = "Standardize to Min = 0 and Max = 1",
alphaLines = 0.3
) +
scale_color_viridis(discrete=TRUE) +
theme_ipsum()+
theme(
legend.position="none",
plot.title = element_text(size=13)
) +
xlab("")
ggplotly(p)
Normalize univariately (substract mean & divide by sd):
library(plotly)
library(GGally)
library(viridis)
library(hrbrthemes)
data <- iris
p <- ggparcoord(data,
columns = 1:4, groupColumn = 5, order = "anyClass",
scale="std",
showPoints = TRUE,
title = "Normalize univariately (substract mean & divide by sd)",
alphaLines = 0.3
) +
scale_color_viridis(discrete=TRUE) +
theme_ipsum()+
theme(
legend.position="none",
plot.title = element_text(size=13)
) +
xlab("")
ggplotly(p)
Standardize and center variables:
library(plotly)
library(GGally)
library(viridis)
library(hrbrthemes)
data <- iris
p <- ggparcoord(data,
columns = 1:4, groupColumn = 5, order = "anyClass",
scale="center",
showPoints = TRUE,
title = "Standardize and center variables",
alphaLines = 0.3
) +
scale_color_viridis(discrete=TRUE) +
theme_ipsum()+
theme(
legend.position="none",
plot.title = element_text(size=13)
) +
xlab("")
ggplotly(p)
Highlight a group
library(plotly)
library(GGally)
data <- iris
p <- data %>%
arrange(desc(Species)) %>%
ggparcoord(
columns = 1:4, groupColumn = 5, order = "anyClass",
showPoints = TRUE,
title = "Original",
alphaLines = 1
) +
scale_color_manual(values=c( "#69b3a2", "#E8E8E8", "#E8E8E8") ) +
theme_ipsum()+
theme(
legend.position="Default",
plot.title = element_text(size=10)
) +
xlab("")
ggplotly(p)
What About Dash?
Dash for R is an open-source framework for building analytical applications, with no Javascript required, and it is tightly integrated with the Plotly graphing library.
Learn about how to install Dash for R at https://dashr.plot.ly/installation.
Everywhere in this page that you see fig
, you can display the same figure in a Dash for R application by passing it to the figure
argument of the Graph
component from the built-in dashCoreComponents
package like this:
library(plotly)
fig <- plot_ly()
# fig <- fig %>% add_trace( ... )
# fig <- fig %>% layout( ... )
library(dash)
library(dashCoreComponents)
library(dashHtmlComponents)
app <- Dash$new()
app$layout(
htmlDiv(
list(
dccGraph(figure=fig)
)
)
)
app$run_server(debug=TRUE, dev_tools_hot_reload=FALSE)