0
Ich weiß, dass die Frage schon oft gestellt wurde, aber hier weiß ich nicht, was mit meiner Konstruktion nicht stimmt. .draw() wird einmal am Anfang aufgerufen, dann wird update() aufgerufen, wenn neue Daten ankommen, irgendeine Idee, was ist falsch? Vielen Dank:D3 Kreisdiagramm nicht aktualisiert
function Donut(el, data, params) {
var self = this;
this.el = el;
this.initChart(data,params);
}
Donut.prototype.initChart = function(data, params) {
var self = this;
this.margin = {
top: 5,
right: 10,
bottom: 5,
left: 0
}
this.width = $(this.el).width() - this.margin.left - this.margin.right;
this.height = $(this.el).height() - this.margin.top - this.margin.bottom;
this.radius = Math.min(this.width,this.height)/2;
var visWidth = $(this.el).width();
var visHeight = $(this.el).height();
this.svg = d3.select(this.el)
.append('svg')
.attr("class", 'donut')
.attr("width", visWidth)
.attr("height", visHeight)
.append('g')
.attr('class','donutLayer')
.attr('transform', 'translate(' + visWidth/2 + ',' + visHeight/2 + ')');
this.arc = d3.svg.arc()
.outerRadius(this.radius-20)
.innerRadius(25);
this.draw(data, params);
}
Donut.prototype.draw = function(data,params) {
var self = this;
this.data = data;
this.pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d.taux; });
this.color = this.findColor(data.occupationRate);
this.data = this.parseData(data);
this.g = self.svg.selectAll('.arc')
.data(self.pie(self.data));
this.g.enter().append("g")
.attr("class", "arc");
this.g.append("path")
.attr("d", self.arc)
.style("fill", function(d) {
return d.data.color;
});
this.g.append('text')
.attr('transform', function() {
return "translate(2,9)";
})
.style({'font-size':'20px', 'fill': self.color})
.text(function() {
return data.occupationRate + '%';
});
this.g.append('text')
.attr('transform', function() {
return "translate(90,10)";
})
.attr('id', params.id+'Label')
.style({'font-size':'25px', 'fill': self.color})
.text(function() {
return params.name;
});
}
Donut.prototype.update = function(data, params) {
var self = this;
var parsedData = this.parseData(data);
//console.log('update sidebarmyseat');
window.data = parsedData;
window.pie = self.pie(parsedData);
this.pie.value(function(d) { return d.taux; });
this.g.data(self.pie(parsedData));
this.g.selectAll('path')
.attr("d", self.arc)
.style("fill", function(d) {
return d.data.color;
});
}
Donut.prototype.findColor = function findColor(or) {
if(or <= 50) {
var color = '#48ba56';
} else if(or > 50 && or <= 75) {
var color = '#fba22e';
} else if(or >75) {
var color = '#e70033';
}
return color;
}
Donut.prototype.parseData = function(data) {
var self = this;
var parsedData = [
{
type: 'occupée',
taux: data.occupationRate,
color: self.color
},
{
type: 'libre',
taux: 100 - data.occupationRate,
color: '#d2d2d2'
},
];
return parsedData;
}
return Donut;
});
danke omar. Irgendeine Idee, wie man etwas Text richtig anpasse, den ich an diese anschließe. –
Ich habe die Antwort aktualisiert, hoffe, es hilft – torresomar