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');

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

相关推荐
anyup_前端梦工厂2 小时前
了解几个 HTML 标签属性,实现优化页面加载性能
前端·html
前端御书房2 小时前
前端PDF转图片技术调研实战指南:从踩坑到高可用方案的深度解析
前端·javascript
2301_789169542 小时前
angular中使用animation.css实现翻转展示卡片正反两面效果
前端·css·angular.js
风口上的猪20153 小时前
thingboard告警信息格式美化
java·服务器·前端
程序员黄同学3 小时前
请谈谈 Vue 中的响应式原理,如何实现?
前端·javascript·vue.js
爱编程的小庄4 小时前
web网络安全:SQL 注入攻击
前端·sql·web安全
宁波阿成4 小时前
vue3里组件的v-model:value与v-model的区别
前端·javascript·vue.js
柯腾啊5 小时前
VSCode 中使用 Snippets 设置常用代码块
开发语言·前端·javascript·ide·vscode·编辑器·代码片段
Jay丶萧邦5 小时前
el-select:有关多选,options选项值不包含绑定值的回显问题
javascript·vue.js·elementui
weixin_535854225 小时前
oppo,汤臣倍健,康冠科技,高途教育25届春招内推
c语言·前端·嵌入式硬件·硬件工程·求职招聘