Javascript 如何使用d3.ticks在条形图中显示原始y轴值

Javascript 如何使用d3.ticks在条形图中显示原始y轴值,javascript,svg,d3.js,Javascript,Svg,D3.js,我有一些金额(美元),我在y轴上显示,在x轴上显示年份。现在,我想在y轴上显示原始数字,但无法显示 我的意思是,在y轴上,我想显示从1到100000的数字作为金额,但现在,使用.ticks(10),我只能在y轴上使用0到8000之间的金额 还有一件事,若我想在x轴上显示字符串,那个么如何显示,请告诉我。我被困在这里,刚加入d3 function test() { var graph_data; // in graph_data it should contain value like thi

我有一些金额(美元),我在y轴上显示,在x轴上显示年份。现在,我想在y轴上显示原始数字,但无法显示

我的意思是,在y轴上,我想显示从1到100000的数字作为金额,但现在,使用.ticks(10),我只能在y轴上使用0到8000之间的金额

还有一件事,若我想在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+ve,上限不固定。那怎么解决呢

请给我一个有价值的解决方案


谢谢

好的,根据我对你的问题的理解,我得到的是:

我的意思是在y轴上,我想显示从1到100000的数字作为数量,但是 现在,对于.ticks(10),我在y只能使用0到8000个数量 轴心国

为此,我要检查一下,它记录了函数
tickValues
。使用此选项,您可以精确指定要在y轴上显示的内容。假设您只想显示0和100000,那么只需传递数组[0,10000]

还有一件事,如果我想在x轴上显示字符串 那我怎么才能展示呢?请告诉我。我被困在这里和新来的 d3


这将允许您自定义x轴上的任何刻度值。如果我不理解问题的第一部分,您也可以在y轴上使用此技巧自定义刻度值的输出。

我不清楚您想做什么。从您的代码中,看起来您当前在y轴上显示数字,在x轴上显示字符串。您的问题是如何用美元符号格式化数字,以及如何将字符串解析为日期吗?嗨,Lars Kotthoff。。。实际上,根据我在x轴上的上述代码,显示的是一个输出值,我已经修改了我的问题,并添加了图像,以便进一步澄清。请检查。对不起,我还是不明白——这张照片显示了你目前拥有的东西还是你正在尝试做的事情?而且,看起来你的总价值是负的?实际上。。。。此图像是根据我的上述代码显示的。它也可以取负值。现在,如果我将值20000作为总数传递,那么在x轴。最大范围应显示8000,然后横杆应在上方交叉,但我想设置在两者之间。如果你能让我知道我的skype manijain333thnx这是有帮助的,但如果y轴值(总美元)是负数,那么你喜欢哪种条形图。。我的意思是如何自定义或有任何其他的例子。你总是可以反转条形图,使条形图看起来像是向下的(将x轴放在顶部,反转y域)。这样,负值更有意义。我不知道你是不是这个意思。
svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis);
    .selectAll('text')
    .text(function(d) {
        return 'Some string: ' + d.letter
     })