【发布时间】:2018-09-24 02:58:18
【问题描述】:
您好,我正在开发一个带有角度 D3 的折线图,我遇到了一个代码,它可以满足我的需要。当我这样做时,我收到一条错误消息,提示“无法读取未定义的线性属性”。
您能否就此提供一些见解?
下面是我的代码。
app.directive('linearChart', function($window){
return{
restrict:'EA',
template:"<svg width='400' height='200'></svg>",
link: function(scope, elem, attrs){
var salesDataToPlot=scope[attrs.chartData];
var padding = 20;
var pathClass="path";
var xScale, yScale, xAxisGen, yAxisGen, lineFun;
var d3 = $window.d3;
var rawSvg=elem.find('svg');
var svg = d3.select(rawSvg[0]);
function setChartParameters(){
xScale = d3.scale.linear()
.domain([salesDataToPlot[0].hour, salesDataToPlot[salesDataToPlot.length-1].hour])
.range([padding + 5, rawSvg.attr("width") - padding]);
yScale = d3.scale.linear()
.domain([0, d3.max(salesDataToPlot, function (d) {
return d.sales;
})])
.range([rawSvg.attr("height") - padding, 0]);
xAxisGen = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.ticks(salesDataToPlot.length - 1);
yAxisGen = d3.svg.axis()
.scale(yScale)
.orient("left")
.ticks(5);
lineFun = d3.svg.line()
.x(function (d) {
return xScale(d.hour);
})
.y(function (d) {
return yScale(d.sales);
})
.interpolate("basis");
}
function drawLineChart() {
setChartParameters();
svg.append("svg:g")
.attr("class", "x axis")
.attr("transform", "translate(0,180)")
.call(xAxisGen);
svg.append("svg:g")
.attr("class", "y axis")
.attr("transform", "translate(20,0)")
.call(yAxisGen);
svg.append("svg:path")
.attr({
d: lineFun(salesDataToPlot),
"stroke": "blue",
"stroke-width": 2,
"fill": "none",
"class": pathClass
});
}
drawLineChart();
}
};
});
我是这样插入到 html 中的。
<div linear-chart chart-data="salesDataToPlot"></div>
这是我的数据。
$scope.salesDataToPlot = [
{
"effective_date": "2018-03-12T04:00:00.000Z",
"avg_health_score": "36.54"
},
{
"effective_date": "2018-03-19T04:00:00.000Z",
"avg_health_score": "36.57"
},
{
"effective_date": "2018-03-26T04:00:00.000Z",
"avg_health_score": "36.49"
},
{
"effective_date": "2018-04-02T04:00:00.000Z",
"avg_health_score": "37.07"
},
{
"effective_date": "2018-04-09T04:00:00.000Z",
"avg_health_score": "39.18"
}
]
我需要这样的图表。
【问题讨论】:
标签: javascript angularjs d3.js linechart