D3.js Can';t使nvd3 x值标签向右显示

D3.js Can';t使nvd3 x值标签向右显示,d3.js,linechart,D3.js,Linechart,我正在尝试将x轴标签指定为字符串。我可以让字符串显示出来,但我无法让它们正确展开/对齐。所有的数字都显示正确,我只是无法让标签正确地展开或域显示出来。我真的很想让标签发挥作用,但域名似乎可能是另一种方式 nv.addGraph(function() { var chart = nv.models.lineChart(); var fitScreen = false; var width = 600; var height = 300; var zoom = 1; cha

我正在尝试将x轴标签指定为字符串。我可以让字符串显示出来,但我无法让它们正确展开/对齐。所有的数字都显示正确,我只是无法让标签正确地展开或域显示出来。我真的很想让标签发挥作用,但域名似乎可能是另一种方式

nv.addGraph(function() {
  var chart = nv.models.lineChart();
  var fitScreen = false;
  var width = 600;
  var height = 300;
  var zoom = 1;

  chart.useInteractiveGuideline(true);
  chart.xAxis
   .domain(["Sunday","Monday","Tuesday","Wednesday","Thursday"])
   .tickValues(['Label 1','Label 2','Label 3','Label 4','Label 5'])
   .ticks(5);
   //.tickFormat(d3.format('d'));

  chart.yAxis
   .tickFormat(d3.format(',.2f'));

  d3.select('#chart1 svg')
  .attr('perserveAspectRatio', 'xMinYMid')
  .attr('width', width)
  .attr('height', height)
  .datum(veggies);

  setChartViewBox();
  resizeChart();

  return chart;
  });
资料

d3标度或轴的“域”是输入数据。在你的数据集中看起来像数字,而不是周名。看

您需要像
xAxis.domain([0,1,2,3,4,5])这样的东西

那么,如何让标签与数字相匹配呢?没有仔细考虑,我建议使用量表的“范围”(输出)部分。但轴的范围定义了图形中类别的数字间距,而不是标签

您需要的是一个自定义格式函数,它可以将数据中的数字转换为标签。您可以使用“tickFormat”选项进行设置:

通常,勾号格式函数用于将数字格式设置为小数或百分比,但语法允许您使用任何将数据值作为参数(我在此处将其命名为
index
)并返回要显示的字符串的函数。行<代码>返回标签[索引]在标签数组中查找索引编号的元素,其中第一个标签是索引0

如果数据值不是从零开始的连续整数,则可以使用对象/关联数组格式,使用命名元素,而不仅仅是数组。例如,如果您的数据具有值“M”、“T”、“W”、“R”等,并且您希望它显示全天名称,那么您可以使用:

xAxis.tickFormat(function(name) {
    var labels = {"M":"Monday", "T":"Tuesday", "W":"Wednesday", 
                   "R": "Thursday", "F":"Friday"};

    return labels[name];

    });
传递给
tickValues()
的值必须是输入域中的值,*即,与JSON数据中的值格式相同。此外,一旦您明确设置了tickValue,就不要通过设置若干个tick来超越该设置。但是,如果只希望某些日期有标签(例如,如果图表上没有足够的空间容纳所有名称),则只需要tickvalue


*请注意更正。

好的,所以我试着按照您所说的做,但不断得到错误“对象标签1没有“反向”方法”。我知道它是从我的输入中得到标签1的,但我不知道它是从哪里得到“反向”的<代码>chart.xAxis.domain([0,1,2,3,4,5])。范围('Label 1','Label 2','Label 3','Label 4','Label 5')。勾选值(['Label 1','Label 2','Label 3','Label 4','Label 5')范围必须是一个数组——也就是说,列表需要放在方括号中,就像第二条语句一样
reverse
是一种内部调用的数组方法。但恐怕比这更复杂,我要修改我的答案@user1855009对于没有仔细考虑的草率回答,我深表歉意。我希望它现在有意义。我应该看看阵列。。。但是,是的,非常有帮助,完全有道理。
xAxis.tickFormat( function(index) {
    var labels = ["Label0", "Label1", "Label2", "Label3", "Label4", "Label5"];

    return labels[index];

    });
xAxis.tickFormat(function(name) {
    var labels = {"M":"Monday", "T":"Tuesday", "W":"Wednesday", 
                   "R": "Thursday", "F":"Friday"};

    return labels[name];

    });