Type: | Package |
Title: | 'd3.js' Utilities for R |
Version: | 1.1.0 |
Date: | 2023-10-01 |
Maintainer: | Kent Russell <kent.russell@timelyportfolio.com> |
URL: | https://github.com/timelyportfolio/d3r |
BugReports: | https://github.com/timelyportfolio/d3r/issues |
Description: | Provides a suite of functions to help ease the use of 'd3.js' in R. These helpers include 'htmltools::htmlDependency' functions, hierarchy builders, and conversion tools for 'partykit', 'igraph,' 'table', and 'data.frame' R objects into the 'JSON' that 'd3.js' expects. |
License: | BSD_3_clause + file LICENSE |
Encoding: | UTF-8 |
Imports: | dplyr, htmltools, tidyr (≥ 0.8.3) |
Suggests: | httr, jsonlite, listviewer, purrr, testthat |
Enhances: | igraph, partykit, rpart, treemap, V8 |
RoxygenNote: | 7.2.3 |
NeedsCompilation: | no |
Packaged: | 2023-10-02 01:58:41 UTC; kentr |
Author: | Mike Bostock [aut, cph] (d3.js library in htmlwidgets/lib, http://d3js.org), Kent Russell [aut, cre, cph] (R interface), Gregor Aisch [aut, cph] (d3-jetpack creator, https://github.com/gka/d3-jetpack), Adam Pearce [aut] (core contributor to d3-jetpack), Ben Ortiz [ctb] |
Repository: | CRAN |
Date/Publication: | 2023-10-02 14:00:02 UTC |
Change Column Name in Children to "name"
Description
Change Column Name in Children to "name"
Usage
change_to_name(x, column = 1)
Arguments
x |
|
column |
column to convert |
Value
data.frame
'd3.js' Dependency for Version 4 Jetpack
Description
d3-jetpack is a set of nifty convenience wrappers that speed up
your daily work with d3.js. Must be included after d3_dep_v4()
.
Learn more by reading d3-jetpack
or by watching this YouTube.
Usage
d3_dep_jetpack(offline = TRUE)
Arguments
offline |
|
Value
htmltools::htmlDependency
See Also
Other 'd3' dependency functions:
d3_dep_v3()
,
d3_dep_v4()
,
d3_dep_v5()
,
d3_dep_v6()
,
d3_dep_v7()
Examples
## Not run:
library(d3r)
library(htmltools)
tl <- tagList(tags$script(HTML(sprintf(
"
var x = 5;
var svg = d3.select('body')
.append('svg');
svg.append('rect')
.at({
x: 100,
y: 100,
width: 100,
height: 100
})
.st({
fill: 'blue',
stroke: 'purple'
});
"
))), d3_dep_v4(), d3_dep_jetpack())
browsable(tl)
tl <- tagList(tags$script(HTML(sprintf(
"
var svg = d3.select('body')
.append('svg');
test_data = [{x: 250, y: 250}, {x: 300, y: 300}, {x: 300, y: 100}];
svg.appendMany(test_data, 'circle')
.at({
cx: function(d){return d.x},
cy: function(d){return d.y},
r: 50
})
.st({
fill: 'purple',
stroke: 'blue'
});
"
))), d3_dep_v4(), d3_dep_jetpack())
browsable(tl)
## End(Not run)
'd3.js' Dependency for Version 3
Description
'd3.js' Dependency for Version 3
Usage
d3_dep_v3(offline = TRUE)
Arguments
offline |
|
Value
htmltools::htmlDependency
See Also
d3_dep_v7
, d3_dep_v6
, d3_dep_v5
, d3_dep_v4
,
and d3_dep_jetpack
.
Other 'd3' dependency functions:
d3_dep_jetpack()
,
d3_dep_v4()
,
d3_dep_v5()
,
d3_dep_v6()
,
d3_dep_v7()
Examples
library(d3r)
library(htmltools)
tagList(d3_dep_v3())
'd3.js' Dependency for Version 4
Description
'd3.js' Dependency for Version 4
Usage
d3_dep_v4(offline = TRUE)
Arguments
offline |
|
Value
htmltools::htmlDependency
See Also
d3_dep_v7
, d3_dep_v6
, d3_dep_v5
, d3_dep_v3
,
and d3_dep_jetpack
.
Other 'd3' dependency functions:
d3_dep_jetpack()
,
d3_dep_v3()
,
d3_dep_v5()
,
d3_dep_v6()
,
d3_dep_v7()
Examples
library(d3r)
library(htmltools)
tagList(d3_dep_v4())
'd3.js' Dependency for Version 5
Description
'd3.js' Dependency for Version 5
Usage
d3_dep_v5(offline = TRUE)
Arguments
offline |
|
Value
htmltools::htmlDependency
See Also
d3_dep_v7
, d3_dep_v6
, d3_dep_v4
, d3_dep_v3
,
and d3_dep_jetpack
.
Other 'd3' dependency functions:
d3_dep_jetpack()
,
d3_dep_v3()
,
d3_dep_v4()
,
d3_dep_v6()
,
d3_dep_v7()
Examples
library(d3r)
library(htmltools)
tagList(d3_dep_v5())
'd3.js' Dependency for Version 6
Description
'd3.js' Dependency for Version 6
Usage
d3_dep_v6(offline = TRUE)
Arguments
offline |
|
Value
htmltools::htmlDependency
See Also
d3_dep_v7
, d3_dep_v5
, d3_dep_v4
, d3_dep_v3
,
and d3_dep_jetpack
.
Other 'd3' dependency functions:
d3_dep_jetpack()
,
d3_dep_v3()
,
d3_dep_v4()
,
d3_dep_v5()
,
d3_dep_v7()
Examples
library(d3r)
library(htmltools)
tagList(d3_dep_v6())
'd3.js' Dependency for Version 7
Description
'd3.js' Dependency for Version 7
Usage
d3_dep_v7(offline = TRUE)
Arguments
offline |
|
Value
htmltools::htmlDependency
See Also
d3_dep_v6
, d3_dep_v5
, d3_dep_v4
, d3_dep_v3
,
and d3_dep_jetpack
.
Other 'd3' dependency functions:
d3_dep_jetpack()
,
d3_dep_v3()
,
d3_dep_v4()
,
d3_dep_v5()
,
d3_dep_v6()
Examples
library(d3r)
library(htmltools)
tagList(d3_dep_v7())
Convert 'igraph' to 'd3.js'
Description
Convert 'igraph' to 'd3.js'
Usage
d3_igraph(igrf = NULL, json = TRUE)
Arguments
igrf |
|
json |
|
Value
list
Examples
## Not run:
library(igraph)
library(igraphdata)
library(d3r)
# with random graph
d3r::d3_igraph(igraph::sample_pa(100))
# check case where vertices 0 cols
d3_igraph(igraph::watts.strogatz.game(1, 50, 4, 0.05))
# with karate from igraphdata
# notice graph attributes are added
data("karate",package="igraphdata")
(karate_d3 <- d3r::d3_igraph(karate))
listviewer::jsonedit(karate_d3)
data("kite",package="igraphdata")
listviewer::jsonedit(d3_igraph(kite))
## End(Not run)
Create 'JSON' that 'd3.js' Expects
Description
Create 'JSON' that 'd3.js' Expects
Usage
d3_json(x = NULL, strip = TRUE)
Arguments
x |
data, usually in the form of |
strip |
|
Value
string
of 'JSON' data
Convert a data.frame
to a 'd3.js' Hierarchy
Description
Convert a data.frame
to a 'd3.js' Hierarchy
Usage
d3_nest(data = NULL, value_cols = character(), root = "root", json = TRUE)
Arguments
data |
|
value_cols |
|
root |
|
json |
|
Value
nested data.frame
Examples
# convert Titanic to a nested d3 hierarchy
# devtools::install_github("timelyportfolio/d3r")
library(d3r)
library(dplyr)
titanic_df <- data.frame(Titanic)
tit_tb <- titanic_df %>%
select(Class,Age,Survived,Sex,Freq) %>%
d3_nest(value_cols="Freq", root="titanic")
tit_tb
# see as tibble
titanic_df %>%
select(Class,Age,Survived,Sex,Freq) %>%
d3_nest(value_cols="Freq", root="titanic", json=FALSE)
# see the structure with listviewer
tit_tb %>%
listviewer::jsonedit()
## Not run:
library(treemap)
library(d3r)
library(dplyr)
library(tidyr)
treemap::random.hierarchical.data() %>%
d3_nest(value_cols = "x")
# use example from ?treemap
data(GNI2014)
treemap(
GNI2014,
index=c("continent", "iso3"),
vSize="population",
vColor="GNI",
type="value",
draw=FALSE
) %>%
{.$tm} %>%
select(continent,iso3,color,vSize) %>%
d3_nest(value_cols = c("color", "vSize"))
## End(Not run)
Convert partykit to d3.js hierarchy
Description
This thing is not even close to being done, so please help with ideas and contributions.
Usage
d3_party(tree = NULL, json = TRUE)
Arguments
tree |
|
json |
|
Value
list
or json
depending on json
arg
Examples
## Not run:
library(d3r)
# from ?rpart
data("kyphosis", package="rpart")
d3_party(
rpart::rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
)
# if you want the list instead of json
d3_party(
rpart::rpart(Kyphosis ~ Age + Number + Start, data = kyphosis),
json = FALSE
)
# with ctree instead of rpart
# using example from ?ctree
d3_party(partykit::ctree(Species ~ .,data = iris))
#devtools::install_github("timelyportfolio/d3treeR")
library(d3treeR)
d3tree2(
d3_party(
rpart::rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
),
celltext = "rule",
valueField = "n"
)
## End(Not run)
Converts Table to 'd3' Nodes and Links
Description
Converts Table to 'd3' Nodes and Links
Usage
d3_table(tB = NULL, vars = NULL, agg = "Freq")
Arguments
tB |
|
vars |
|
agg |
|
Value
list
of two data.frames
- one for nodes and
one for links of the network. This structure is helpful
when working with networkD3
and visNetwork
.
Examples
library(d3r)
d3_table(Titanic, c("Class","Sex"))
Create V8 Context with D3
Description
Create V8 Context with D3
Usage
d3_v8(...)
Arguments
... |
arguments passed to |
Value
v8
context with d3.js loaded and available as d3
Examples
## Not run:
# to do this all in R, please see ggraph
# https://github.com/thomasp85/ggraph
# by Thomas Lin Pedersen
library(d3r)
# make a simple data.frame of US state data
states <- data.frame(
region = as.character(state.region),
state = as.character(state.abb),
population = state.x77[,"Population"],
stringsAsFactors = FALSE
)
# use d3_nest to get the data.frame in a d3 hierarchy
state_hier <- d3_nest(
states,
value_cols = "population"
)
# use d3_v8 to do something useful with d3 and, our state data
ctx <- d3_v8()
ctx$eval(sprintf(
" var states = %s",
state_hier
))
ctx$eval(
"
// we assigned the variable states above
// so now make it a real d3 hierarchy
var root = d3.hierarchy(states);
// sum on population
root.sum(function(d) {return d.population ? d.population : 0});
// use d3 to circle pack or state hierarchy
d3.pack()(root);
// get something we can convert into a data.frame in R
var states_packed = [];
root.each(function(d) {
states_packed.push({
name: d.data.name,
radius: d.r,
x: d.x,
y: d.y
});
});
"
)
# now get states_packed from our context
# to plot in R
states_packed <- ctx$get("states_packed")
opar <- par(no.readonly=TRUE)
# make it square
par(pty="s")
symbols(
states_packed$x,
states_packed$y,
states_packed$radius,
inches=FALSE,
asp=1
)
text(y~x, data=states_packed, labels=states_packed$name)
# return to original par before we made it square
par(opar)
# d3.quadtree example
library(d3r)
x = runif(100)
y = runif(100)
ctx <- d3_v8()
# assign pts as array of pts in V8
ctx$assign("pts", matrix(c(x,y),ncol=2,byrow=TRUE))
# use d3.quadtree() to plot rects
ctx$eval(
"
var d3q = d3.quadtree()
.addAll(pts);
// nodes function from https://bl.ocks.org/mbostock/4343214
function nodes(quadtree) {
var nodes = [];
quadtree.visit(function(node, x0, y0, x1, y1) {
nodes.push({x0:x0, y0:y0, x1: x1, y1: y1})
});
return nodes;
}
"
)
nodes <- ctx$get("nodes(d3q)", simplifyVector = FALSE)
# draw points
opar <- par(no.readonly=TRUE)
# make it square
par(pty="s")
plot(y~x)
# draw quadtree rects
rect(
lapply(nodes,function(x){x$x0}),
lapply(nodes,function(x){x$y0}),
lapply(nodes,function(x){x$x1}),
lapply(nodes,function(x){x$y1})
)
par(opar)
## End(Not run)
Apply 'promote_na' to All Rows
Description
Apply 'promote_na' to All Rows
Usage
promote_na(x)
Arguments
x |
|
Value
data.frame
Promote NA to Top Level
Description
Promote NA to Top Level
Usage
promote_na_one(x)
Arguments
x |
|
Value
data.frame