2013-12-07 57 views
2

我有一些數量的金額(以美元計算),我在y軸和x軸上顯示年份。現在,我想在y軸上顯示原始數字,但無法做到。如何使用d3 .ticks在條形圖中顯示原始y軸值

我的意思是在y軸上,我想顯示數量從1到100000作爲數量,但現在使用.ticks(10)我只能使用0到8000之間的數量在y軸。

還有一件事,如果我想在x軸顯示名稱作爲字符串,那麼我如何顯示請讓我知道。我卡在這裏,並與d3新近。

function test() { 

var graph_data; 

// in graph_data it should contain value like this 
// [Object { letter="2011", frequency="10000"}, 
// Object { letter="2012", frequency="8200"}] 

var margin = {top: 20, right: 20, bottom: 30, left: 40}, 
    width = 960 - margin.left - margin.right, 
    height = 500 - margin.top - margin.bottom; 

var x = d3.scale.ordinal() 
    .rangeRoundBands([0, 110], .3); 

var y = d3.scale.linear() 
    .range([height, 0]); 

var xAxis = d3.svg.axis() 
    .scale(x) 
    .tickPadding(10) 
    .orient("bottom"); 

var yAxis = d3.svg.axis() 
    .scale(y) 
    .tickPadding(3) 
    .orient("left") 
    .ticks(10); 

var svg = d3.select("#award_by_year_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 + ")"); 

    x.domain(graph_data.map(function(d) { return d.letter; })); 
    y.domain([0, d3.max(graph_data, function(d) { return d.frequency; })]); 

    svg.append("g") 
    .attr("class", "x axis") 
    .attr("transform", "translate(0," + height + ")") 
    .call(xAxis); 

    svg.append("g") 
    .attr("class", "y axis") 
    .call(yAxis) 
    .append("text") 
    .attr("transform", "rotate(-90)") 
    .attr("y", 6) 
    .attr("dy", ".71em") 
    .style("text-anchor", "end") 
    .text("Total dollar"); 

    svg.selectAll(".bar") 
    .data(graph_data) 
    .enter().append("rect") 
    .attr("class", "bar") 
    .attr("x", function(d) { return x(d.letter); }) 
    .attr("width", x.rangeBand()) 
    .attr("y", function(d) { return y(d.frequency); }) 
    .attr("height", function(d) { return height - y(d.frequency); }); 

    function type(d) { 
    d.frequency = +d.frequency; 
    return d; 
    } 
} 

現在,該代碼正在如下圖圖像工作。我想根據總美元價值來改變y軸的價值,它來自表格,它也可以是+ ve和上限不固定的。那麼如何解決。

enter image description here

請給我有價值的解決方案。

感謝

+0

我不清楚你想要做什麼。從你的代碼看,你目前在y軸上顯示數字,在x軸上顯示字符串。您的問題是如何使用美元符號格式化數字以及如何將字符串解析爲日期? –

+0

嗨Lars Kotthoff ... 實際上根據我在x軸上的代碼amout值顯示 – manijain

+0

我已修改我的問題並添加圖像以獲得更多說明。請檢查。 – manijain

回答

2

好,從我在這裏你的問題理解是我得到的:

我的意思是在y軸上我想表明從1〜100000的量,但 號現在,隨着.ticks(10)我只能使用0到8000之間的數量在y 軸。

爲此,我會檢查出https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues,其中記錄功能tickValues。有了這個,你可以精確地指定你想要在y軸上顯示的內容。假設你只想顯示0和100000,那麼你只需傳遞數組[0,10000]。

還有一件事,如果我想顯示名稱作爲字符串在x軸 那麼我怎麼能顯示請讓我知道。我卡在這裏,並與 d3新。

svg.append("g") 
    .attr("class", "x axis") 
    .attr("transform", "translate(0," + height + ")") 
    .call(xAxis); 
    .selectAll('text') 
    .text(function(d) { 
     return 'Some string: ' + d.letter 
    }) 

這將讓你自定義任何在x軸上的刻度值。如果我不明白問題的第一部分,則還可以在y軸上使用此技巧來自定義tick值的輸出。

+0

thnx這是有幫助的,但如果y軸的價值(總美元)是負數,那麼你喜歡哪種類型的條形圖..我的意思是如何定製或在那裏有任何其他的例子。 – manijain

+0

您總是可以反轉條形圖,使條形看起來像是向下(將x軸放在頂部並反轉y域)。這種方式負面的價值更有意義。我不確定這是不是你的意思。 –

+0

確定讓我檢查.. thnx。 – manijain