D3.Js条形图问题

D3.Js条形图问题,d3.js,D3.js,我正在尝试使用D3.js绘制条形图,但没有成功。 我试着如下 Model.cs 公共类柱状图 { 公共日期时间任务日期{get;set;} 公共浮点持续时间{get;set;} } Index.cshtml 在my Index.cshtml中(razor语法,mvc视图) 我有以下代码来绘制条形图 <head> <meta name="viewport" content="width=device-width" /> <title> Repor

我正在尝试使用D3.js绘制条形图,但没有成功。 我试着如下

Model.cs 公共类柱状图 { 公共日期时间任务日期{get;set;} 公共浮点持续时间{get;set;} }

Index.cshtml 在my Index.cshtml中(razor语法,mvc视图) 我有以下代码来绘制条形图

<head>
    <meta name="viewport" content="width=device-width" />
    <title> Report</title>
    <script type="text/javascript" src="/Scripts/d3.js"></script>
    <script type="text/javascript" src="https:/Scripts/d3pie.js"></script>
    <script type="text/javascript" src="https:/Scripts/d3.tip.v0.6.3.js"></script>
    .axis path, .axis line
    {
    fill: none;
    stroke: #777;
    shape-rendering: crispEdges;
    }

    .axis text
    {
    font-family: 'Arial';
    font-size: 13px;
    }
    .tick
    {
    stroke-dasharray: 1, 2;
    }
    .bar
    {
    fill: FireBrick;
    }
</head>

报告
.轴路径,.轴线
{
填充:无;
行程:777;
形状渲染:边缘清晰;
}
.轴文本
{
字体系列:“Arial”;
字体大小:13px;
}
打上钩
{
笔划数组:1,2;
}
.酒吧
{
填料:耐火砖;
}
条形图java脚本

<svg id="visualisation" width="1000" height="500"></svg>

<script>
    var jsonData  = @Html.Raw(Json.Encode(Model.BarChart));


    data = jsonData;

    InitChart();

    function InitChart() {

        var barData = data;

        var vis = d3.select('#visualisation'),
          WIDTH = 1000,
          HEIGHT = 500,
          MARGINS = {
              top: 20,
              right: 20,
              bottom: 20,
              left: 50
          },
          xRange = d3.scale.ordinal().rangeRoundBands([MARGINS.left, WIDTH - MARGINS.right], 0.1).domain(barData.map(function (d) {
              return d.Date;
          })),


          yRange = d3.scale.linear().range([HEIGHT - MARGINS.top, MARGINS.bottom]).domain([0,
            d3.max(barData, function (d) {
                return d.Duration;
            })
          ]),

          xAxis = d3.svg.axis()
            .scale(xRange)
            .tickSize(5)
            .tickSubdivide(true),

          yAxis = d3.svg.axis()
            .scale(yRange)
            .tickSize(5)
            .orient("left")
            .tickSubdivide(true);


        vis.append('svg:g')
          .attr('class', 'x axis')
          .attr('transform', 'translate(0,' + (HEIGHT - MARGINS.bottom) + ')')
          .call(xAxis);

        vis.append('svg:g')
          .attr('class', 'y axis')
          .attr('transform', 'translate(' + (MARGINS.left) + ',0)')
          .call(yAxis);

        vis.selectAll('rect')
          .data(barData)
          .enter()
          .append('rect')
          .attr('x', function (d) {
              return xRange(d.Date);
          })
          .attr('y', function (d) {
              return yRange(d.Duration);
          })
          .attr('width', xRange.rangeBand())
          .attr('height', function (d) {
              return ((HEIGHT - MARGINS.bottom) - yRange(d.Duration));
          })
          .attr('fill', 'grey')
          .on('mouseover', function (d) {
              d3.select(this)
                .attr('fill', 'blue');
          })
          .on('mouseout', function (d) {
              d3.select(this)
                .attr('fill', 'grey');
          });

    }
</script>

var jsonData=@Html.Raw(Json.Encode(Model.BarChart));
数据=jsonData;
InitChart();
函数InitChart(){
var barData=数据;
var vis=d3。选择(#可视化),
宽度=1000,
高度=500,
边距={
前20名,
右:20,,
底数:20,
左:50
},
xRange=d3.scale.ordinal().rangeRoundBands([MARGINS.left,WIDTH-MARGINS.right],0.1).域(barData.map)(函数(d){
返回日期;
})),
yRange=d3.scale.linear().range([HEIGHT-MARGINS.top,MARGINS.bottom]).domain([0,
d3.最大值(barData,函数(d){
返回d.持续时间;
})
]),
xAxis=d3.svg.axis()
.刻度(X范围)
.尺寸(5)
.tickSubdivide(真),
yAxis=d3.svg.axis()
.刻度(Y量程)
.尺寸(5)
.东方(“左”)
.tickde(真);
vis.append('svg:g')
.attr('class','x轴')
.attr('transform','translate(0',+(HEIGHT-MARGINS.bottom)+'))
.呼叫(xAxis);
vis.append('svg:g')
.attr('class','y轴')
.attr('transform','translate(+(MARGINS.left)+',0'))
.呼叫(yAxis);
vis.selectAll('rect'))
.数据(barData)
.输入()
.append('rect')
.attr('x',函数(d){
返回范围(d.日期);
})
.attr('y',函数(d){
返回Y范围(d.持续时间);
})
.attr('width',xRange.rangeBand())
.attr(高度),功能(d){
返回((高度-边距.底部)-Y范围(d.持续时间));
})
.attr('填充','灰色')
.on('mouseover',函数(d){
d3.选择(本)
.attr(“填充”、“蓝色”);
})
.on('mouseout',函数(d){
d3.选择(本)
.attr(“填充”、“灰色”);
});
}
控制台中出现错误

Error: Invalid value for <rect> attribute height="NaN"
Error: Invalid value for <rect> attribute y="NaN"
错误:属性height=“NaN”的值无效
错误:属性y=“NaN”的值无效
这是一个猜测

尝试将所有
d.y
更改为
d.duration
(或
d.duration
),并使您的模型成为一个值数组

您的d3代码基于这样一种想法,即
data
aka
barData
aka
jsonData
是一个数组。在当前代码中,情况并非如此


您是否检查了
yRange(d.y)
返回的内容?我有一个很好的猜测…你的数据是如何得到y值的?在我看来,这些都不见了。我刚刚更新了我的代码yRange(d.Duration)和xRange(d.Date),但仍然得到了错误:属性height=“NaN”的无效值控制台视图显示var jsonData=[{“Date”:“\/TaskDate(1429041600000)\/”,“Duration”:2.15,,“Date”:“2015年4月15日”};
yRange(…)
返回什么?这似乎很奇怪。因为它应该返回20。假设您的范围是[480,20]和域[0,2.15]。我可以在视图中看到y轴和x轴,但同时可以看到字符串“.轴路径,.轴线{填充:无;笔划:#777;形状渲染:CrispEdge;}。轴文本{字体系列:'Arial';字体大小:13px;}。勾选{笔划dasharray:1,2;}。条形图{填充:FireBrick;}”在视图和控制台中,错误为.axis path、.axis line{fill:none;stroke:777;形状渲染:crispEdge;}.axis text{font-family:'Arial';font-size:13px;}.tick{stroke-dasharray:1,2;}.bar{fill:FireBrick;}我重新更新了代码“return((高度-边距.底部)-yRange(d.Duration));”现在我可以看到y轴和x轴。Y轴范围为0-2,x轴为当前日期。