Jquery 如果x轴标签是字符串值,则它们不会显示在d3图表中

Jquery 如果x轴标签是字符串值,则它们不会显示在d3图表中,jquery,d3.js,Jquery,D3.js,我有一张d3散点图。如果我能给出x轴和y轴的数值,它就可以正常工作了。但若x轴包含字符串值,那个么图表中并没有显示任何内容 var data = [[Project1,3], [Project2,17]]; var margin = {top: 20, right: 15, bottom: 60, left: 60} , width = 300 - margin.left - margin.right , height = 200 - margin.top - margin.botto

我有一张d3散点图。如果我能给出x轴和y轴的数值,它就可以正常工作了。但若x轴包含字符串值,那个么图表中并没有显示任何内容

var data = [[Project1,3], [Project2,17]];

var margin = {top: 20, right: 15, bottom: 60, left: 60}
  , width = 300 - margin.left - margin.right
  , height = 200 - margin.top - margin.bottom;

var x = d3.scale.linear()
          .domain([0, d3.max(data, function(d) { return d[0]; })])
          .range([ 0, width ]);

var y = d3.scale.linear()
          .domain([0, d3.max(data, function(d) { return d[1]; })])
          .range([ height, 0 ]);

var chart = d3.select('#cognitiveChartDiv')
.append('svg:svg')
.attr('width', width + margin.right + margin.left)
.attr('height', height + margin.top + margin.bottom)
.attr('class', 'chart')

var colors = d3.scale.linear()
.domain([5, 20])
.range(['#4577bc','#4577bc'])

var main = chart.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
.attr('width', width)
.attr('height', height)
.attr('class', 'main')   

// draw the x axis
var xAxis = d3.svg.axis()
.scale(x)
.orient('bottom');

main.append('g')
.attr('transform', 'translate(0,' + height + ')')
.attr('class', 'main axis date')
.call(xAxis);

// draw the y axis
var yAxis = d3.svg.axis()
.scale(y)
.orient('left');

main.append('g')
.attr('transform', 'translate(0,0)')
.attr('class', 'main axis date')
.call(yAxis);

var g = main.append("svg:g"); 

g.selectAll("scatter-dots")
  .data(data)
  .enter().append("svg:circle")
      .attr("cx", function (d,i) { return x(d[0]); } )
      .attr("cy", function (d) { return y(d[1]); } )
      .attr("r", 8)
      .style('stroke', function(d,i) {
        return colors(i);
    })
    .style('fill', function(d,i) {
        return colors(i);
    })
如果
var data=[[1,10],[2,20]]
则其工作正常。我希望图表也能用于字符串值。请建议我该做什么。我曾尝试使用
ordinal()
函数代替线性函数,但没有帮助。

“如果x轴标签是字符串值…”。实际上,轴标签总是字符串

正如您在正文中所描述的,您有一个不同的问题:您希望在数据数组中也传递字符串。在这种情况下,你必须改变比例。具体而言,有序量表:

var x = d3.scale.ordinal()
  .domain(data.map(function(d) {
    return d[0];
  }))
  .rangePoints([0, width], 0.5)
以下是更改后的代码:

var数据=[
[“项目1”,3],
[“项目2”,17]
];
var保证金={
前20名,
右:15,
底数:60,
左:60
},
宽度=300-边距.左-边距.右,
高度=200-margin.top-margin.bottom;
var x=d3.scale.ordinal()
.domain(data.map)(函数(d){
返回d[0];
}))
.范围点([0,宽度],0.5)
变量y=d3.scale.linear()
.domain([0,d3.max(数据,函数(d)){
返回d[1];
})])
.范围([高度,0]);
var chart=d3.选择(“#认知ChartDiv”)
.append('svg:svg')
.attr('width',width+margin.right+margin.left)
.attr('height',height+margin.top+margin.bottom)
.attr('类','图表')
var colors=d3.scale.linear()
.domain([5,20])
.范围(['#4577bc','#4577bc']))
var main=chart.append('g')
.attr('transform','translate('+margin.left+','+margin.top+'))
.attr('width',width)
.attr('height',height)
.attr('class','main')
//画x轴
var xAxis=d3.svg.axis()
.比例(x)
.orient(“底部”);
main.append('g')
.attr('transform','translate(0',+height+'))
.attr('类别','主轴日期')
.呼叫(xAxis);
//绘制y轴
var yAxis=d3.svg.axis()
.比例(y)
.东方(左);
main.append('g')
.attr('transform','translate(0,0'))
.attr('类别','主轴日期')
.呼叫(yAxis);
var g=main.append(“svg:g”);
g、 选择全部(“散点”)
.数据(数据)
.enter().append(“svg:circle”)
.attr(“cx”,函数(d,i){
返回x(d[0]);
})
.attr(“cy”,函数(d){
返回y(d[1]);
})
.attr(“r”,8)
.风格(“笔划”,功能(d,i){
返回颜色(i);
})
.样式(“填充”,功能(d,i){
返回颜色(i);
})
。轴路径,
.轴线{
填充:无;
笔画:黑色;
}

“如果x轴标签是字符串值…”。实际上,轴标签总是字符串

正如您在正文中所描述的,您有一个不同的问题:您希望在数据数组中也传递字符串。在这种情况下,你必须改变比例。具体而言,有序量表:

var x = d3.scale.ordinal()
  .domain(data.map(function(d) {
    return d[0];
  }))
  .rangePoints([0, width], 0.5)
以下是更改后的代码:

var数据=[
[“项目1”,3],
[“项目2”,17]
];
var保证金={
前20名,
右:15,
底数:60,
左:60
},
宽度=300-边距.左-边距.右,
高度=200-margin.top-margin.bottom;
var x=d3.scale.ordinal()
.domain(data.map)(函数(d){
返回d[0];
}))
.范围点([0,宽度],0.5)
变量y=d3.scale.linear()
.domain([0,d3.max(数据,函数(d)){
返回d[1];
})])
.范围([高度,0]);
var chart=d3.选择(“#认知ChartDiv”)
.append('svg:svg')
.attr('width',width+margin.right+margin.left)
.attr('height',height+margin.top+margin.bottom)
.attr('类','图表')
var colors=d3.scale.linear()
.domain([5,20])
.范围(['#4577bc','#4577bc']))
var main=chart.append('g')
.attr('transform','translate('+margin.left+','+margin.top+'))
.attr('width',width)
.attr('height',height)
.attr('class','main')
//画x轴
var xAxis=d3.svg.axis()
.比例(x)
.orient(“底部”);
main.append('g')
.attr('transform','translate(0',+height+'))
.attr('类别','主轴日期')
.呼叫(xAxis);
//绘制y轴
var yAxis=d3.svg.axis()
.比例(y)
.东方(左);
main.append('g')
.attr('transform','translate(0,0'))
.attr('类别','主轴日期')
.呼叫(yAxis);
var g=main.append(“svg:g”);
g、 选择全部(“散点”)
.数据(数据)
.enter().append(“svg:circle”)
.attr(“cx”,函数(d,i){
返回x(d[0]);
})
.attr(“cy”,函数(d){
返回y(d[1]);
})
.attr(“r”,8)
.风格(“笔划”,功能(d,i){
返回颜色(i);
})
.样式(“填充”,功能(d,i){
返回颜色(i);
})
。轴路径,
.轴线{
填充:无;
笔画:黑色;
}