D3基础图形绘制

D3基础图形绘制

在可视化数据分析的领域,D3(Data-Driven Documents)已成为一门艺术,将富有生气的数据与图形的优美结合,呈现在探索者的眼前。D3是一个JavaScript库,旨在通过使用HTML、SVG以及CSS来运用数据驱动的技术,将数据生动地展现出来。本文将引导阅读者探索D3的世界,详细介绍如何绘制几种基础图形,并借助丰富的实例,让技术之花在经典的土壤中盛开。

矩形(Rectangles)

矩形是最常见的图形之一,它们用来表示条形图、树状图和其他分块表达数据的方式。

javascript 复制代码
d3.select('svg')
  .append('rect')
  .attr('x', 10)
  .attr('y', 10)
  .attr('width', 200)
  .attr('height', 100)
  .attr('fill', 'steelblue');

在SVG画布中,以(10,10)为起始点,绘制一个宽为200高为100的矩形,并填充以钢蓝色。

圆形(Circles)

圆形通过其面积的大小来传递量度的信息,常常用在散点图和包含圆形的信息图中。

javascript 复制代码
d3.select('svg')
  .append('circle')
  .attr('cx', 50)
  .attr('cy', 50)
  .attr('r', 40)
  .attr('fill', 'tomato');

此代码段创建了一个中心位于(50,50)的圆,半径为40,并以西红柿色标记。

椭圆(Ellipses)

椭圆可以被看作是变形的圆形,其在不同的轴向上拥有不同的半径,适用于需要扭曲圆形比例的场景。

javascript 复制代码
d3.select('svg')
  .append('ellipse')
  .attr('cx', 150)
  .attr('cy', 100)
  .attr('rx', 70)
  .attr('ry', 40)
  .attr('fill', 'lavender');

以(150,100)为中心点,分别设置水平半径70和垂直半径40,填充为薰衣草紫。

线(Line)

线性图形是表达数据变化趋势的直观方式,它们连接各个数据点,展示其间的关系。

javascript 复制代码
var data = [{x: 10, y: 50}, {x: 100, y: 150}, {x: 200, y: 100}];

var lineGenerator = d3.line()
  .x(d => d.x)
  .y(d => d.y);

d3.select('svg')
  .append('path')
  .attr('d', lineGenerator(data))
  .attr('stroke', 'black')
  .attr('fill', 'none');

在此例中,三个坐标点被连接起来,形成一条折线。

折线(Polylines)

折线是由多段直线段组成的一系列连接点。

javascript 复制代码
d3.select('svg')
  .append('polyline')
  .attr('points', '20,20 40,25 60,40 80,120 120,140 200,180')
  .attr('stroke', 'gray')
  .attr('fill', 'none');

以上代码绘制了一个由特定点坐标集序列连接的折线图。

多边形(Polygons)

多边形类似折线,但其起点和终点相连,形成闭合的图形。

javascript 复制代码
d3.select('svg')
  .append('polygon')
  .attr('points', '200,10 250,190 160,210')
  .attr('stroke', 'olive')
  .attr('fill', 'cornflowerblue');

这段代码绘制了一个顶点分别位于(200,10)、(250,190)和(160,210)的三角形。

文本(Text)

在可视化中,文本用来直接传达信息或对图表的某个部分进行标注。

javascript 复制代码
d3.select('svg')
  .append('text')
  .attr('x', 10)
  .attr('y', 50)
  .text('D3 Visualization')
  .attr('fill', 'darkgreen');

该文本展示了在画布上位置为(10,50)处绘制的文字。

路径(Path)

路径元素是SVG中功能最为强大的图形,因其D属性可以定义复杂的形状和线条。

javascript 复制代码
d3.select('svg')
  .append('path')
  .attr('d', 'M10 80 Q 95 10 180 80 T 350 80')
  .attr('stroke', 'blue')
  .attr('fill', 'none');

上述代码展示了一个基于贝塞尔曲线的路径,其中M代表起点,Q定义曲线控制点,T代表反射控制点。

弧(Arcs)

弧形通常用于绘制饼图或径向计量图。

javascript 复制代码
var arcGenerator = d3.arc()
  .innerRadius(0)
  .outerRadius(100)
  .startAngle(0)
  .endAngle(Math.PI / 2);

d3.select('svg')
  .append('path')
  .attr('d', arcGenerator())
  .attr('transform', 'translate(100,100)')
  .attr('fill', 'cornflowerblue');

这段代码绘制了圆心在(100,100)的四分之一圆弧。

面积图(Area)

面积图在折线图基础上,通过填充线条下方的区域,赋予图表更强的视觉重量。

javascript 复制代码
var areaGenerator = d3.area()
  .x(d => d.x)
  .y0(200)
  .y1(d => d.y);

var data = [{x: 10, y: 50}, {x: 50, y: 150}, {x: 90, y: 100}, {x: 140, y: 210}];

d3.select('svg')
  .append('path')
  .attr('d', areaGenerator(data))
  .attr('fill', 'lightskyblue');

通过面积生成器定义上下沿的路径并绘制,创建了一种充满动感又不失统计严谨性的面积图。

相关推荐
Json____5 分钟前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
迂 幵14 分钟前
vue el-table 超出隐藏移入弹窗显示
javascript·vue.js·elementui
上趣工作室18 分钟前
vue2在el-dialog打开的时候使该el-dialog中的某个输入框获得焦点方法总结
前端·javascript·vue.js
家里有只小肥猫18 分钟前
el-tree 父节点隐藏
前端·javascript·vue.js
fkalis20 分钟前
【海外SRC漏洞挖掘】谷歌语法发现XSS+Waf Bypass
前端·xss
zxg_神说要有光1 小时前
自由职业第二年,我忘记了为什么出发
前端·javascript·程序员
陈随易1 小时前
农村程序员-关于小孩教育的思考
前端·后端·程序员
云深时现月1 小时前
jenkins使用cli发行uni-app到h5
前端·uni-app·jenkins
昨天今天明天好多天1 小时前
【Node.js]
前端·node.js
亿牛云爬虫专家2 小时前
Puppeteer教程:使用CSS选择器点击和爬取动态数据
javascript·css·爬虫·爬虫代理·puppeteer·代理ip