javascript - D3.js Brush and Zoom line chart Error: attribute d: Expected number
问题描述
I'm working on a line chart with zoom and brush base on https://bl.ocks.org/EfratVil/92f894ac0ba265192411e73f633a3e2f
I'm having an errors 1
This is my code base:
var margin = { top: 20, right: 20, bottom: 110, left: 40 },
margin2 = { top: 430, right: 20, bottom: 30, left: 40 },
width = 950 - margin.left - margin.right,
height = 600 - margin.top - margin.bottom,
height2 = 600 - margin2.top - margin2.bottom;
var svg = d3
.select(this.shadowRoot.querySelector("#my_dataviz"))
.append("svg")
.attr("id", "svgTrending")
.attr("width", width)
.attr("height", height);
dataChart.forEach(function (d) {
d = type(d);
});
var parseDate = d3.timeParse("%m/%d/%Y %H:%M");
var x = d3.scaleTime().range([0, width]),
x2 = d3.scaleTime().range([0, width]),
y = d3.scaleLinear().range([height, 0]),
y2 = d3.scaleLinear().range([height2, 0]);
var xAxis = d3.axisBottom(x),
xAxis2 = d3.axisBottom(x2),
yAxis = d3.axisLeft(y);
var brush = d3
.brushX()
.extent([
[0, 0],
[width, height2],
])
.on("brush end", brushed);
var zoom = d3
.zoom()
.scaleExtent([1, Infinity])
.translateExtent([
[0, 0],
[width, height],
])
.extent([
[0, 0],
[width, height],
])
.on("zoom", zoomed);
var clip = svg
.append("defs")
.append("svg:clipPath")
.attr("id", "clip")
.append("svg:rect")
.attr("width", width)
.attr("height", height)
.attr("x", 0)
.attr("y", 0);
var Line_chart = svg
.append("g")
.attr("class", "focus")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.attr("clip-path", "url(#clip)");
var focus = svg
.append("g")
.attr("class", "focus")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var context = svg
.append("g")
.attr("class", "context")
.attr("transform", "translate(" + margin2.left + "," + margin2.top + ")");
x.domain(
d3.extent(dataChart, function (d) {
return d.date;
})
);
y.domain([
0,
d3.max(dataChart, function (d) {
if (
that.normalizedChartData.max_value_on_hand >
that.normalizedChartData.max_value_doi
) {return d.lineValue[0].value;}
else return d.lineValue[1].value;
}),
]);
x2.domain(x.domain());
y2.domain(y.domain());
focus
.append("g")
.attr("class", "axis axis--x")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
focus.append("g").attr("class", "axis axis--y").call(yAxis);
const arrLine = dataChart[0].lineValue;
for (let i = 0; i < arrLine.length; i++) {
Line_chart.append("path")
.datum(dataChart)
.attr("class", "line")
.attr("d", d3
.line()
.x(function (d) {
return x(d.date);
})
.y(function (d) {
return y(d.lineValue[i].value);
})
);
context
.append("path")
.datum(dataChart)
.attr("class", "line")
.attr("d", d3
.line()
.x(function (d) {
return x2(d.date);
})
.y(function (d) {
return y2(d.lineValue[i].value);
})
);
context
.append("g")
.attr("class", "axis axis--x")
.attr("transform", "translate(0," + height2 + ")")
.call(xAxis2);
context
.append("g")
.attr("class", "brush")
.call(brush)
.call(brush.move, x.range());
svg
.append("rect")
.attr("class", "zoom")
.attr("width", width)
.attr("height", height)
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.call(zoom);
}
function brushed() {
if (d3.event.sourceEvent && d3.event.sourceEvent.type === "zoom") return; // ignore brush-by-zoom
var s = d3.event.selection || x2.range();
x.domain(s.map(x2.invert, x2));
Line_chart.select(".line").attr("d", line);
focus.select(".axis--x").call(xAxis);
svg
.select(".zoom")
.call(
zoom.transform,
d3.zoomIdentity.scale(width / (s[1] - s[0])).translate(-s[0], 0)
);
}
function zoomed() {
if (d3.event.sourceEvent && d3.event.sourceEvent.type === "brush") return; // ignore zoom-by-brush
var t = d3.event.transform;
x.domain(t.rescaleX(x2).domain());
Line_chart.select(".line").attr("d", line);
focus.select(".axis--x").call(xAxis);
context.select(".brush").call(brush.move, x.range().map(t.invertX, t));
}
function type(d) {
var parse = d3.timeFormat("%m/%d/%Y %H:%M");
d.date = parse(new Date(d.date));
return d;
}
An this is my response data:
{
data: [
{date: 1626739200000, lineValue: [{name: "On Hand", value: 155750}, {name: "14 DOI", value: 52173.35}
{date: 1626739200000, lineValue: [{name: "On Hand", value: 155750}, {name: "14 DOI", value: 52173.35}]
]
end_date: 1629072000000
max_value_doi: 54180.02
max_value_on_hand: 180384
start_date: 1626739200000
years: "2021-2021"
}
I have format the date and value inside the response through type function but I still get the errors. What am I doing wrong here ?
解决方案
推荐阅读
- mysql - 我想在 1 个表中选择数据
- kotlin - 我正在将数据添加到我的列表中,但它没有出现在 RecyclerView(Kotlin,MVVM)中
- opayo - 奥帕约回归 5080
- python - Python get-pip 安装失败
- azure - 如何将根域 A 记录路由到具有流量管理器端点的流量管理器
- python - Google Colab 在文本框中插入保存的图
- php - 从 git repo 复制的新 Laravel 安装时出现 500 错误
- kubernetes - 如何为redis部署设置环境变量?
- arrays - 使用键等值将数组转换为对象
- asp.net - 带有 HTTPS 的 Docker Swarm ASP.NET API