parcoords provides an
interactive view (parcoords-es)
of multivariate data sets that fully integrates with Shiny
and crosstalk.
The default view provides limited interactivity. Through various
arguments to parcoords, we can provide a more immersive
customized experience.
We have multiple brush types available through the
brushMode argument, which allow a user the ability to
filter/select the data.
library(parcoords)
parcoords(
mtcars,
brushMode = '1D-axes', # "1D-axes", "1D-axes-multi", or "2D-strums"
height = 500
)In addition to the brush mode, we have some other supporting
arguments for additional customization, such as
brushPredicate and alphaOnBrushed. Contrast
with the above chart to see the differences in behavior.
Color can be a single color as rgb or hex
value.
We can also control color with a function by providing a
list( colorScale = , colorBy = , colorScheme =, colorInterpolator = , colorDomain =)
where colorScale is the name of the d3-scale such as
scaleOrdinal or scaleSequential and
colorBy is the column name from the data to determine
color. If appplying color to a discrete or ordinal variable then please
also supply colorScheme, such as schemCategory10.
If applying color to a continuous variable then please also supply
colorInterpolator as the name of the d3 interpolator, such
as interpolateViridis.
If using a d3 color scale, then make sure to use the argument
withD3 = TRUE. Hopefully, the examples below help
clarify the concept.
library(parcoords)
parcoords(
mtcars,
color = list(
# discrete or categorical column
colorScale = "scaleOrdinal",
colorBy = "cyl",
colorScheme = "schemeCategory10"
),
withD3 = TRUE,
height = 500
)For coloring with a continuous variable, the list will
be slightly different with colorScale = 'scaleSequential'
as the most likely option. interpolateViridis is the
default interpolator, and we use interpolateMagma
below.
Bundling can help with bigger data sets. For the sake of size, we
will continue to use with mtcars below. To see the effect,
you might like to try with survival::colon or
ggplot2::diamonds.
With larger (> 1000 rows) datasets, interactivity can slow
dramatically unless you use queue = TRUE with
rate, which will require a little experimentation to get
right. As above, we’ll use with mtcars, but really you
should only need these options with much larger datasets.
I have included mode = 'tiled' to experiment with the
technique proposed in
Tile-based parallel coordinates and its application in financial visualization
Jamal Alsakran, Ye Zhao, and Xinlei Zhao
I would love feedback on this for improvement or
suggestions. While the technique is designed for larger
datasets, this code has not been optimized and does not use a cache, so
it actually slows down as the data grows larger. This option does not
make sense with mtcars but for example purposes we will
continue to use this smaller dataset.
The package provides some helper methods for use in standalone or
Shiny contexts. For instance, we can use the snapshot to
provide a png export of the current state of the parallel
coordinates chart.
The prior version of parallel coordinates had some very basic support for capturing the chart as a static image. However, the functionality was not complete, and the implementation was buggy. Now, taking snapshots of the parallel coordinates chart is available through JavaScript and R. The resulting image will also record the current state of brushes.
library(parcoords)
pc <- parcoords(
data = mtcars,
color = list(
colorBy = "hp",
colorScale = "scaleSequential"
),
alpha = 0.5,
brushMode = "1d",
# requires withD3 for now but will change so this is not necessary
# after some iteration since this will pollute global namespace
# and potenially conflict with other htmlwidgets using a different version of d3
withD3 = TRUE,
elementId = "parcoords-snapshot-example"
)
htmltools::tagList(
htmltools::tags$script(
"
function snapshotPC() {
var pc = HTMLWidgets.find('#parcoords-snapshot-example').instance.parcoords;
pc.snapshot();
}
"
),
htmltools::tags$button(
"snapshot",
onclick = "snapshotPC()"
),
pc
)Similar to leaflet and plotly,
parcoords offers proxy methods to interact with parallel
coordinates in Shiny without a full re-render. Currently, the following
functions (namespaced by pc*) are available.
pcFilterpcCenterpcSnapshotpcHidepcUnhidepcSnapshotSee ?parcoords-shiny for some examples.