如何使用d3.js制作可视化图表

作者&投稿:化凯 (若有异议请与网页底部的电邮联系)
用作数据可视化,echarts 和 D3.js哪个好?~

这两个都没用过,我一般都是用finebi来分析我的数据,最后在Dashboard里面查看可视化的图表结果,而且可以很方便地切换维度,联动钻取等

没用过这个,我用fusionChart

  D3是目前最流行的JavaScript可视化图表库之一,D3的图表类型非常丰富,并且支持SVG格式,因此应用十分广泛,也有很多图表插件基于D3开发,比如MetricsGraphics.js,在D3上构建的数据图表非常强大。


  D3的特点

  允许绑定任意数据到DOM,将数据驱动转换应用到Document中。

  不仅可以创建精美的HTML表格,而且可以绘制折线图、柱形图和饼图等数据图表。

  支持SVG,在Web页面上渲染毫无压力。

  回到顶部

  D3的使用方法

  关于D3的具体用法,可以看D3图形库API参考这篇文章。本文主要对介绍一些经典图表的实现效果及代码。

index.html代码:



<!DOCTYPE html>
<meta charset="utf-8">
<style>
 
svg {
  font: 10px sans-serif;
}
 
.y.axis path {
  display: none;
}
 
.y.axis line {
  stroke: #fff;
  stroke-opacity: .2;
  shape-rendering: crispEdges;
}
 
.y.axis .zero line {
  stroke: #000;
  stroke-opacity: 1;
}
 
.title {
  font: 300 78px Helvetica Neue;
  fill: #666;
}
 
.birthyear,
.age {
  text-anchor: middle;
}
 
.birthyear {
  fill: #fff;
}
 
rect {
  fill-opacity: .6;
  fill: #e377c2;
}
 
rect:first-child {
  fill: #1f77b4;
}
 
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
 
var margin = {top: 20, right: 40, bottom: 30, left: 20},
    width = 960 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom,
    barWidth = Math.floor(width / 19) - 1;
 
var x = d3.scale.linear()
    .range([barWidth / 2, width - barWidth / 2]);
 
var y = d3.scale.linear()
    .range([height, 0]);
 
var yAxis = d3.svg.axis()
    .scale(y)
    .orient("right")
    .tickSize(-width)
    .tickFormat(function(d) { return Math.round(d / 1e6) + "M"; });
 
// An SVG element with a bottom-right origin.
var svg = d3.select("body").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
 
// A sliding container to hold the bars by birthyear.
var birthyears = svg.append("g")
    .attr("class", "birthyears");
 
// A label for the current year.
var title = svg.append("text")
    .attr("class", "title")
    .attr("dy", ".71em")
    .text(2000);
 
d3.csv("population.csv", function(error, data) {
 
  // Convert strings to numbers.
  data.forEach(function(d) {
    d.people = +d.people;
    d.year = +d.year;
    d.age = +d.age;
  });
 
  // Compute the extent of the data set in age and years.
  var age1 = d3.max(data, function(d) { return d.age; }),
      year0 = d3.min(data, function(d) { return d.year; }),
      year1 = d3.max(data, function(d) { return d.year; }),
      year = year1;
 
  // Update the scale domains.
  x.domain([year1 - age1, year1]);
  y.domain([0, d3.max(data, function(d) { return d.people; })]);
 
  // Produce a map from year and birthyear to [male, female].
  data = d3.nest()
      .key(function(d) { return d.year; })
      .key(function(d) { return d.year - d.age; })
      .rollup(function(v) { return v.map(function(d) { return d.people; }); })
      .map(data);
 
  // Add an axis to show the population values.
  svg.append("g")
      .attr("class", "y axis")
      .attr("transform", "translate(" + width + ",0)")
      .call(yAxis)
    .selectAll("g")
    .filter(function(value) { return !value; })
      .classed("zero", true);
 
  // Add labeled rects for each birthyear (so that no enter or exit is required).
  var birthyear = birthyears.selectAll(".birthyear")
      .data(d3.range(year0 - age1, year1 + 1, 5))
    .enter().append("g")
      .attr("class", "birthyear")
      .attr("transform", function(birthyear) { return "translate(" + x(birthyear) + ",0)"; });
 
  birthyear.selectAll("rect")
      .data(function(birthyear) { return data[year][birthyear] || [0, 0]; })
    .enter().append("rect")
      .attr("x", -barWidth / 2)
      .attr("width", barWidth)
      .attr("y", y)
      .attr("height", function(value) { return height - y(value); });
 
  // Add labels to show birthyear.
  birthyear.append("text")
      .attr("y", height - 4)
      .text(function(birthyear) { return birthyear; });
 
  // Add labels to show age (separate; not animated).
  svg.selectAll(".age")
      .data(d3.range(0, age1 + 1, 5))
    .enter().append("text")
      .attr("class", "age")
      .attr("x", function(age) { return x(year - age); })
      .attr("y", height + 4)
      .attr("dy", ".71em")
      .text(function(age) { return age; });
 
  // Allow the arrow keys to change the displayed year.
  window.focus();
  d3.select(window).on("keydown", function() {
    switch (d3.event.keyCode) {
      case 37: year = Math.max(year0, year - 10); break;
      case 39: year = Math.min(year1, year + 10); break;
    }
    update();
  });
 
  function update() {
    if (!(year in data)) return;
    title.text(year);
 
    birthyears.transition()
        .duration(750)
        .attr("transform", "translate(" + (x(year1) - x(year)) + ",0)");
 
    birthyear.selectAll("rect")
        .data(function(birthyear) { return data[year][birthyear] || [0, 0]; })
      .transition()
        .duration(750)
        .attr("y", y)
        .attr("height", function(value) { return height - y(value); });
  }
});


d3的力引导图可以看看他这个。网页链接



哥们,d3.js的中文书还是有基本的,随便卖本看看吧,这个是知道上几百字能说清楚并教会你的么?

如何使用d3.js制作可视化图表 ? 百度去!


初识D3.js :打造专属可视化
阈值比例尺可以为一组连续数据指定分割阈值,阈值比例尺默认的 domain:[0.5] 以及默认的 range:[0, 1] ,因此默认的 d3.scaleThreshold() 等价于 Math.round 函数。 阈值比例尺输入域为 N 的话,输出域必须为 N + 1,否则比例尺对某些值可能会返回 undefined,或者输出域多余的值会被忽略。 使用示例: 存在三种...

webgl、three.js、D3.js这三者是什么关系?
webgl、three.js、D3.js这三者的关系是:1、D3.js是一个数据可视化的库,看看他们的DEMO就可以知道,技术基础是SVG。兼容性是IE9+。2、webgl是HTML5中提出的新技术,是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,关于它的教程可以看看hiwebgl。目前兼容性堪忧 3...

d3js的tree结构图例怎么做
如下过程:使用d3.js 初始化d3和画布大小,tree = d3.layout.cluster().size([h, w])导入数据,使用d3默认处理数据: root = tree.nodes(data)处理数据(包括坐标的处理)展示数据 思路是这样的。

请问D3 .JS是什么语言?对初学者有什么建议吗?
D3是别人开发的一个js框架,D3里面主要是开发的一个像柱状图,线性图,你直接调用他的类库就行 了,也就是D3.JS。也就是用js和jq写的,所以说,你只要会了js和jq,然后看别人D3的开发文档,就知道怎么调用D3了。

下列哪些可以用作数据可视化软件
2、Plotly 可视化数据图形工具Plotly支持多种动态图表,如在线绘制柱形图、直方图、联合分布图等。绘制时,有丰富的颜色面板可供选择,生成的图表可以直接存储在Plotly平台上共享。初学者不用太担心。Plotly官方提供了免费使用的文档和案例,帮助他们上手。3、D3.js D3数据可视化图形工具.js(又称D3)是一...

d3.js不支持低版本浏览器吗
不支持。d3.js是一种具有函数优先的轻量级,解释型或即时编译型的编程语言,不支持低版本浏览器。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中。

d3.js中怎样设置具体的g的长度和宽度
这是y轴 x2就是 y轴长 用d3找到这个元素 修改x2 d3.selectAll("g.x-axis g.tick").select("line").attr("x2",-20)x轴 同理

d3.js和d3.min.js有什么区别
d3.js是开发期间使用的,里面的代码展示是用户友好的,便以阅读及调试。而d3.min.js是前者经过代码压缩而成的,文件较小,用以在应用发布后部署,可以节省网络传输流量,但相应的比较难以阅读。本质没有区别,只是一个适合在开发时使用,一个在应用部署上线时使用。

d3.js与jquery的区别
d3.js和jQuery都有个相同之处,就是它们都是js界的著名工具库。但是它们所面对的领域不一样。d3.js主要是做数据可视化的,也就是各种炫酷的图表,比如折线图、弦图、力导向图等等。而jQuery主要是做页面DOM控制、AJAX和动画的。

d3.js rotate可以三维吗
可以,例如三维地球 JavaScript 文件的后缀名通常为 .js,故 D3 也常使用 D3.js 称呼。D3 提供了各种简单易用的函数,大大简化了 JavaScript 操作数据的难度。

会昌县15594307421: d3.js怎样做出大数据可视化图 -
呼策赛奇: d3.js 是一个现成的库,需要通过html 调用 d3.js的库,使用库里面不同的图形模块结合数据,做成可视化的图的是需要指定数据.

会昌县15594307421: 如何用D3.js绘制饼图 -
呼策赛奇: <!DOCTYPE html> <html class="um landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px"><head><title></title><meta charset="utf-8"><meta name="viewport" content="target-densitydpi=...

会昌县15594307421: 如何使用R语言进行交互数据可视化 -
呼策赛奇: 说起R语言的交互包,第一个想到的应该就是rCharts包.该包直接在R中生成基于D3的Web界面.rCharts包的安装 require(devtools) install_github('rCharts', 'ramnathv') rCharts函数就像lattice函数一样,通过formula、data指定数据源和绘图方式,...

会昌县15594307421: 如何用d3.js画一张地图 -
呼策赛奇: ogr2ogr \ -f GeoJSON \ -where "ISO_A2 = 'GB' AND SCALERANK < 8" \ places.json \ ne_10m_populated_places.shp.

会昌县15594307421: 数据可视化,到底该用什么软件来展示数据 -
呼策赛奇: 1.使用你最熟悉的软件学习用编程建立数据可视化不代表要摒弃你已经熟悉的工具.我一般使用任何能够最快速解决问题的工具,这个工具可以是Excel,GoogleSheets,或者是Python. 你不需要只用R或者只用JavaScript做完所有工作,在一项...

会昌县15594307421: d3.js数据可视化框架支持中文显示吗? -
呼策赛奇: 肯定支持.google "d3js 支持中文",看第一页alloyteam那篇“d3.js实现线形图”,坐标轴文字说明是中文的,有图为证.一般应该用utf-8格式,注意meta标签和文件存储格式都要utf-8的.

会昌县15594307421: 怎么用d3.js链接数据库在HTML中显示图形 -
呼策赛奇: 首先d3.js是一个前端可视化js库,理解了这个其他就好说了.数据库操作是在后台操作的,然后传给前端,那么问题就成了如何把数据传给前端页面了.这个相信难不倒楼主.当然d3.js也可以直接使用ajax向后台请求数据,可以参考d3.xhr方法 如果数据以json格式传给前端的话 也可以使用d3.json方法 其他的还有d3.csv d3.text等 其实都基于d3.xhr实现的

会昌县15594307421: B站上那些可视化视频都是怎么做的?另外平时用的数据可视化工具推荐一下? -
呼策赛奇: 可视化是Jannchie基于e基于d3.js做的一个做的一个将历史数据排名转化为动态柱状图图表的数据可视化项目.源码下载地址:1. . https://pan.baidu.com/s/1Suh4_kBpld9ZHGpuJa2Q2Q 密码: 密码:znwp 根据提示使用即可,并不困难,只要你有数据,照葫芦画瓢改一下名称颜色即可,需要一定代码知识.数据可视化工具很多,需要代码知识的有python matlab spss等 ,比较简单容易上手的有国云墨镜大数据平台,它上面有一个30天试用,包括仪表盘联动和地图数据分析,足够你使用了,东西在精不在多,一两个足矣,希望你能学有所成,打字回答不易,如果满意望采纳,谢谢.

会昌县15594307421: 用d3.js怎么在svg中插入图标 -
呼策赛奇: new document function init() { var svg_obj = document.getElementById("svg_obj"); svg_obj.onclick = function(event) { var xmlns = "http://www.w3.org/2000/svg"; var tsvg_obj = document.getElementById("svg_obj"); var svg_img = do

会昌县15594307421: 请问谁知道哪种js库提供自定义图例功能? -
呼策赛奇: D3.js D3 是最流行的可视化库之一,它被很多其他的表格插件所使用.它允许绑定任意数据到 DOM,然后将数据驱动转换应用到文档中.你可以使用它用一个数组创建基本的 HMTL 表格,或是利用它的流体过度和交互,用相似的数据创建惊人...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网