我有一个数据数组,每个元素包含一个日期和一些要显示的信息。我无法绘制条形图。
我尝试了多种解决方案,但到目前为止没有人能解决问题。
数据是具有以下内容的数组。
{ metric1: 10,
metric2: 20,
metric3: 30,
timestamp: a Date object }
现在,我想以日期为索引在x轴上相邻绘制指标。
const x = d3.scaleTime()
.rangeRound([0, width]);
const y = d3.scaleLinear()
.rangeRound([height, 0]);
const z = d3.scaleOrdinal(d3.schemeCategory10);
const xAxis = d3.axisBottom(x)
.tickFormat(d3.timeFormat('%a %H:%M'));
const yAxis = d3.axisLeft(y);
这是afaik正确的,但现在出现了棘手的部分。我需要添加域。此外,我有颜色,并从数据中提取了正确的键。
x.domain(d3.extent(data, d => d.date));
y.domain(max of metrics);
但是,对我来说,z的域并不十分清楚,仅使用'scaleBand',我就可以使用bandwidth()来确保将条形图绑定到相应的日期。
我尝试了一些指南和示例。但是它们都让我无法正确构建图形。目前,我只能看到正在绘制的轴。
我能做的是例如:
var legend = svg => {
const g = svg
.attr("transform", `translate(${width},0)`)
.attr("text-anchor", "end")
.attr("font-family", "sans-serif")
.attr("font-size", 10)
.selectAll("g")
.data(color.domain().slice().reverse())
.join("g")
.attr("transform", (d, i) => `translate(0,${i * 20})`);
g.append("rect")
.attr("x", -19)
.attr("width", 19)
.attr("height", 19)
.attr("fill", color);
g.append("text")
.attr("x", -24)
.attr("y", 9.5)
.attr("dy", "0.35em")
.text(d => d);
}
上面的方法非常适合用正确的键和颜色绘制图例。但是,这些条没有显示。
有人可以为我提供指导吗?
答案 0 :(得分:0)
基本上,分组时不能将scaleTime用于x轴。解决方案是使用类似d3.Timeformat的格式将日期解析为字符串(为了使可视化有意义,间隔必须类似)