Не удается отобразить ни одной строки в D3

#javascript #jquery #d3.js

#javascript #jquery ( jquery ) #d3.js #jquery

Вопрос:

Я пытаюсь отобразить отдельные столбцы в D3. У меня есть данные такого типа:

 data = [
  "value1": 1,
  "value2": 2,
  "value3": 3,
]
  

Поскольку шкала y не одинакова, я пытаюсь отобразить три разные гистограммы, каждая из которых имеет только полосу. Мне не нужна ось x.

Как вы можете видеть в этой скрипке: http://jsfiddle.net/GPk7s /, Панель не отображается, хотя, если вы проверите исходный код, она была добавлена. Я думаю, это потому, что я не предоставляю диапазон x, но я не знаю как, потому что на самом деле у меня его нет.

Мне просто нужна панель, высота которой связана с диапазоном, который я предоставляю (в примере со скрипкой это [10, 30]).

Я копирую здесь код на всякий случай:

 var margin = {
top: 50,
right: 0,
bottom: 100,
left: 30
},
width = 200 - margin.left - margin.right,
height = 200 - margin.top - margin.bottom;

var data = [{ "Value": 22.5 } ];

var yRange = d3.scale.linear().range([height, 0]);
yRange.domain([10, 30]);

var svg = d3.select("#chart").append("svg")
.attr("width", width   margin.left   margin.right)
.attr("height", height   margin.top   margin.bottom)
.append("g")
.attr("transform", "translate("   margin.left   ","   margin.top   ")");

svg.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("class", "bar")
.attr("y", function (d) {
return yRange(d.Value);
})
.attr("height", function (d) {
return height - yRange(d.Value);
})
.attr("y", function (d) {
return yRange(d.Value)   3;
})
.attr("dy", ".75em")
.text(function (d) {
return d.Value;
});
  

Спасибо за вашу помощь!

Ответ №1:

Есть две проблемы с тем, что вы делаете:

1) У вашего прямоугольника нет ширины. Я добавил это:

 ...
.attr("class", "bar")
.attr("width", 10)
.attr("y", function (d) {
...
  

2) Ваши данные не являются массивом. D3 ожидает, что массивы данных будут предоставлены с .data() помощью метода, и у вас есть data = {Value : 22.5} (фактически). Я изменил его на это:

 ...
var data = [{'Value' : 22.5}];
...
  

Обновленная скрипка здесь.

Комментарии:

1. Спасибо! Должно быть, в какой-то момент я удалил ширину и не понял. Я сходил с ума, спасибо 🙂