How to use KNIME software to visualize using D3.JS.

Hello everyone, I have a question about how I can use KNIME software to use D3.JS to visualize the data I am processing. Give a simple example:

For example, how to use the chord diagram in d3. js. I have some understanding of data processing. Overall, it involves processing data into JSON format and replacing it with D3.js.

But how to achieve results in KNIME software has never been successful. Request your help.
Thank you.

D3.JS :
D3 Gallery / D3 | Observable (observablehq.com)

Chord diagram / D3 | Observable (observablehq.com)

chart = {
const width = 640;
const height = width;
const outerRadius = Math.min(width, height) * 0.5 - 30;
const innerRadius = outerRadius - 20;
const {names, colors} = data;
const sum = d3.sum(data.flat());
const tickStep = d3.tickStep(0, sum, 100);
const tickStepMajor = d3.tickStep(0, sum, 20);
const formatValue = d3.formatPrefix(“,.0”, tickStep);

const chord = d3.chord()
.padAngle(20 / innerRadius)
.sortSubgroups(d3.descending);

const arc = d3.arc()
.innerRadius(innerRadius)
.outerRadius(outerRadius);

const ribbon = d3.ribbon()
.radius(innerRadius);

const svg = d3.create(“svg”)
.attr(“width”, width)
.attr(“height”, height)
.attr(“viewBox”, [-width / 2, -height / 2, width, height])
.attr(“style”, “max-width: 100%; height: auto; font: 10px sans-serif;”);

const chords = chord(data);

const group = svg.append(“g”)
.selectAll()
.data(chords.groups)
.join(“g”);

group.append(“path”)
.attr(“fill”, d => colors[d.index])
.attr(“d”, arc)
.append(“title”)
.text(d => ${d.value.toLocaleString("en-US")} ${names[d.index]});

const groupTick = group.append(“g”)
.selectAll()
.data(d => groupTicks(d, tickStep))
.join(“g”)
.attr(“transform”, d => rotate(${d.angle * 180 / Math.PI - 90}) translate(${outerRadius},0));

groupTick.append(“line”)
.attr(“stroke”, “currentColor”)
.attr(“x2”, 6);

groupTick
.filter(d => d.value % tickStepMajor === 0)
.append(“text”)
.attr(“x”, 8)
.attr(“dy”, “.35em”)
.attr(“transform”, d => d.angle > Math.PI ? “rotate(180) translate(-16)” : null)
.attr(“text-anchor”, d => d.angle > Math.PI ? “end” : null)
.text(d => formatValue(d.value));

svg.append(“g”)
.attr(“fill-opacity”, 0.7)
.selectAll()
.data(chords)
.join(“path”)
.attr(“d”, ribbon)
.attr(“fill”, d => colors[d.target.index])
.attr(“stroke”, “white”)
.append(“title”)
.text(d => ${d.source.value.toLocaleString("en-US")} ${names[d.source.index]} → ${names[d.target.index]}${d.source.index !== d.target.index ? \n${d.target.value.toLocaleString(“en-US”)} ${names[d.target.index]} → ${names[d.source.index]} : ``});

return svg.node();
}

groupTicks = ƒ(d, step)
function groupTicks(d, step) {
const k = (d.endAngle - d.startAngle) / d.value;
return d3.range(0, d.value, step).map(value => {
return {value: value, angle: value * k + d.startAngle};
});
}
0: Array(4) [11975, 5871, 8916, 2868]
1: Array(4) [1951, 10048, 2060, 6171]
2: Array(4) [8010, 16145, 8090, 8045]
3: Array(4) [1013, 990, 940, 6907]
names: Array(4) [“black”, “blond”, “brown”, “red”]
colors: Array(4) [“#000000”, “#ffdd89”, “#957244”, “#f26223”]
data = Object.assign([
[11975, 5871, 8916, 2868],
[ 1951, 10048, 2060, 6171],
[ 8010, 16145, 8090, 8045],
[ 1013, 990, 940, 6907]
], {
names: [“black”, “blond”, “brown”, “red”],
colors: [“#000000”, “#ffdd89”, “#957244”, “#f26223”]
})

I hope some friends can help me, thank you very much.

Hi @GISer_last

Christian Albrecht @albrecht published the following great blog on how to use the D3.js library from KNIME a while ago:

Hope this helps to start.

Best
Ael

3 Likes

There is also this example workflow on the KNIME Community Hub that generates a chord diagram using D3.js (we used to run this live during KNIME Summits :slight_smile: )

2 Likes

Thank you for your suggestion. I am now ready to use it. However, further learning is needed. Thank you.

1 Like

I have seen and studied this example before. Thank you for your suggestion. Working hard to learn.

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.