D3---基础的柱状图制作

  一个完整的柱形图包含三部分:矩形、文字、坐标轴。

  

  首先要布置一个大小合适的 SVG 画布:

  • 添加 SVG 画布

    

//画布大小
var width = 400;
var height = 400;

//在 body 里添加一个 SVG 画布
var svg = d3.select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height);

//画布周边的空白
 var padding = {left:30, right:30, top:20, bottom:20};

  上面定义了一个 padding,是为了给 SVG 的周边留一个空白,最好不要将图形绘制到边界上。

  • 定义数据和比例尺  

//定义一个数组
var dataset = [10, 20, 30, 40, 33, 24, 12, 5];

//x轴的比例尺
var xScale = d3.scale.ordinal()
    .domain(d3.range(dataset.length))
    .rangeRoundBands([0, width - padding.left - padding.right]);

//y轴的比例尺
var yScale = d3.scale.linear()
    .domain([0,d3.max(dataset)])
    .range([height - padding.top - padding.bottom, 0]);

  x 轴使用序数比例尺,y 轴使用线性比例尺。要注意两个比例尺值域的范围。

  • 定义坐标轴

//定义x轴
var xAxis = d3.svg.axis()
    .scale(xScale)
    .orient("bottom");

//定义y轴
var yAxis = d3.svg.axis()
    .scale(yScale)
    .orient("left");

  x 轴刻度的方向向下,y 轴的向左。

  • 添加矩形和文字元素 

//矩形之间的空白
var rectPadding = 4;

//添加矩形元素
var rects = svg.selectAll(".MyRect")
        .data(dataset)
        .enter()
        .append("rect")
        .attr("class","MyRect")
        .attr("transform","translate(" + padding.left + "," + padding.top + ")")
        .attr("x", function(d,i){
            return xScale(i) + rectPadding/2;
        } )
        .attr("y",function(d){
            return yScale(d);
        })
        .attr("width", xScale.rangeBand() - rectPadding )
        .attr("height", function(d){
            return height - padding.top - padding.bottom - yScale(d);
        });

//添加文字元素
var texts = svg.selectAll(".MyText")
        .data(dataset)
        .enter()
        .append("text")
        .attr("class","MyText")
        .attr("transform","translate(" + padding.left + "," + padding.top + ")")
        .attr("x", function(d,i){
            return xScale(i) + rectPadding/2;
        } )
        .attr("y",function(d){
            return yScale(d);
        })
        .attr("dx",function(){
            return (xScale.rangeBand() - rectPadding)/2;
        })
        .attr("dy",function(d){
            return 20;
        })
        .text(function(d){
            return d;
        });

  矩形元素和文字元素的 x 和 y 坐标要特别注意,要结合比例尺给予适当的值。

  • 添加坐标轴的元素  

//添加x轴
svg.append("g")
  .attr("class","axis")
  .attr("transform","translate(" + padding.left + "," + (height - padding.bottom) + ")")
  .call(xAxis); 

//添加y轴
svg.append("g")
  .attr("class","axis")
  .attr("transform","translate(" + padding.left + "," + padding.top + ")")
  .call(yAxis);

  坐标轴的位置要结合空白 padding 的值来设定。

  

原文地址:https://www.cnblogs.com/JesseP/p/10329397.html

时间: 2024-11-12 12:15:30

D3---基础的柱状图制作的相关文章

D3基础---简介和数据

D3.js是一种数据操作类型的javascript库(也可视其为插件):结合HTML,SVG和CSS,D3可以图形化的,生动的展现数据. d3获取:http://d3js.org/ 在代码文件中引入D3: <script type="text/javascript" src="d3.v3/d3.v3.js"></script> 添加元素语法: d3.select("body").append("p").

D3基础--数轴

转载请注明出处! 概述: 与比例尺类似,D3的数轴实际上也使用来定义参数的函数.但与比例尺不同的是,调用数轴函数并不会返回值,而是会生成数轴相关的可见元素.包括:轴线,标签和刻度. 但是要注意数轴函数只适应于SVG图形,因为他们生成的都是SVG元素,同样,数轴是设计与定量比例尺(与序数比例尺相对)配合使用的. 定义和创建X轴: 1 //定义x轴 2 3 var xAxis = d3.svg.axis() 4 .scale(xScale) 5 .orient("bottom"); 6 7

D3画完整柱状图(带坐标轴、标签)

昨天晚上本来打算花一点时间把之前学的柱状图改一下,用CSV文件来替换自定义数据.这一替换可不得了,一晚上就搭进去了,还好今早找到了问题的所在,原因在于我的数据引用出了问题. 现在就来讲解一下如何画一个柱状图吧: 柱状图的画法和折线图其实很类似,只要掌握了比例尺的用法和坐标轴的画法,我们只要在此基础上添加“rect”元素添加矩形就可以了,但这其中也有一些要点,我会在其中标出,希望对你有用. 对于d3不同版本带来的代码不适用的解决办法:1).下载对应的v3或者v4版本加到代码引用里可以解决. 2).

零基础HTML5游戏制作教程 第6章 贪吃蛇的实现及代码

第6章 贪吃蛇的实现及代码 讲了不少东西了,老讲理论的东西没劲呀,我们不如先试着做一个小游戏吧. 作为我们的第一个游戏,当然是越简单越好.<贪吃蛇>大家应该都玩过吧?我觉得我玩过的游戏中,她应该算是最简单的一个了.好,就让我们从做<贪吃蛇>开始,享受自己做游戏的乐趣吧. 由于这个游戏是本教程的第一个实际的游戏例子,我会讲的比较详细一些.请大家重点注意编程的思路和实现的方法,这些远比代码本身要重要. 一,蛇身的制作 蛇身由一系列方格组成,初始我们设定蛇身的长度是4,以后每吃到一次食物

零基础简单爬虫制作(以wjyt-china企业黄页爬虫为例)(上)

零.前言 本教程面向毫无编程基础的人群,讲述制作出爬虫所需要的最基本知识.目标是让你就算阅读代码如天书,凭借基本知识,复制代码以及使用搜索引擎也可以制作出可用的爬虫. 同时,本教程也是对笔者本人凭借基本知识,复制代码以及使用搜索引擎制作出可用爬虫的快速学习经历的总结归纳. 再同时,本教程也希望分享给读者三条快速学习哲学: 1.寻找趣味,保持专注.兴趣是最好的老师,发掘兴趣是最强的能力. 2.容忍无知,聚焦实用.在缺乏系统性知识的情况下,要快速涉猎不熟悉的领域并做出成果,需要控制知识与无知的平衡,

D3绘制水平柱状图

一.前言 根据需要,Boss让你绘制水平的柱状图,左边显示昨天的数据,今天显示今天的数据.用D3画图 二.仿造数据 today.csv name,value,unit A,2000,% B,1000,t C,1400,¥ D,32,d E,520,d F,10000,d G,5500,元 H,740,t I,850,t J,950,t K,1100,t L,1200,t yesterday.csv name,value,unit A,1000,% B,800,t C,1200,¥ D,30,d

Eclipse插件开发之基础篇(5) 制作OSGi Bundle

转载出处:http://www.cnblogs.com/liuzhuo 1. 生成OSGi工程 首先打开新工程向导,选择创建Eclipse插件工程.在[目标平台(Target Platform)]选项中选择[OSGi 框架(OSGi framework)]. 图5-1 创建插件工程 在选择模板的时候选择,Hello OSGi Bundle后点击完成. 图5-2 选择OSGi模板 生成工程后,在Manifest编辑器中点击[启动框架(Launch the framework)]运行新生成的OSGi

d3 基础折现图和饼图

折线图 折现图可以使用svg折线元素polyline来定义一组相连的直线段,但是更推荐使用d3.line()和path元素组合使用,这样更加灵活. d3.line()构造一个新的线生成器,使用默认的.x和.y设置x,y访问器函数. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body&g

D3打包图的制作

ads爱上