Please see this Building Widgets blog post Why d3r?.
d3r
is on CRAN, so install with install.packages("d3r")
or for the absolute latest use devtools
.
devtools::install_github("timelyportfolio/d3r")
d3r
makes d3.js
dependency injection in R easy with d3_dep_v3()
, d3_dep_v4()
, d3_dep_v5()
, d3_dep_v6()
, and the newest d3_dep_v7()
. These functions work well with htmltools::tags
.
library(htmltools)
library(d3r)
# check web developer tools to see d3 is available
browsable(
attachDependencies(
tagList(),
d3_dep_v7()
)
)
# or include directly in a taglist; I prefer this method.
browsable(
tagList(
h1("I have d3 version ", span(id="version")),
tags$script("d3.select('#version').text(d3.version)"),
d3_dep_v7()
)
)
Also, I will commit to keeping d3r
up-to-date with d3.js
, so you’ll no longer need multiple copies of d3.js
for your htmlwidgets
. If you are a htmlwidget
author, you will no longer need to worry every time d3.js
gets a new release. See treebar
lines for an example of using d3r
with your htmlwidget
.
Building d3.js
hierarchies can be very difficult. d3r::d3_nest()
will convert table
and data.frame
to a nested d3.js
hierarchy ready for work with d3-hierarchy
.
d3_nest(as.data.frame(Titanic))
As another example, let’s go from treemap
to d3.js
.
library(treemap)
library(d3r)
d3_nest(
treemap::random.hierarchical.data(),
value_cols = "x"
)
rpart
and similar objects in R
are very difficult to convert but make perfect subjects for d3
hierarchical layouts. d3_party
helps convert these objects for easy usage with d3.js
.
#devtools::install_github("timelyportfolio/d3treeR")
library(d3treeR)
library(d3r)
# example from ?rpart
data("kyphosis", package="rpart")
rp <- rpart::rpart(
Kyphosis ~ Age + Number + Start,
data = kyphosis
)
# get the json hierarchy
d3_party(tree=rp)
# interactive plot with d3treeR
d3tree2(
d3_party(tree=rp),
celltext="description",
valueField="n"
)
igraph
to d3.js
network of nodes
and links
is a very common conversion. d3r::d3_igraph
will do this for you.
library(igraph)
library(d3r)
d3_igraph(igraph::watts.strogatz.game(1, 50, 4, 0.05))
I have a whole lot of ideas. Please let me know yours, and let’s make this package great.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.