D3.js Can';t使nvd3 x值标签向右显示
我正在尝试将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
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];
});