javascript - 如何使用 D3.js 使用 scaleTime 构建分组条形图?
问题描述
我正在尝试使用 D3 制作分组条形图,我只是使用 scaleBand 制作它,但现在我需要使用 scaleTime。那是我使用 scaleBand 的代码:
const x0 = scaleBand().range([0, innerWidth]).paddingInner(0.5);
const x1 = scaleBand().padding(0);
const y = scaleLinear().range([innerHeight, 0]);
x0.domain(allGroups);
x1.domain(subgroups).range([0, x0.bandwidth()]);
y.domain([0, maxValue]).nice();
graph
.append("g")
.selectAll("g")
.data(data)
.enter()
.append("g")
.attr("class", "bar")
.attr("transform", (d) => `translate(${x0(d.key)},0)`)
.selectAll("rect")
.data((d) =>
d.data.map((e) => {
return { key: d.key, name: e.name, value: e.value };
})
)
.enter()
.append("rect")
.attr("x", (d) => x1(d.name))
.attr("y", (d) => y(d.value))
.attr("width", x1.bandwidth())
.attr("height", (d) => innerHeight - y(d.value))
.attr("fill", (d) => color(d.name))
graph
.append("g")
.attr("transform", `translate(0,${innerHeight})`)
.call(axisBottom(x0));
graph.append("g").call(axisLeft(y));
我试图仅将“x0”更改为 scaleTime 但它与条重叠并且没有正确定位它们
解决方案
试试这个例子:
let x = d3
.scaleTime()
.domain([(date.setFullYear(d3.min(years).getFullYear() - 1)), (date.setFullYear(d3.max(years).getFullYear()))])
.range([0, (width - margin.left - margin.right)])
let x1 = d3.scaleBand()
.domain(keys)
.rangeRound([0, 147])
.padding(0.05)
推荐阅读
- python - MatPlotLib 如何使绘图放大和缩小
- java - removeFirstOccurence() Java
- oracle - 将点捕捉到线并获取线 ID
- c - 这是未定义的行为吗
- bixby - Bixby 中新用户/权利检查的架构建议
- php - 如何在不打印的情况下获取 Wordpress 小部件(侧边栏)?
- python-3.x - 空值到空值 JSON 在嵌入中发送
- node.js - (Node.js) SSL Express 服务器的问题
- nlp - 如何使用缪斯获得对齐嵌入
- cocoapods - /bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory - CocoaPods 安装期间出错