Читая этот Q & A и дюжину подобных, я все еще не мог заставить gRaphaël показывать правильные метки для гистограммы. Казалось, что все рецепты относятся к старым версиям библиотеки или к страницам github, которых больше нет. gRaphaël выдает великолепные результаты, но его документы оставляют желать лучшего.
Однако я смог использовать комбинацию Firebug и Inspect This Element, чтобы следовать коду и посмотреть, что он произвел. Погружаясь в объект barchart, нужная геометрия прямо здесь. Чтобы избавить других от разочарований, вот как я решил проблему:
<script>
function labelBarChart(r, bc, labels, attrs) {
// Label a bar chart bc that is part of a Raphael object r
// Labels is an array of strings. Attrs is a dictionary
// that provides attributes such as fill (text color)
// and font (text font, font-size, font-weight, etc) for the
// label text.
for (var i = 0; i<bc.bars.length; i++) {
var bar = bc.bars[i];
var gutter_y = bar.w * 0.4;
var label_x = bar.x
var label_y = bar.y + bar.h + gutter_y;
var label_text = labels[i];
var label_attr = { fill: "#2f69bf", font: "16px sans-serif" };
r.text(label_x, label_y, label_text).attr(label_attr);
}
}
// what follows is just setting up a bar chart and calling for labels
// to be applied
window.onload = function () {
var r = Raphael("holder"),
data3 = [25, 20, 13, 32, 15, 5, 6, 10],
txtattr = { font: "24px 'Allerta Stencil', sans-serif", fill: "rgb(105, 136, 39)"};
r.text(250, 10, "A Gratuitous Chart").attr(txtattr);
var bc = r.barchart(10, 10, 500, 400, data3, {
stacked: false,
type: "soft"});
bc.attr({fill: "#2f69bf"});
var x = 1;
labelBarChart(r, bc,
['abc','b','card','d','elph','fun','gurr','ha'],
{ fill: "#2f69bf", font: "16px sans-serif" }
);
};
</script>
<div id="holder"></div>
Есть несколько небольших очисток, которые вы могли бы сделать для labelBarChart()
, но это в основном делает работу.