【问题标题】:NVD3 Discrete BarChart With JsonNVD3 带 Json 的离散条形图
【发布时间】:2014-05-21 14:46:07
【问题描述】:

我正在尝试将 json 文件放入 NVD3 条形图中,但我无法做我想做的事。我对JS不太了解,但正在努力为学校的期末项目学习,所以请帮助=]

这是我从示例中得到的代码:

<!DOCTYPE html> <meta charset="utf-8">

<link href="../src/nv.d3.css" rel="stylesheet" type="text/css">

<style>

body {   overflow-y:scroll; }

text {   font: 12px sans-serif; }

svg {   display: block; }

#chart1 svg{   height: 500px;   min-width: 100px;   min-height: 100px; /*   margin: 10px;   Minimum height and width is a good idea to prevent negative SVG dimensions...   For example width should be =< margin.left + margin.right + 1,   of course 1 pixel for the entire chart would not be very useful, BUT should not have errors
*/ }

</style> <body>

  <div id="chart1">
    <svg></svg>   </div>

<script src="../lib/d3.v3.js"></script> <script src="../nv.d3.js"></script> <!-- including all the components so I don't have to minify every time I test in development --> <script src="../src/tooltip.js"></script> <script src="../src/utils.js"></script> <script src="../src/models/axis.js"></script> <script src="../src/models/discreteBar.js"></script> <script src="../src/models/discreteBarChart.js"></script> <script>





historicalBarChart = [    {
    key: "Cumulative Return",
    values: [
      { 
        "label" : "A" ,
        "value" : 29.765957771107
      } , 
      { 
        "label" : "B" , 
        "value" : 0
      } , 
      { 
        "label" : "C" , 
        "value" : 32.807804682612
      } , 
      { 
        "label" : "D" , 
        "value" : 196.45946739256
      } , 
      { 
        "label" : "E" ,
        "value" : 0.19434030906893
      } , 
      { 
        "label" : "F" , 
        "value" : 98.079782601442
      } , 
      { 
        "label" : "G" , 
        "value" : 13.925743130903
      } , 
      { 
        "label" : "H" , 
        "value" : 5.1387322875705
      }
    ]   } ];




nv.addGraph(function() {     var chart = nv.models.discreteBarChart()
      .x(function(d) { return d.label })
      .y(function(d) { return d.value })
      .staggerLabels(true)
      //.staggerLabels(historicalBarChart[0].values.length > 8)
      .tooltips(false)
      .showValues(true)
      .transitionDuration(250)
      ;

  d3.select('#chart1 svg')
      .datum(historicalBarChart)
      .call(chart);

  nv.utils.windowResize(chart.update);

  return chart; });


</script>

我的问题在这里:

historicalBarChart = [ 
  {
    key: "Cumulative Return",
    values: [
      { 
        "label" : "A" ,
        "value" : 29.765957771107
      } , 
      { 
        "label" : "B" , 
        "value" : 0
      } , 
      { 
        "label" : "C" , 
        "value" : 32.807804682612
      } , 
      { 
        "label" : "D" , 
        "value" : 196.45946739256
      } , 
      { 
        "label" : "E" ,
        "value" : 0.19434030906893
      } , 
      { 
        "label" : "F" , 
        "value" : 98.079782601442
      } , 
      { 
        "label" : "G" , 
        "value" : 13.925743130903
      } , 
      { 
        "label" : "H" , 
        "value" : 5.1387322875705
      }
    ]
  }
];

我想把我的 Json 值放在那里,我该怎么做?

这是我的 Json 文件,一个用于 X 轴,另一个用于 Y 轴:

X 轴:

{"periodos":["112","121","122","131","132","141"]}

Y 轴:

{"reprovados":["247","164","250","147","144","0"]}

如果有人能尽可能完整地回答我,我将非常感谢=]

【问题讨论】:

    标签: javascript json d3.js nvd3.js


    【解决方案1】:

    我不确定你需要什么样的图表,因为你说你想要不同维度的值。我创建了一个所有数据都在同一维度上的图表......我想你将能够用它来满足你的需求。

    DEMO

    var json1 = {"periodos":["A","B","C","D","E","F","G","H","I"]};
    var json2 = {"reprovados":["20","0","32.81","396.46","0.19","98.08","13.93","5.14","15.14"]};
    
    var data = [{values: []}];
    for(var i = 0; i < json1.periodos.length; i++){
      data[0].values.push({
        label: json1.periodos[i],
        value: Number(json2.reprovados[i])
      });
    };
    
    ...
    
    d3.select('#chart1 svg').datum(data)
    
    ...
    

    【讨论】:

    • periodos 里面的值应该是 x 上的描述,reprovados 里面的值应该是条的大小,这很好,只是名称错误。如何将 periodos 值放在 x 轴上?顺便说一句,非常感谢人!你真是个天才哈哈哈
    • 现在我完全理解了...更新了演示...感谢赞美
    • 谢谢,现在完美了哈哈我怎样才能从文件中传递 json 值,而不是写在变量上?!
    • 更新了...重要的一行:value: Number(json1.periodos[i])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2012-10-23
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    相关资源
    最近更新 更多