Javascript D3-AngularJS折线图
嗨,我正在开发一个带有角度D3的折线图,我遇到了一个代码,它可以满足我的需要。当我这样做时,我得到一个错误,说“无法读取未定义的线性属性” 你能给我一些关于这方面的见解吗 下面是我的代码Javascript D3-AngularJS折线图,javascript,angularjs,d3.js,linechart,Javascript,Angularjs,D3.js,Linechart,嗨,我正在开发一个带有角度D3的折线图,我遇到了一个代码,它可以满足我的需要。当我这样做时,我得到一个错误,说“无法读取未定义的线性属性” 你能给我一些关于这方面的见解吗 下面是我的代码 app.directive('linearChart', function($window){ return{ restrict:'EA', template:"<svg width='400' height='200'></svg>",
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();
}
};
});
我需要一张这样的图表
检查您使用的d3版本,以及您使用此代码时使用的3d版本。确保他们匹配。您还可以找到这些版本之间的更改,并相应地更新代码。d3 v3和d3 v4之间的一个主要突破性更改是它们更改了缩放函数的名称。根据您的用例和使用d3的经验,您的最佳解决方案可能是在项目中使用v3而不是v4。您可以使用v3,尝试在v4中查找示例,或者尝试编辑它以使其在v4中工作。如果你只是想要一个简单的折线图,d3不是最好的选择。你应该在d3上尝试一个lib。有很多好的lib可以用更简单的方式实现这一点。
<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"
}
]