如何在Nodejs中使用Observable Plot ?



我读到使用jsdomObservable Plot(从D3js派生的模块)工作在Nodejs.

然而,关于这一点的例子很少,我不能适当地改编我找到的那些。

下面是我试图修改的代码:

import * as Plot from "@observablehq/plot";
import jsdom from "jsdom";
const { JSDOM } = jsdom;
const sales = [
{units: 10, fruit: "fig"},
{units: 20, fruit: "date"},
{units: 40, fruit: "plum"},
{units: 30, fruit: "plum"}
];
Plot.dot(sales, {x: "units", y: "fruit"}).plot();

我尝试了不同的东西,比如添加:

import {select} from "d3-selection";
Plot.select(JSDOM.window.document.body).dot(sales, {x: "units", y: "fruit"}).plot();

试图复制d3在这里所做的。

我也看到了这个可能包含答案,但这是不理解像我这样的javascript初学者。

我应该如何调整我的代码?

对于任何寻找这个的人,我有一个小库来处理这个浏览器执行,并使用剧作家在弹出窗口中打开结果图表:https://github.com/mhkeller/plot

我终于能够像这样获得我想要的:

import http from 'http';
import * as Plot from "@observablehq/plot";
import {JSDOM} from "jsdom";
const jsdom = new JSDOM(`
<!DOCTYPE html>
<head><meta charset="UTF-8"></head>
<body><div class='container'><figure id='graphic'>
</figure></div></body>`);
const sales = [
{units: 10, fruit: "fig"},
{units: 20, fruit: "date"},
{units: 40, fruit: "plum"},
{units: 30, fruit: "plum"}
];
jsdom.window.document.getElementById('graphic')
.appendChild(Plot.dot(sales, {x: "units", y: "fruit"})
.plot({document: jsdom.window.document})
);
http.createServer(function (req, res) {
let html = jsdom.serialize();
res.end(html);
}).listen(8080);

jsdom对象需要创建较少的随机和我使用Plot的方式。Dot with jsdom是不正确的。我还必须使用http模块在浏览器中渲染图形,并在localhost:8080/访问它。

最新更新