D3.js - 如何使用内联 JSON 作为 D3 图表的数据集,而不是 csv/tsv/json 文件

至尊

我正在我的应用程序中实现 D3.js 图表,我不想使用文件作为数据集,我只想使用内联 JSON 作为数据集(JSON 将在应用程序中动态生成)。

使用以下代码完成了可重用响应式多线图的实现。

var data1 = [ {“我的 JSON 数据在这里”} ]; 

d3.json( '' , function (error, data) { data1 .forEach(function (d) { 
        d.year = +d.year; 
        d.variableA = +d.variableA; 
        d.variableB = +d.variableB; 
        d.variableC = +d.variableC; 
        d.Temp = +d.Temp; 
    }); 
    var chart = makeLineChart( data1 , 'year', { 
        'Device 1': { column: 'variableA' }, 
        'Device 2' : { column: 'variableB' }, 
        'Device 3': { column: 'variableC' }, 
        'Device 4': { column: 'variableD' } 
    }, { xAxis: 'Years', yAxis: '温度' }); 
    chart.bind("#chart-line1");

    

    图表渲染();
});

这里我调用 d3.json() 但文件名是空的,而且代码中没有使用数据我使用的是“data1”而不是“data”。它工作完美......

现在我想为Grouped Bar Chart实现相同的目标,但是这种图表数据绑定方法与“可重用响应式多线图”不同。以下是解析“分组条形图”数据的代码。

d3.csv("\\data.csv", function(d, i, columns) {
  for (var i = 1, n = columns.length; i < n; ++i) d[columns[i]] = +d[columns[i]];
  return d;
}, function(error, data) {
  if (error) throw error;

  var keys = data.columns.slice(1); 

  // Rest of code to bind parsed data to chart   
});

分组条形图中的完整代码

那么我如何在这里用内联 JSON替换data.csv

标记

方法d3.jsond3.csvAJAX 调用旨在从服务器获取数据如果您有内嵌 JSON,则不需要这些调用。您的第一个示例像这样工作的事实只是一个副作用。您的d3.json调用失败,但回调函数仍在执行。这只是不必要的,应该写成:

var data1 = [ { "My JSON data here" } ];

data1.forEach(function (d) {
    d.year = +d.year;
    d.variableA = +d.variableA;
    d.variableB = +d.variableB;
    d.variableC = +d.variableC;
    d.Temp = +d.Temp;
});

var chart = makeLineChart(data1, 'year', {
    'Device 1': { column: 'variableA' },
    'Device 2': { column: 'variableB' },
    'Device 3': { column: 'variableC' },
    'Device 4': { column: 'variableD' }
}, { xAxis: 'Years', yAxis: 'Temperature' });
chart.bind("#chart-line1");
chart.render();

再次在您的第二张图表上,d3.csv不需要调用然而,从 CSV 格式到 JSON 会发生一些处理。您需要在创建 JSON 时复制它,并且要使图表的其余部分工作,您将需要以下内容:

...

var z = d3.scaleOrdinal()
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);

var data = [{"State":"CA","Under 5 Years":2704659,"5 to 13 Years":4499890,"14 to 17 Years":2159981,"18 to 24 Years":3853788,"25 to 44 Years":10604510,"45 to 64 Years":8819342,"65 Years and Over":4114496},{"State":"TX","Under 5 Years":2027307,"5 to 13 Years":3277946,"14 to 17 Years":1420518,"18 to 24 Years":2454721,"25 to 44 Years":7017731,"45 to 64 Years":5656528,"65 Years and Over":2472223}];

var keys = ["Under 5 Years", "5 to 13 Years", "14 to 17 Years", "18 to 24 Years", "25 to 44 Years", "45 to 64 Years", "65 Years and Over"]

x0.domain(data.map(function(d) { return d.State; }));
x1.domain(keys).rangeRound([0, x0.bandwidth()]);

...

这是在没有调用的情况下运行的代码d3.csv

<!DOCTYPE html>
<style>

.axis .domain {
  display: none;
}

</style>
<svg width="960" height="500"></svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>

var svg = d3.select("svg"),
    margin = {top: 20, right: 20, bottom: 30, left: 40},
    width = +svg.attr("width") - margin.left - margin.right,
    height = +svg.attr("height") - margin.top - margin.bottom,
    g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");

var x0 = d3.scaleBand()
    .rangeRound([0, width])
    .paddingInner(0.1);

var x1 = d3.scaleBand()
    .padding(0.05);

var y = d3.scaleLinear()
    .rangeRound([height, 0]);

var z = d3.scaleOrdinal()
    .range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);

var data = [{"State":"CA","Under 5 Years":2704659,"5 to 13 Years":4499890,"14 to 17 Years":2159981,"18 to 24 Years":3853788,"25 to 44 Years":10604510,"45 to 64 Years":8819342,"65 Years and Over":4114496},{"State":"TX","Under 5 Years":2027307,"5 to 13 Years":3277946,"14 to 17 Years":1420518,"18 to 24 Years":2454721,"25 to 44 Years":7017731,"45 to 64 Years":5656528,"65 Years and Over":2472223},{"State":"NY","Under 5 Years":1208495,"5 to 13 Years":2141490,"14 to 17 Years":1058031,"18 to 24 Years":1999120,"25 to 44 Years":5355235,"45 to 64 Years":5120254,"65 Years and Over":2607672},{"State":"FL","Under 5 Years":1140516,"5 to 13 Years":1938695,"14 to 17 Years":925060,"18 to 24 Years":1607297,"25 to 44 Years":4782119,"45 to 64 Years":4746856,"65 Years and Over":3187797},{"State":"IL","Under 5 Years":894368,"5 to 13 Years":1558919,"14 to 17 Years":725973,"18 to 24 Years":1311479,"25 to 44 Years":3596343,"45 to 64 Years":3239173,"65 Years and Over":1575308},{"State":"PA","Under 5 Years":737462,"5 to 13 Years":1345341,"14 to 17 Years":679201,"18 to 24 Years":1203944,"25 to 44 Years":3157759,"45 to 64 Years":3414001,"65 Years and Over":1910571}];

var keys = ["Under 5 Years", "5 to 13 Years", "14 to 17 Years", "18 to 24 Years", "25 to 44 Years", "45 to 64 Years", "65 Years and Over"];

  x0.domain(data.map(function(d) { return d.State; }));
  x1.domain(keys).rangeRound([0, x0.bandwidth()]);
  y.domain([0, d3.max(data, function(d) { return d3.max(keys, function(key) { return d[key]; }); })]).nice();

  g.append("g")
    .selectAll("g")
    .data(data)
    .enter().append("g")
      .attr("transform", function(d) { return "translate(" + x0(d.State) + ",0)"; })
    .selectAll("rect")
    .data(function(d) { return keys.map(function(key) { return {key: key, value: d[key]}; }); })
    .enter().append("rect")
      .attr("x", function(d) { return x1(d.key); })
      .attr("y", function(d) { return y(d.value); })
      .attr("width", x1.bandwidth())
      .attr("height", function(d) { return height - y(d.value); })
      .attr("fill", function(d) { return z(d.key); });

  g.append("g")
      .attr("class", "axis")
      .attr("transform", "translate(0," + height + ")")
      .call(d3.axisBottom(x0));

  g.append("g")
      .attr("class", "axis")
      .call(d3.axisLeft(y).ticks(null, "s"))
    .append("text")
      .attr("x", 2)
      .attr("y", y(y.ticks().pop()) + 0.5)
      .attr("dy", "0.32em")
      .attr("fill", "#000")
      .attr("font-weight", "bold")
      .attr("text-anchor", "start")
      .text("Population");

  var legend = g.append("g")
      .attr("font-family", "sans-serif")
      .attr("font-size", 10)
      .attr("text-anchor", "end")
    .selectAll("g")
    .data(keys.slice().reverse())
    .enter().append("g")
      .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });

  legend.append("rect")
      .attr("x", width - 19)
      .attr("width", 19)
      .attr("height", 19)
      .attr("fill", z);

  legend.append("text")
      .attr("x", width - 24)
      .attr("y", 9.5)
      .attr("dy", "0.32em")
      .text(function(d) { return d; });

</script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用外部JSON文件填充D3图表

来自分类Dev

如何从文件中调用 JSON 而不是内联 Multi-Edge D3 示例

来自分类Dev

使用d3 js在phant中绘制json数据

来自分类Dev

如何从JSON文件向D3 js森伯斯特图添加颜色?

来自分类Dev

如何使用D3 JavaScript遍历JSON文件中的数据

来自分类Dev

如何在d3多折线图中使用json数据而不是tsv文件?

来自分类Dev

d3 js 圆形条形图,如何传递对象而不是 .csv 文件?

来自分类Dev

使用d3从json文件中选择特定项目

来自分类Dev

如何使用d3访问JSON数据?

来自分类Dev

如何在D3中从JSON请求数据?

来自分类Dev

如何在D3中从JSON请求数据?

来自分类Dev

使用Python创建D3嵌套JSON数据

来自分类Dev

使用请求正文将 JSON 数据从 spring mvc 填充到 d3 图表

来自分类Dev

在d3 js中,如何在圆上附加其他文本作为工具提示

来自分类Dev

使用javascript,d3和json文件中的数据在圆弧中进行径向渐变的问题

来自分类Dev

转换d3图表以从变量内的json加载数据

来自分类Dev

使用D3绕过JSON

来自分类Dev

如何使用嵌套数组对象访问d3 json文件中的值

来自分类Dev

如何在D3强制有向图中选择要使用的JSON文件

来自分类Dev

如何在d3中使用对象打开json文件?

来自分类Dev

谷歌地图使用 d3 路径作为图层使用 (d3 v4)

来自分类Dev

当存在多个json文件时,将d3图表的svg附加到单独的div

来自分类Dev

如何正确缩放d3图表?

来自分类Dev

无法从d3 json文件读取path d值?

来自分类Dev

D3 JSON文件,其中源和索引为字符串而不是索引

来自分类Dev

如何使用D3 Js向下钻取以创建图表列

来自分类Dev

从D3函数返回js数据集

来自分类Dev

当解析器不是逗号时,如何使用d3解析CSV文件

来自分类Dev

如何从json文件分配Sankey图(D3)中的节点的x轴位置

Related 相关文章

  1. 1

    使用外部JSON文件填充D3图表

  2. 2

    如何从文件中调用 JSON 而不是内联 Multi-Edge D3 示例

  3. 3

    使用d3 js在phant中绘制json数据

  4. 4

    如何从JSON文件向D3 js森伯斯特图添加颜色?

  5. 5

    如何使用D3 JavaScript遍历JSON文件中的数据

  6. 6

    如何在d3多折线图中使用json数据而不是tsv文件?

  7. 7

    d3 js 圆形条形图,如何传递对象而不是 .csv 文件?

  8. 8

    使用d3从json文件中选择特定项目

  9. 9

    如何使用d3访问JSON数据?

  10. 10

    如何在D3中从JSON请求数据?

  11. 11

    如何在D3中从JSON请求数据?

  12. 12

    使用Python创建D3嵌套JSON数据

  13. 13

    使用请求正文将 JSON 数据从 spring mvc 填充到 d3 图表

  14. 14

    在d3 js中,如何在圆上附加其他文本作为工具提示

  15. 15

    使用javascript,d3和json文件中的数据在圆弧中进行径向渐变的问题

  16. 16

    转换d3图表以从变量内的json加载数据

  17. 17

    使用D3绕过JSON

  18. 18

    如何使用嵌套数组对象访问d3 json文件中的值

  19. 19

    如何在D3强制有向图中选择要使用的JSON文件

  20. 20

    如何在d3中使用对象打开json文件?

  21. 21

    谷歌地图使用 d3 路径作为图层使用 (d3 v4)

  22. 22

    当存在多个json文件时,将d3图表的svg附加到单独的div

  23. 23

    如何正确缩放d3图表?

  24. 24

    无法从d3 json文件读取path d值?

  25. 25

    D3 JSON文件,其中源和索引为字符串而不是索引

  26. 26

    如何使用D3 Js向下钻取以创建图表列

  27. 27

    从D3函数返回js数据集

  28. 28

    当解析器不是逗号时,如何使用d3解析CSV文件

  29. 29

    如何从json文件分配Sankey图(D3)中的节点的x轴位置

热门标签

归档