function hist(data_, name_ = null, dim_ = null, draw_ = {}, scale_ = null) {
let _histName = name_;
let _reltsInCir = data_.filter(d => d.inCir);
let _data = d3.histogram().value(d => d.theID)(data_);
let _dataInCir = d3.histogram().value(d => d.theID)(_reltsInCir);
let _scale = scale_ ? scale_ : scale(_data, dim_);
let _axis = axis(_scale, dim_);
let _baseOpacity = 0.6;
const [svg, g] = initChart(dim_, _histName, draw_.border);
g.append("g")
.classed(`g-main-bar-${_histName} g-main-${_histName}`, true)
.selectAll("rect")
.data(_data)
.join("rect")
.attr("id", (_, i) => `g-main-bar-${_histName}-${i}`)
.attr("class", (_, i) => `g-main-${_histName}-${i} transparent`)
.attr("x", (d, i) => _scale.x(i))
.attr("y", d => _scale.y(d.length))
.attr("height", d => _scale.yHeight(d))
.attr("width", _scale.x.bandwidth())
.on("mouseover", mb_on_mover)
.on("click", mb_on_click)
.on("mouseout", mb_on_mout);
g.append("g")
.classed(`g-main-label-${_histName} g-main-${_histName}`, true)
.selectAll("text")
.data(_data)
.join("text")
.attr("id", (_, i) => `g-main-label-${_histName}-${i}`)
.attr("class", (_, i) => `g-main-${_histName}-${i} transparent`)
.attr("x", (d, i) => _scale.xLabelMainPos(d, i))
.attr("y", (d, i) => setYlabel(d, i, _scale).get("pos"))
.text(d => d.length)
.on("mouseover", mb_on_mover)
.on("mouseout", mb_on_mout);
/* bar for in Circuit */
g.append("g")
.classed(`g-inCir-bar-${_histName} g-inCir-${_histName}`, true)
.selectAll("rect")
.data(_dataInCir)
.join("rect")
.attr("id", (d, i) => `g-inCir-bar-${_histName}-${i}`)
.attr("class", (_, i) => `g-inCir-${_histName}-${i} transparent`)
.attr("x", (d, i) => _scale.xInCirPos(d, i))
.attr("y", d => _scale.y(d.length))
.attr("height", d => _scale.yHeight(d))
.attr("width", _scale.x.bandwidth() / 2)
.on("mouseover", mb_on_mover)
.on("click", mb_on_click)
.on("mouseout", mb_on_mout);
g.append("g")
.attr("class", `g-inCir-label-${_histName} g-inCir-${_histName}`)
.selectAll("text")
.data(_dataInCir)
.join("text")
.attr("id", (d, i) => `g-inCir-label-${_histName}-${i}`)
.attr("class", (_, i) => `g-inCir-${_histName}-${i} transparent`)
.attr("x", (d, i) => _scale.xInCirPos(d, i))
.attr("y", (d, i) => setYlabel(d, i, _scale).get("pos"))
.text(d => d.length)
.on("mouseover", mb_on_mover)
.on("mouseout", mb_on_mout);
draw_.xAxis ? g.append("g").call(_axis.x) : null;
draw_.yAxis ? g.append("g").call(_axis.y) : null;
return svg;
}