【问题标题】:d3.js and dimple, reading data in from a file rather than hard codedd3.js 和dimple,从文件中读取数据而不是硬编码
【发布时间】:2016-04-29 18:22:49
【问题描述】:

我正在尝试从运行良好的 Dimple/D3 可视化的硬编码版本过渡到从文件中读取数据的更加“动态”的版本,但是,我发现它非常有问题。

这或多或少是我想要的:

为了实现这一目标,以下代码完美运行,即它生成的正是您刚刚看到的图像:

<div id="chartContainer">
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://dimplejs.org/dist/dimple.v1.1.1.min.js"></script>
</div>

<script>

console.log(data);

var svg = dimple.newSvg("#chartContainer", 1000, 1000);
var data = [
          { '"loc"': '"Hamburg, Deutschland"', '"title"': "CNC-Dreher/in" },
          { '"loc"': 'M?nchen (Kreis), Bayern', '"title"': "Data Scientist" },
          { '"loc"': '"D?sseldorf, Nordrhein-Westfalen"', '"title"': "Praktikant m|w" },
          { '"loc"': '"Rheinland-Pfalz, Deutschland"', '"title"': "Senior Softwareentwickler Logistikdienstleistung(w/m)" },
          { '"loc"': '"D?sseldorf, Nordrhein-Westfalen"', '"title"': "Projektmanager (m/w) Information Engineering" },
          { '"loc"': '"Grimma, Leipzig (Kreis)"', '"title"': "Softwareentwickler (m/w)" },
          { '"loc"': '"Hannover, Region Hannover (Kreis)"', '"title"': "Bauleiter (m/w)" },
          { '"loc"': '"M?nchen (Kreis), Bayern"', '"title"': "Backend Software Developer (m/f)" },
          { '"loc"': '"Ratingen, Mettmann (Kreis)"', '"title"': "Ausbildung Industriekaufmann (m/w)" },
          { '"loc"': '"Bayern, Deutschland"', '"title"': "Dualer Studiengang Bachelor of Arts (Fachrichtung Bank/Vertrieb) Bayern" },
          { '"loc"': '"Landshut, Landshut (Kreis)"', '"title"': "Spezialist CFK m/w" },
          { '"loc"': '"Frankfurt am Main, Hessen"', '"title"': "Data Analyst / Consultant analytisches CRM (m/w) f?r unseren Premium Partner EDEKA" },
          { '"loc"': '"Hamburg, Deutschland"', '"title"': "Produktmanager (m/w) im Bereich Privat Kraft" },
          { '"loc"': '"Unterf?hring, M?nchen (Kreis)"', '"title"': "Controller / Assistent der Gesch?ftsleitung" },
          { '"loc"': '"Berlin, Deutschland"', '"title"': "Projektmanager (m/w)" },
          { '"loc"': 'Royal Leamington Spa', '"title"': "SOFTWARE TEST ENGINEER / QA (m/w)" },
          { '"loc"': '"Lauf an der Pegnitz, N?rnberger Land (Kreis)"', '"title"': "Bilanzbuchhalter/in" },
          { '"loc"': '"Buchenb?hl, N?rnberg"', '"title"': "Inhouse Business Intelligence Berater (m/w)" },
          { '"loc"': '"Berlin, Deutschland"', '"title"': "Praktikant Vertriebscontrolling (m/w) f?r die Dauer von 6 Monaten (Pflichtpraktikum)" }
        ];
var chart = new dimple.chart(svg,data);
chart.setBounds(100, 100, 500, 300);

var x = chart.addCategoryAxis("x", '"loc"');
var y = chart.addMeasureAxis("y", '"title"');

var lines = chart.addSeries(["project"], dimple.bar, [x, y]);

lines.data = data;
lines.lineWeight = 5;
lines.lineMarkers = true;

chart.draw();

</script>

但是,当我尝试从更大的外部文件 (link to said file on my GitHub) 加载数据时,(与上面代码中的玩具数据具有非常相似的特征)我得到一个错误 - 或者 - 事实上 - 我得到了一张基本上毫无意义的地图,这是那张卑鄙的混乱的照片,然后是我一直在使用的最新迭代的代码:

在那一点上,"loc" 是未定义的,"title"0.0

<!DOCTYPE html>


<html>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://dimplejs.org/dist/dimple.v1.1.1.min.js"></script>

<script type="text/javascript">
  function draw(data) {

  "use strict";
  var margin = 75,
      width = 9000 - margin,
      height = 600 - margin;

  var svg = d3.select("body")
              .append("svg")
              .attr("width", width + margin)
              .attr("height", height + margin)
              .append('g')
              .attr('class','chart');


  var chart = new dimple.chart(svg,data);
  chart.setBounds(100, 100, 500, 300);

  var x = chart.addCategoryAxis("x", '"loc"');
  var y = chart.addMeasureAxis("y", '"title"');

  var lines = chart.addSeries(["project"], dimple.bar, [x, y]);


  chart.draw();

  };

</script>

<body>
  <script type="text/javascript">
  /*
    Use D3 (not dimple.js) to load the TSV file
    and pass the contents of it to the draw function
    */
  d3.csv("Germany.csv", draw);
  </script>
</body>

</html>

问题

如您所见,我要做的只是从我的 GitHub 上的该文件中读取数据,而不是对其进行硬编码 - 怎么做?

--> 这可能与文件的大小对于 svg 的边界而言太大有关吗?我有点怀疑,因为我一直在尝试使用 Germany.csv 文件的一小部分并遇到同样的问题。


有人告诉我,可以使用变量来操纵数据,就像我在上面的第一个示例中所做的那样:

var data;

d3.csv("nameOfCsv.csv", function(thisData) {
      data = thisData;
    }

但事实上,代码 sn-p 不起作用,对于初学者来说,它缺少 ),而且我以前从未得到过类似的工作 - 所以 - 我不确定这是一种合理的方式去。

--------


更新 @MauricioPoppe 解决了这个问题,但是尺寸有点不稳定,有没有办法让动态看起来更好,也许用 css 或其他东西?

【问题讨论】:

  • 不,这是不对的,因为我可以通过console.log(data); 看到它。如果我确切地知道它不起作用,我就不会发布这个问题
  • @JSBob,嗨伙计- 抱歉有点... snarky,我在编程时感到非常沮丧!哈哈-但我喝了点茶,我发布了一个更完整的问题描述。

标签: d3.js dimple.js


【解决方案1】:

您的 csv 显示每个字段都包含在一个空格内,因此而不是

var x = chart.addCategoryAxis("x", '"loc"');
var y = chart.addMeasureAxis("y", '"title"');

你应该使用

var x = chart.addCategoryAxis("x", ' "loc" ');
var y = chart.addMeasureAxis("y", ' "title" ');

function draw(data) {

  "use strict";
  var margin = 75,
    width = 9000 - margin,
    height = 600 - margin;

  var svg = d3.select("body")
    .append("svg")
    .attr("width", width + margin)
    .attr("height", height + margin)
    .append('g')
    .attr('class', 'chart');


  var chart = new dimple.chart(svg, data);
  chart.setBounds(100, 100, 500, 300);

  var x = chart.addCategoryAxis("x", ' "loc" ');
  var y = chart.addMeasureAxis("y", ' "title" ');

  var lines = chart.addSeries(["project"], dimple.bar, [x, y]);


  chart.draw();

};

d3.csv('https://raw.githubusercontent.com/s-matthew-english/bookish-adventure/master/data/Germany.csv', draw)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="http://dimplejs.org/dist/dimple.v1.1.1.min.js"></script>

【讨论】:

  • ...但是如果您不介意,您知道如何制作以使索引清晰可见吗?我应该使用 css 还是什么?
  • 您将宽度设置为 500 像素,您应该根据数据量进行设置,例如chart.setBounds(100, 100, data.length, * k 300) 其中 k 应该是标签的高度 + 一些边距
  • 标签是什么意思?我想你的意思是k * 300,是吗?
  • 对不起,我的意思是chart.setBounds(100, 100, data.length * k, 300),对于标签,我的意思是出现在x轴上的文本,对你来说是"loc"
  • hmmm,但你可能知道我怎样才能访问它,我猜是" loc" s 的数量吗?
猜你喜欢
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
相关资源
最近更新 更多