Skip to content
Add More Interactivity to htmlWidgets
JavaScript R HTML CSS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
R fix bug exporting .html Jun 7, 2018
README_files/figure-markdown_github Improve README Jun 19, 2017
inst set .exportBtn to FALSE by default Jun 7, 2018
man update man + Description (date) Jun 7, 2018
newUI
tests fix text controller Jan 30, 2018
vignettes New UI in gifs included in the vignette Jun 16, 2017
.Rbuildignore Module server function can now accept reactive values as arguments. Aug 4, 2017
.gitignore Add vignette Jan 4, 2017
.travis.yml Add covr Apr 7, 2017
DESCRIPTION update news and description Jun 11, 2018
LICENSE
NAMESPACE can choose to use webshot or not May 30, 2018
NEWS.md update news and description Jun 11, 2018
README.Rmd update readme Dec 20, 2017
README.md ad codecov Oct 25, 2017
appveyor.yml
codecov.yml add travis, appveyor and codecov Apr 5, 2017
manipulateWidget.Rproj update proj Nov 28, 2017

README.md

Add more interactivity to interactive charts

CRAN Status Badge CRAN Downloads Badge Travis-CI Build Status Appveyor Build Status codecov

manipulateWidget lets you create in just a few lines of R code a nice user interface to modify the data or the graphical parameters of one or multiple interactive charts. It is useful to quickly explore visually some data or for package developers to generate user interfaces easy to maintain.

Combining widgets and some html content

This R package is largely inspired by the manipulate package from Rstudio. It provides the function manipulateWidget that can be used to create in a very easy way a graphical interface that let the user modify the data or the parameters of an interactive chart. Technically, the function generates a Shiny gadget, but the user does not even have to know what is Shiny.

Why should you use it?

All functionalities of this package can be replicated with other packages like shiny, flexdashboard, crosstalk and others. So why another package?

manipulateWidget has three advantages:

  • It is easy and fast to use. Only a few lines of R are necessary to create a user interface.
  • Code can be included in any R script. No need to create a dedicated .R or .Rmd file.
  • It works with all htmlwidgets. In contrast, crosstalk only supports a few of them.

manipulateWidget can be especially powerful for users who are exploring some data set and want to quickly build a graphical tool to see what is in their data. manipulateWidget has also some advanced features that can be used with almost no additional code and that could seduce some package developers: grouping inputs, conditional inputs and comparison mode.

Installation

The package can be installed from CRAN:

install.packages("manipulateWidget")

You can also install the latest development version from github:

devtools::install_github("rte-antares-rpackage/manipulateWidget", ref="develop")

Getting started

The hard part for the user is to write a code that generates an interactive chart. Once this is done, he only has to describe what parameter of the code should be modified by what input control. For instance, consider the following code that identifies clusters in the iris data set and uses package plotly to generate an interactive scatter plot.

library(plotly)
data(iris)

plotClusters <- function(xvar, yvar, nclusters) {
  clusters <- kmeans(iris[, 1:4], centers = nclusters)
  clusters <- paste("Cluster", clusters$cluster)
  
  plot_ly(x = ~iris[[xvar]], y = ~iris[[yvar]], color = ~clusters,
          type = "scatter", mode = "markers") %>% 
    layout(xaxis = list(title=xvar), yaxis = list(title=yvar))
}

plotClusters("Sepal.Width", "Sepal.Length", 3)

Once this code has been written, it is very easy to produce a UI that lets the user change the values of the three parameters of the function plotClusters:

varNames <- names(iris)[1:4]

manipulateWidget(
  plotClusters(xvar, yvar, nclusters),
  xvar = mwSelect(varNames),
  yvar = mwSelect(varNames, value = "Sepal.Width"),
  nclusters = mwSlider(1, 10, value = 3)
)

An example of output of manipulateWidget

The package also provides the combineWidgets function to easily combine multiple interactive charts in a single view. Of course both functions can be used together. Here is the code to generate the UI in the first animation.

myPlotFun <- function(distribution, range, title) {
  randomFun <- switch(distribution, gaussian = rnorm, uniform = runif)
  myData <- data.frame(
    year = seq(range[1], range[2]),
    value = randomFun(n = diff(range) + 1)
  )
  combineWidgets(
    ncol = 2, colsize = c(2, 1),
    dygraph(myData, main = title),
    combineWidgets(
      plot_ly(x = myData$value, type = "histogram"),
      paste(
        "The graph on the left represents a random time series generated using a <b>",
        distribution, "</b>distribution function.<br/>",
        "The chart above represents the empirical distribution of the generated values."
      )
    )
  )
  
}

manipulateWidget(
  myPlotFun(distribution, range, title),
  distribution = mwSelect(choices = c("gaussian", "uniform")),
  range = mwSlider(2000, 2100, value = c(2000, 2100), label = "period"),
  title = mwText()
)

For more information take a look at the package vignette.

You can’t perform that action at this time.