Lars Kothof hat eine gute Erklärung here wie SVG-Elemente zu erstellen, die der Größe des Textes entsprechen. Ich versuche jedoch, dies dynamisch mit Daten aus JSON oder CSV zu tun.Mit d3 zu rect, die Textgröße entspricht
svg.selectAll('rect')
.data(states.features)
.enter()
.append('rect')
.attrs({
x: function(d) { return path.centroid(d)[0] - 50; },
y: function(d) { return path.centroid(d)[1] - 13; },
'text-anchor': 'middle',
'width': 100,
'height': 18,
'fill': 'rgba(232, 232, 232, 0.8)',
'opacity': 1,
'rx': 7,
'ry': 7
});
svg.selectAll('text')
.data(states.features)
.enter()
.append('text')
.text(function(d) { return d.properties.name; })
.attrs({
x: function(d) { return path.centroid(d)[0]; },
y: function(d) { return path.centroid(d)[1]; },
'text-anchor': 'middle',
'font-size': '7pt',
'fill': 'rgb(25,25,25)',
'opacity': 1
});
Das Konzept Ich bin nicht begreifen ist, wie ich eine Funktion, ähnlich wie Lars schreiben kann, die sowohl die <rect>
und die <text>
und verwendet die Dimensionen des Textes, die Abmessungen des Rechtecks zu bestimmen, erzeugt.
Warum sich damit beschäftigen? Warum nicht so? https://StackOverflow.com/a/31013492/1038015 keine Messung erforderlich. –
Es ist eine gute Idee, aber das 'filter' Attribut scheint Probleme mit Anti-Aliasing zu verursachen. –
Ich denke, es gibt eine andere Antwort, die Sie auf die gleiche Frage versuchen können, wenn Sie Antialiasing-Probleme bekommen. –