Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

204
Views
Best way to use recent D3 versions to produce PNGs from node.js?

I'm wanting to use d3 server side to create PNG files, directly or via SVG. I can find a number of discussions here about how to achieve this, but they're all from many years ago, referring to d3 v3 or v4, and node back to v10. Is it still necessary to pretend we're in a browser, providing a pseudo-DOM using something like jsdom? Does the alternative d3-node family of packages actually still work? They're mostly not had updates for some years.

Here's my MNWE on node 17.0.1, d3 7.1.1, d3-node 2.2.3 on macOS 11.6:

const fs = require('fs');
const d3 = require('d3-node')().d3;
const output = require('d3node-output');
const d3nBar = require('d3node-barchart');
// const d3nPie = require('d3node-piechart');
// const csvString = fs.readFileSync('mentions.csv').toString();
const csvString=`key,value
Bob,33
Robin,12
...
Stacy,20
Charles,13
Mary,29`
const csvData = d3.csvParse(csvString);

const selector = `#chart`
const container = `<div id="container"><h2>Bar Chart</h2><div id="chart"></div></div>`
const style = `.bar{fill: steelblue;}
.bar:hover{fill: brown;}
.axis{font: 10px sans-serif;}
.axis path,.axis line{fill: none;stroke: #000;shape-rendering: crispEdges;}
.x.axis path{display: none;}`

// create output files
// const pie = d3nPie(csvData, selector, container, style)
const bar = d3nBar(csvData, selector, container, style)
output('output', bar);

I get the following errors in the penultimate line arising in the d3node-barchart library:

/Users/j/Dropbox/NP-other-tests/node_modules/d3node-barchart/index.js:55
  x.domain(data.map((d) => d.key));
                ^

TypeError: Cannot read properties of undefined (reading 'map')
    at bar (/Users/j/Dropbox/NP-other-tests/node_modules/d3node-barchart/index.js:55:17)
    at Object.<anonymous> (/Users/j/Dropbox/NP-other-tests/d3test.cjs:45:13)
    at Module._compile (node:internal/modules/cjs/loader:1095:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Investigation

The error message tells that d3n-barchart does not find data where it expects it to be.

Looking at the file throwing the error: node_modules/d3node-barchart/index.js, it appears that function bar expects one object as parameter, and not a data array as first parameter.

function bar({
  data,
  selector: _selector = '#chart',
  ...

It seems that the syntax shown in the README of d3n-bar is incorrect.

As shown in the example file of the library, function d3nBar takes one object as input parameter, with a data property.

Solution

Applying the syntax from d3n-barchart's example file solves the error:

const bar = d3nBar({
    data: csvData
    , selector: selector
    , container: container
    , style: style
})

You might want to correct d3n-barchart's README file and submit a pull request, to help future users get their code right :)

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!