2013-04-23 5 views
13

В моей оси x в настоящее время имеются пронумерованные тики. Я хочу, чтобы тики были заменены данными моего объекта (в частности, значение ключевое слово). Как бы я это сделал?d3.js Укажите текст по оси x

I have a working Fiddle

var dataset = [ 
      {"keyword": "payday loans", "global": 1400000, "local": 673000, "cpc": "14.11"}, 
      {"keyword": "title loans", "global": 165000, "local": 160000, "cpc": "12.53" }, 
      {"keyword": "personal loans", "global": 550000, "local": 301000, "cpc": "6.14"}, 
      {"keyword": "online personal loans", "global": 15400, "local": 12900, "cpc": "5.84"}, 
      {"keyword": "online title loans", "global": 111600, "local": 11500, "cpc": "11.74"} 
     ]; 

var xAxis = d3.svg.axis() 
    .scale(xScale) 
    .orient("bottom"); 
// xAxis 
svg.append("g") // Add the X Axis 
    .attr("class", "x axis") 
    .attr("transform", "translate(0," + (h) + ")") 
    .call(xAxis); 
//xAxis Label 
svg.append("text") 
    .attr("transform", "translate(" + (w/2) + " ," + (h + margin.bottom - 5) +")") 
    .style("text-anchor", "middle") 
    .text("Keyword"); 

ответ

36

Самый простой способ добиться этого, чтобы установить функцию tickFormat для оси:

var xAxis = d3.svg.axis() 
    .scale(xScale) 
    .tickFormat(function(d) { return dataset[d].keyword; }) 
    .orient("bottom"); 

Вы, возможно, придется настроить ширина немного, чтобы соответствовать этикетки (или rotate them).

«Правильный» способ сделать это - указать значения домена для вас xScale как ключевые слова вместо индексов массива. Тогда вам придется изменить весь другой код, который также использует xScale.

+0

Очень хорошие. Я попробовал нечто подобное. Но он сломал ось все вместе. Но он работает сейчас! Спасибо. Затем я добавил несколько стилей, чтобы повернуть текст, чтобы он не перекрывался. – EnigmaRM

Смежные вопросы