Published
Edited
Sep 28, 2020
Importers
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
vScale=[vMin,vMax] //
Insert cell
import {chart as histogram} from "@d3/histogram"
Insert cell
import {viewof gl, render} with {view as view, vScale as vScale, glWidth as width} from "dcb83891d6e2ddad"
Insert cell
view=Object({xMin:-1.2,xMax:1.2,yMin:-1.3,yMax:1.1})
Insert cell
function addBar(id, domain, bar) {
let box = d3.select(document.getElementById(id));
let canvas = box.select("canvas");
let canvasWidth = parseInt(canvas.style("width"),10);
let canvasHeight = parseInt(canvas.style("height"),10);
let x=d3.scaleLinear()
.domain([domain.xMin, domain.xMax])
.range([0,canvasWidth]);
let y=d3.scaleLinear()
.domain([domain.yMin, domain.yMax])
.range([canvasHeight,0]);
let svg = box.select(".svg-overlay");
if (svg.empty()) {
svg = box.append("svg")
.attr("class","svg-overlay")
.style("position","absolute")
.style("z-index",2)
.style("top","0px")
.style("left","0px")
.attr("width", canvasWidth)
.attr("height",canvasHeight);
}
let barCoords = [[x(bar[0][0]),y(bar[0][1])],[x(bar[1][0]),y(bar[1][1])]];
let barPath = svg.select(".bar");
if (barPath.empty()) {
svg.append("path")
.attr("class","bar")
.attr("fill", "none")
.attr("stroke", "Gray")
.attr("stroke-width", 4)
.style("opacity",0.5)
//.style("cursor","move")
.attr("d",d3.line()(barCoords));
} else {
barPath.attr("d",d3.line()(barCoords))
}
}
Insert cell
function addColorBar(id, vScale, label){
let box = d3.select("#"+id);
let canvas = box.select("canvas");
let canvasWidth = parseInt(canvas.style("width"),10);
let canvasHeight = parseInt(canvas.style("height"),10);
let svg = box.select(".svg-overlay");
if (svg.empty()) {
svg = box.append("svg")
.attr("class","svg-overlay")
.style("position","absolute")
.style("z-index",2)
.style("top","0px")
.style("left","0px")
.attr("width", canvasWidth)
.attr("height",canvasHeight);
}
svg.select(".color-bar").remove();
svg.append("g")
.attr("class","color-bar")
.attr("transform", `translate(${canvasWidth/2-100},${canvasHeight-50})`)
.append(() => legend({color: d3.scaleSequential(vScale, d3.interpolateSpectral), title: label, width: 200 }));
}
Insert cell
glWidth=width/2
Insert cell
drawGL=render
Insert cell
d3.select(grid).select("#box1")
Insert cell
grid
Insert cell
draw={
addNode("box1",viewof gl);
addNode("box2",histogram);
}
Insert cell
drawBars={
addBar("box1",view,[[-0.5,yBar],[0.5,yBar]]);
addColorBar("box1",vScale,"Yp");
}
Insert cell
//addBar("box1",view,[[-0.5,yBar],[0.5,yBar]])
Insert cell
//addColorBar("box1",vScale,"Yp")
Insert cell
function addNode(id,node) {
let el = document.getElementById(id);
let children=el.childNodes;
if (children.length > 0) {el.removeChild(children[0]);}
el.appendChild(node);
}
Insert cell
layout = [ {id:"box1", title:"WebGL Contours", cols:6},{id:"box2", title:"Histogram", cols:6}]
Insert cell
style=html`<code>css</code> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.0/css/bootstrap.min.css" integrity="sha384-PDle/QlgIONtM1aqA2Qemk5gPOE7wFq8+Em+G/hmo5Iq0CCmYZLv3fVRDJ4MMwEA" crossorigin="anonymous">`
Insert cell
import {slider} from "@jashkenas/inputs"
Insert cell
import {legend} from "@d3/color-legend"
Insert cell
d3=require("d3")
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more