【发布时间】:2018-10-26 12:50:54
【问题描述】:
以我是 D3 新手的事实作为开头,这可能是我遗漏的一个简单错误 - 我知道它必须如此。与我尝试访问数据的方式有关。
试图找出这个家伙一段时间。 (可能是我看太久了)
我一直在玩它直到我的行终于出现了,但现在它没有显示完整的行,只有两个点 - 这是我不确定的数字。
提前致谢!
编辑:目标是使用 lineData[0] 沿 lineData1(月)的 x 轴绘制一条线。最终,lineData2 将用于第二行,但目前只是试图让第一行工作。
编辑:可在此处找到更新的代码(根据 Shashank 的建议): https://codepen.io/anon/pen/RevxYG?editors=0010
这是我的代码:
let lineData = [
[4, 2, 0, 3, 3, 4, 52, 3, 0, 3, 3, 1],
[0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],
["Oct", "Nov", "Dec", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"]
]
console.log("lineData", lineData)
// set dimensions of the line chart
let width = 393,
height = 285;
// set the scales
let yScale = d3.scaleLinear()
.domain([0, 52])
.range([height - 40 , 0]);
let xScale = d3.scaleOrdinal()
.range([0, width - 40]);
// create the line
let line = d3.line()
.x(function(d, i) { return xScale(i); })
.y(function(d) { return yScale(d[0]); });
// create svg container
let lineChart = d3.select(element)
.append("svg")
.attr("viewbox", "0 60 960 600")
.attr("preserveAspectRatio", "xMinYMin meet")
.attr("width", width)
.attr("height", height)
.attr("class", "line-chart")
lineChart.append("path")
.datum(lineData)
.attr("d", line)
.attr("fill", "none")
.attr("stroke", "rebeccapurple")
.attr("stroke-width", 2)
lineChart.selectAll("dot")
.data(lineData)
.attr("d", line)
.enter()
.append("circle")
.attr("r", 3.5)
.attr("cx", function(d, i) { return xScale(i)})
.attr("cy", function(d) { return yScale(d[0])})
.attr("fill", "rebeccapurple")
lineChart.append("g")
.attr("transform", "translate(20, 245)")
.call(d3.axisBottom(xScale))
lineChart.append("g")
.attr("transform", "translate(20, 0)")
.call(d3.axisLeft(yScale))
数据是通过函数传入的。
【问题讨论】:
-
你能澄清一下到底是什么问题吗?您的数据集中有日期,您需要应用 timeScale 来获取实际的 X、Y 坐标
-
你能包含你的数据而不是 img 吗?
-
@MikeTung 我认为序数音阶会起作用,不是吗?
-
@mahan 是的,一秒。编辑它
-
需要澄清一下: 1. 您是否尝试使用
lineData[0](12 个数字的数组)绘制 1 条线并使用lineData[1](12 个数字的数组)绘制 12 个圆圈? 2. 或者您是否尝试根据lineData[0]和lineData[1]绘制两条线并相应地圈出? (在上述两种情况下,将lineData[2]中的月份视为 xAxis)。那是因为您将lineData绑定到圈子,同时为圈子调用.attr('d', line),这是令人困惑的。
标签: javascript d3.js linechart