gpt4 book ai didi

javascript - 一周中每一天的 D3 x 轴

转载 作者:行者123 更新时间:2023-11-29 10:34:36 25 4
gpt4 key购买 nike

我有一个如下所示的 JSON 数组:

[
{
"day": "Monday",
"sales": 242
},
{
"day": "Tuesday",
"sales": 256
},
...
]

此数据涵盖一周,因此从周一到周日的每一天都有一个对象。

我用 D3 构建了一个条形图,一周中的每一天都有一个条形图。我现在正尝试为每一天添加一个带有刻度标签的 x 轴。

enter image description here

我已完成以下操作来设置我的 y 轴:

var yScale = d3.scaleLinear()
.domain([0, d3.max(data, function(d) {
return d.sales;
})])
.range([height, 0]);

var yAxis = d3.axisLeft(yScale)
.ticks(5);

svg.append("g")
.call(yAxis);

这很好用,但出于某种原因,我对如何在一周中的每一天都在相应栏下设置我的 x 轴感到困惑。注意:我使用的是 D3 版本 4。

最佳答案

一旦您的days 只是字符串,您就可以使用scaleBand 而不是scaleTime:

var xScale = d3.scaleBand()
.domain(data.map(function(d){ return d.day}))
.range([0, width])//you can use rangeRound instead
.paddingInner(someValue);//the value of the inner padding, if any.

然后,相应地设置 x 轴:

var xAxis = d3.axisBottom(xScale);

检查这个片段:

var width = 550, height = 200;

var data = [{day:"Monday"},
{day:"Tuesday"},
{day:"Wednesday"},
{day:"Thursday"},
{day:"Friday"},
{day:"Saturday"},
{day:"Sunday"}
];

var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);

var xScale = d3.scaleBand()
.domain(data.map(function(d){ return d.day}))
.range([0, width*0.95])

var xAxis = d3.axisBottom(xScale)
.ticks(7);

svg.append("g")
.attr("transform", "translate(0,100)")
.call(xAxis);
text { font-size: 12px;}
<script src="https://d3js.org/d3.v4.min.js"></script>

关于javascript - 一周中每一天的 D3 x 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38820341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com