我的编程空间,编程开发者的网络收藏夹
学习永远不晚

D3.js实现绘制折线图的教程详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

D3.js实现绘制折线图的教程详解

本章我们来实现一下折线图,有了画柱状图的经验,我们可以快速的分析出柱状图和折线图的区别主要是x轴比例尺和绘制数据图形,其余的画布,坐标轴等,本章就不过多的讲解了。

点击查看demo

x轴比例尺

根据折线图x轴的特点,可以分析出我们需要在x轴画出间隔相同的N的点,所以我们采用scalePoint

const xScale = d3.scalePoint()
    .domain(data.map((d) => d.name))
    .range([0, dimensions.boundedWidth]);

如果使用scaleBand就会是下图的效果,刻度和数据点不能对齐。

数据折线

D3提供了一些图形构造器,例如d3.line,d3.area,d3.arc,d3.pie等,本章借着折线图,我们介绍一下d3.lined3.area

d3.line

通过点位的二维数组自动生成path:

// 构建一个默认为直线的线条绘制器
const lineGenerator = d3.line();
// 定义一下点位
const points = [
    [0, 50],
    [100, 200],
    [300, 100],
    [400, 150],
    [300, 200]
];
// 生成一条path路径
const linePath = lineGenerator(points);
// 渲染line
svg.append("path")
    .attr("d", linePath)
    .attr("fill", "none")
    .attr("stroke-width", 1)
    .attr("stroke", "red");

指定x,y的取值方式

const points = [
    { x: 0, y: 50 },
    { x: 100, y: 200 },
    { x: 300, y: 100 },
    { x: 400, y: 150 },
    { x: 300, y: 200 }
];
const lineGenerator = d3
    .line()
    .x((d) => d.x)
    .y((d) => d.y);

const linePath = lineGenerator(points);

在实际开发中,我们基本上都是需要通过x轴和y轴的比例尺去计算,每个数据对应点的位置信息。

圆滑的曲线

const lineGenerator = d3
    .line()
    .x((d) => d.x)
    .y((d) => d.y)
    .curve(d3.curveBasis) // 曲线插值

D3提供了很多插值,例如:curveBasis,curveCardinal,curveCatmullRom,curveStep,curveStepBefore,curveStepAfter都可以试试效果

初步了解了d3.line,我们就可以轻松的绘制我们的折线图了:

const line = d3.line()
    .x((d) => xScale(xValue(d)))
    .y((d) => yScale(yValue(d)));

chartG.append("g")
    .append("path")
    .style("fill", "none")
    .style("stroke", "rgb(51, 209, 243)")
    .style("stroke-width", 1)
    .datum(data)
    .attr("d", line);
复制代码

这里我们使用的是datum,因为只需要一条折线,而且需要在这条折线上生成所有的数据的点位以构成path路径,如果忘了datumdata的区别,可以回顾一下DataJoin。

d3.area

除了可以绘制一条折线,我们还可以绘制一个填充的折线区域,这也是比较常见的使用场景,这就需要用到d3.area

d3.area用来设置坐标的属性有六个x,y,x0,y0,x1,y1,它们通常分为两组来使用即:x, y0, y1,y, x0, x1分别代表两个方向水平和垂直。

水平方向

const areaGenerator = d3.area()
    .x((d) => d.x)
    .y1((d) => d.y)
    .y0(10);

const areaPath = areaGenerator(points);

svg
    .append("path")
    .attr("d", areaPath)
    .attr("fill", "none")
    .attr("stroke-width", 1)
    .attr("stroke", "red");

我们打印一下areaPath

M0,50L100,200L300,100L400,150L400,10L300,10L100,10L0,10Z

翻译一下:

移动到(0,50)->绘制线到(100,200)->绘制线到(300,100)->绘制线到(400,150)

->绘制线到(400,10)->绘制线到(300,10)->绘制线到(100,10)

->绘制线到(0,10)->闭合(将起点与终点连接)

其实理解起来就像是小学的拼音连线题一样:

垂直方向

const points = [ // y 是递增的
{ x: 20, y: 50 },
{ x: 100, y: 100 },
{ x: 300, y: 150 },
{ x: 200, y: 200 },
{ x: 300, y: 230 }
];

const areaGenerator = d3.area()
    .y((d) => d.y)
    .x0(10)
    .x1((d) => d.x);

值得注意的是,水平方向的area,points的特点是按x递增的,垂直方向的area,points的特点是按y递增的。

不排序的话,你可能会得到一个意料之外的图形:

最后就可以完成我们的折线图area模式了:

const area = d3.area()
    .x((d) => xScale(xValue(d)))
    .y1((d) => yScale(yValue(d)))
    .y0(yScale(0));

chartG.append("g")
    .append("path")
    .style("fill", "none")
    .style("fill", "green")
    .style("stroke", "rgb(51, 209, 243)")
    .style("stroke-width", 1)
    .datum(data)
    .attr("d", area);

总结

不同的图表可能需要不同的比例尺,这个需要我们根据比例尺的特性和图表的特征相互对照来选择适合的比例尺。本章我们只简单介绍了linearea的一些特性,更详细的api还是需要参考官方文档,最后建议打开demo调试一下,改改数据,样式,比例尺等看看效果。

到此这篇关于D3.js实现绘制折线图的教程详解的文章就介绍到这了,更多相关D3.js绘制折线图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

D3.js实现绘制折线图的教程详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

D3.js实现绘制折线图的教程详解

这篇文章主要为大家详细介绍了如何通过D3.js实现绘制折线图,文中的示例代码讲解详细,对我们学习D3.js有一定的帮助,需要的可以参考一下
2022-11-13

D3.js实现绘制柱状图的教程详解

这篇文章主要为大家详细介绍了如何通过D3.js实现绘制柱状图,文中的示例代码讲解详细,对我们学习D3.js有一定的帮助,需要的可以参考一下
2022-11-13

D3.js实现饼图,环图,玫瑰图的绘制

这篇文章主要为大家介绍了如何利用D3.js中的d3.pie和d3.arc实现饼图、环图和玫瑰图的绘制,文中的实现方法讲解详细,感兴趣的可以尝试一下
2022-11-13

QtQChart实现折线图的绘制

QChart是常用的图表,这篇文章主要为大家详细介绍了Qt如何利用QChart实现折线图的绘制,文中的示例代码讲解详细,感兴趣的可以了解一下
2023-05-17

Android LineChart绘制折线图的示例详解

这篇文章主要为大家想想介绍了Android RecyclerLineChart实现绘制折线图的相关资料,有需要的朋友可以借鉴参考下,希望能够有所帮助
2023-03-24

WPF+ASP.NETSignalR实现动态折线图的绘制

这篇文章将以一个简单的动态折线图示例,简述如何通过ASP.NETSignalR实现后台通知功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-01-03

Qt实现绘制多个设备的流量曲线图详解

这篇文章主要为大家详细介绍了如何使用Qt开发绘制多个设备的流量曲线图,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下
2023-01-05

Python实现甘特图绘制的示例详解

相信在平常实际工作当中,需要对整体的项目做一个梳理,这时如果有一个网页应用能够对整体项目有一个可视化页面的展示,是不是会对你的实际工作有所帮助呢?今天小编就通过Python+Streamlit框架来绘制甘特图并制作可视化大屏,需要的可以参考一下
2023-05-15

编程热搜

目录