gpt4 book ai didi

javascript - 未捕获的 TypeError : xScale. rangeBand 不是 d3.js 中的函数

转载 作者:可可西里 更新时间:2023-11-01 01:50:44 26 4
gpt4 key购买 nike

尝试按照 Vegibit's tutorial 生成条形图在 my fiddle .

d3.min.js引用作品不错。

然而,当我尝试执行 downloaded local copy 时通过使用:

<script type="text/javascript" src="~/Scripts/d3/d3.min.js"></script>

路径是auto generated通过 Visual Studio 的 ASP.NET 项目工具

    d3BarChart({
element: '#bar-chart',
dataSource: [10, 20, 220, 240, 270, 300, 330, 370, 410, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120,
135, 150, 165, 180, 200],
});

function d3BarChart(chartConfig) {

var dataSource = chartConfig.dataSource;
var margin = { top: 30, right: 10, bottom: 30, left: 50 };

var height = 400 - margin.top - margin.bottom,
width = 720 - margin.left - margin.right,
barWidth = 30,
barOffset = 10;

var dynamicColor;

var yScale = d3.scaleLinear()
.domain([0, d3.max(chartConfig.dataSource)])
.range([0, height])

var xScale = d3.scaleBand()
.domain(d3.range(0, chartConfig.dataSource.length))
.range([0, width])

var colors = d3.scaleLinear()
.domain([0, chartConfig.dataSource.length])
.range(['red', 'green'])

var awesome = d3.select(chartConfig.element).append('svg')
.attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom)
.append('g')
.attr('transform', 'translate(' + margin.left + ', ' + margin.top + ')')
.selectAll('rect').data(chartConfig.dataSource)
.enter().append('rect')
.style({
'fill': function (data, i) {
return colors(i);
}, 'stroke': '#31708f', 'stroke-width': '5'
})
.attr('width', xScale.rangeBand())
.attr('x', function (data, i) {
return xScale(i);
})
.attr('height', 0)
.attr('y', height)
.on('mouseover', function (data) {
dynamicColor = this.style.fill;
d3.select(this)
.style('fill', 'brown')
})

.on('mouseout', function (data) {
d3.select(this)
.style('fill', dynamicColor)
})

awesome.transition()
.attr('height', function (data) {
return yScale(data);
})
.attr('y', function (data) {
return height - yScale(data);
})
.delay(function (data, i) {
return i * 20;
})
.duration(2000)
.ease('elastic')

var verticalGuideScale = d3.scale.linear()
.domain([0, d3.max(chartConfig.dataSource)])
.range([height, 0])

var vAxis = d3.svg.axis()
.scale(verticalGuideScale)
.orient('left')
.ticks(10)

var verticalGuide = d3.select('svg').append('g')
vAxis(verticalGuide)
verticalGuide.attr('transform', 'translate(' + margin.left + ', ' + margin.top + ')')
verticalGuide.selectAll('path')
.style({ fill: 'none', stroke: "#3c763d" })
verticalGuide.selectAll('line')
.style({ stroke: "#3c763d" })

var hAxis = d3.svg.axis()
.scale(xScale)
.orient('bottom')
.ticks(chartConfig.dataSource.size)

var horizontalGuide = d3.select('svg').append('g')
hAxis(horizontalGuide)
horizontalGuide.attr('transform', 'translate(' + margin.left + ', ' + (height + margin.top) + ')')
horizontalGuide.selectAll('path')
.style({ fill: 'none', stroke: "#3c763d" })
horizontalGuide.selectAll('line')
.style({ stroke: "#3c763d" });
}
    <div id="bar-chart"></div>

它抛出以下错误:

Uncaught TypeError: xScale.rangeBand is not a function

最佳答案

这是您的 fiddle ,已更新至 D3 版本 4.x:https://jsfiddle.net/jnxh140f/

主要变化:

要使用具有 stylesattrs 的对象(不是 styleattr),你必须引用 D3 -选择多:

<script src="https://d3js.org/d3-selection-multi.v1.min.js"></script>

对于天平:

var yScale = d3.scaleLinear()
.domain([0, d3.max(chartdata)])
.range([0, height])

var xScale = d3.scaleBand()
.domain(d3.range(0, chartdata.length))
.range([0, width])

对于宽度:

.attr('width', xScale.bandwidth())

对于坐标轴:

var vAxis = d3.axisLeft(verticalGuideScale)
.ticks(10)

var hAxis = d3.axisBottom(xScale)
.ticks(chartdata.size)

对于宽松:

.ease(d3.easeElastic)

加上其他小改动(检查代码)。

关于javascript - 未捕获的 TypeError : xScale. rangeBand 不是 d3.js 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38675348/

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