生成图标需要有四个步骤

1生成图片容器

2设置比例尺

3生成数据图表

4生成坐标系

在展示图表时一般要有个容器,我们可以使用.container 类,同时制定宽高。如下:

可以加个样式

#container{

width:600px;

height:400px;

background:#ccc;

}

引入d3.min.js文件

var width=600,height=400 //设置svg的宽和高

var margin={top:30,right:30,bottom:30,left:30}//设置图表距离svg元素的距离

var g_width= width - margin.left-margin.right //g元素(图表的宽度)

var g_height= height - margin.top - margin.bottom //g 元素的高

//设置svg元素用来放在整个图表

var svg = d3.select("#container").

.append("svg")

.attr({

width:width,

height:height

})

//设置一个g元素用来放置整个图表,并设置位移(设置这个的目的为了能让坐标系显示出来),g元素是不能有宽高属性的,里面的子元素什么样子,g元素就是什么样子。

var g = svg.append("g")

.attr("transform","translate("+margin.left+","+margin.top+")")

//以上代码都是公用的,下面就以几个图表为例讲解

折线图

//要展示的数据(学生6次的数学成绩)

var dataset=[

{

month:'1月',

j:60

},

{

month:'2月',

j:70

},

{

month:'3月',

j:73

},

{

month:'4月',

j:54

},

{

month:'5月',

j:69

},

{

month:'6月',

j:74

}

]

//设置x轴比例尺(序数比例尺)

var scaleX=d3.scaleBand()

.domain(dataset.map((item)=>{

return item.month

})).rangeRound([0,g_width])

//设置y轴比例尺(线性比例尺)

var scaleY=d3.scaleLinear()

.domain([0,100])

.range([g_height,0])

//路径生成器(画图)

var line_gen=d3.line()

.x(function(data,index){

return scaleX(data.month)+scaleX.bandwidth()/2

}).y(function(data,index){

return scaleY(data.j)

})

g.append("path").attr("d",line_gen(dataset))

//生成坐标轴

var axisX=d3.axisBottom().scale(scaleX);

var axisY=d3.axisLeft().scale(scaleY);

g.append("g").call(axisX).attr("transform","translate(0,"+g_height+")")

g.append("g").call(axisY)

柱状图

//柱状图的宽度

var bar_width=50

//设置x轴比例尺(序数比例尺)

var scaleX=d3.scaleBand()

.domain(dataset.map((item)=>{

return item.month

})).rangeRound([0,g_width])

//设置y轴比例尺(线性比例尺)

var scaleY=d3.scaleLinear()

.domain([0,100])

.range([g_height,0])

//生成柱状图

//设置每个柱状图的画的位置

var bar_g=g.selectAll("g")

.data(dataset)

.enter()

.append("g")

.attr("transform",function(data,index){

let bandwidth=scaleX.bandwidth()

let x=index*bandwidth+bandwidth/2-bar_width/2

let y=scaleY(data.j)

return 'translate('+x+','+y+')'

})

//画对应的柱状图

bar_g.append("rect")

.attr("width",bar_width)

.attr("height",function(data){

return scaleY(100-data.j)

}).attr("fill","blue")

bar_g.append("text").text(function(data){

return data.j

}).attr("x",function(data){

return bar_width/2

})

//生成坐标轴

var axisX=d3.axisBottom().scale(scaleX);

var axisY=d3.axisLeft().scale(scaleY);

g.append("g").call(axisX).attr("transform","translate(0,"+g_height+")")

g.append("g").call(axisY)

面积图

var scaleX=d3.scaleBand()

.domain(dataset.map((item)=>{

return item.month

})).rangeRound([0,g_width])

//设置y轴比例尺(线性比例尺)

var scaleY=d3.scaleLinear()

.domain([0,100])

.range([g_height,0])

//区域生成器

var area_gen=d3.area()

.x(function(data,i){

return scaleX(data.month)

}).y(function(data){

return scaleY(data.j)

})

.y0(g_height)

.y1(function(data){

return scaleY(data.j)

})

g.append("path").attr("d",area_gen(dataset))

.style("fill","blue")

//生成坐标轴

var axisX=d3.axisBottom().scale(scaleX);

var axisY=d3.axisLeft().scale(scaleY);

g.append("g").call(axisX).attr("transform","translate(0,"+g_height+")")

g.append("g").call(axisY)

饼状图

//圆弧生成器

let arc=d3.arc()

.innerRadius(100)

.outerRadius(200)

//饼状角度生成器

var angle=d3.pie().value(function(d){ return d.j})

//颜色生成器

var color=d3.schemeCategory10

//生成饼状图

g.selectAll("path")

.data(angle(data))

.enter()

.append("path")

.attr("d",arc).attr("fill",function(data,i){

return color[i]

})

//添加文字

g.selectAll("text")

.data(angle(data))

.enter()

.append("text")

.text(function(item){

return item.data

}).attr("transform",function(d){

return "translate("+arc.centroid(d)+")"

})

d3设置line长度_使用d3画一些基本的图形相关推荐

  1. d3设置line长度_万物皆可Embedding之LINE算法解读

    需要论文的朋友可以后台私信我获取 前言 上一篇文章给大家带来了Graph Embedding技术中的代表算法Deepwalk,今天给大家介绍graph embedding又一代表算法--LINE,LI ...

  2. d3设置line长度_1.7 SVG/D3中字体特殊设置

    #### 1.添加上下标 SVG或D3中,有时需要实现如下的效果:10^23,或需要下标,使用`baseline-shift`属性即可实现. `baseline-shift`属性有两个值: * sub ...

  3. d3设置line长度_Graph Embedding之LINE算法解读

    需要论文的朋友可以后台私信我获取 前言 上一篇文章给大家带来了Graph Embedding技术中的代表算法Deepwalk,今天给大家介绍graph embedding又一代表算法--LINE,LI ...

  4. 设置固定长度_厂房及仓库常规消防系统设置!

    防火于未燃 依爱保平安 点击上方"依爱消防"即可订阅 厂房 一 室内外消火栓系统 1. 室外消火栓 1)厂房周围应设室外消火栓. 2)耐火等级不低于二级且建筑体积不大于3000m³ ...

  5. 设置固定长度_加气块砌筑(构造柱、圈梁设置)技术交底21条

    墙体砌筑技术交底我给下发21条,内容不全,砌筑的墙体观感差,欢迎大家提出宝贵意见 1.填充墙的材料.平面位置尺寸见建筑施工图纸,不得随意更改. 2.当首层填充墙下无基础梁或结构梁板时,墙下应做基础,基 ...

  6. mysql设置索引长度_修改Mysql索引长度限制

    mysql 索引过长1071-max key length is 767 byte 问题 create table: Specified key was too long; max key lengt ...

  7. visio设置图片默认大小_教大家Visio怎么随意调节图形的大小

    近日有关于教大家Visio怎么随意调节图形的大小的问题受到了很多网友们的关注,大多数网友都想要知道教大家Visio怎么随意调节图形的大小的具体情况,那么关于到教大家Visio怎么随意调节图形的大小的相 ...

  8. d3js绘制y坐标轴_使用D3.js 绘制折线图

    在一个网站上绘制折线图使用了ant/g2,打包后的体积到了一兆多,这不行了,需要按需加载.但是它的支持不太友好,我尝试在官网上用它的方法来按需引入,不是缺这就是缺那,很不好用. 反正我这里只是画个折线 ...

  9. 【d3.js实践教程01】d3基本操作

    学习d3.js(以下都简称d3)也有一段时间了,运行d3做了几个项目.我发现中文的d3教程很少,国外资料多但要求有一定的英文阅读能力(推荐网址:http://bl.ocks.org/mbostock) ...

最新文章

  1. C++编程语言之标准化
  2. 第二章 Java浮点数精确计算
  3. Mac终端文件类型显示不同颜色
  4. Java方法重载注意事项
  5. html5show()函数怎么写,实例:用JavaScript来操作字符串(一些字符串函数)_基础知识...
  6. HP ProLiant DL380 G6内存错误导致WHEA-Logger 47报警的解决
  7. java分页查询代码实现
  8. Java proxy 代理
  9. 超赞的8款开源聊天软件
  10. MCU之芯唐ARM9(转)
  11. 大数据的75个名词解释
  12. HDU4415 Assassin’s Creed
  13. 我开发了一款软件,完成了舔狗的绝地反杀(代码开源)!
  14. Revit二次开发入门捷径_升维学习、降维打击
  15. 计算机辅助出版的英文缩写是,计算机辅助设计的英文缩写为
  16. 【PyTorch】50行代码实现GAN——PyTorch
  17. 知乎不能改用户名吗_不知道不能随便改名字吗
  18. PADS画2.54mm排针
  19. 友推微信分享失败解决办法
  20. EBGP使用环回口建邻居用到ebgp-multihop和update source loopback

热门文章

  1. classname帝国怎么用php调用,帝国cms怎么调用栏目别名
  2. 资源高效搜索方法,你 Get 到了吗?
  3. R语言I绘制等高线图
  4. Sciences:Knight组发表尸体降解过程中的微生物组
  5. Cell子刊:16s分析之FishTaco分析
  6. R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
  7. R语言ggplot2可视化为组合图添加综合图例实战:使用ggpubr包ggarrange函数实现综合图例、使用patchwork包实现综合图例
  8. R语言单因素重复测量方差分析(one-way repeated measures ANOVA)实战
  9. R语言nchar函数统计字符串中字符个数实战
  10. R语言基于glmnet构建分类模型并可视化特征系数(coefficient)以及L1正则化系数(lambda)实战