如何使用chatGPT辅助开发复杂D3图表

如何使用chatGPT辅助开发一个复杂的D3图表

首先简单介绍一下实现的表单。

在线地址:https://2guliang.top/temperature/timeChat

引言

什么是 D3

D3 (Data-Driven Documents) 是一个基于数据驱动的 JavaScript 库,用于创建可交互的数据可视化图表。D3 可以帮助我们将数据转换为有意义的图形,并且可以与用户交互和动态更新。D3 可以用于创建各种类型的图表,包括折线图、柱状图、散点图、地图等。

基本用法

D3 的核心是选择集 (Selection) 和数据绑定 (Data Binding)。选择集是指选中文档中的元素,数据绑定是指将数据与元素进行关联。D3 可以通过选择集和数据绑定来对元素进行添加、删除、更新等操作,从而实现交互式的数据可视化。

以下是一个简单的 D3 代码示例,用于创建一个带有坐标轴的折线图:

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>折线图</title><script src="https://d3js.org/d3.v6.min.js"></script></head><body><button id="update">更新</button><svg width="800" height="400"></svg><script>// 定义数据var data = [{ date: '2022-01-01', value: 10 },{ date: '2022-02-01', value: 20 },{ date: '2022-03-01', value: 15 },{ date: '2022-04-01', value: 25 },{ date: '2022-05-01', value: 18 },{ date: '2022-06-01', value: 30 },{ date: '2022-07-01', value: 22 },{ date: '2022-08-01', value: 35 },{ date: '2022-09-01', value: 27 },{ date: '2022-10-01', value: 40 },{ date: '2022-11-01', value: 32 },{ date: '2022-12-01', value: 45 },]// 创建 SVG 画布var svg = d3.select('svg'),margin = { top: 20, right: 20, bottom: 30, left: 50 },width = +svg.attr('width') - margin.left - margin.right,height = +svg.attr('height') - margin.top - margin.bottom,g = svg.append('g').attr('transform','translate(' + margin.left + ',' + margin.top + ')')// 定义 x 轴比例尺var x = d3.scaleTime().rangeRound([0, width])// 定义 y 轴比例尺var y = d3.scaleLinear().rangeRound([height, 0])// 定义时间格式化函数const timeFormat = function name(d) {return d3.timeFormat('%m-%d')(d)}// 定义 x 轴var xAxis = d3.axisBottom(x).tickFormat(timeFormat)// 定义 y 轴var yAxis = d3.axisLeft(y)// 定义线条生成器var line = d3.line().x(function (d) {return x(new Date(d.date))}).y(function (d) {return y(d.value)})// 加载数据x.domain(d3.extent(data, function (d) {return new Date(d.date)}))y.domain([0,d3.max(data, function (d) {return d.value}),])// 添加 x 轴g.append('g').attr('transform', 'translate(0,' + height + ')').call(xAxis).attr('class', 'axis')// 添加 y 轴g.append('g').call(yAxis).append('text')// 添加折线g.append('path').datum(data).attr('class', 'line').attr('fill', 'none').attr('stroke', 'green').attr('stroke-width', 1.5).attr('d', line)// 添加y轴刻度指示g.append('g').attr('class', 'grid').call(d3.axisLeft(y).tickSize(-width).tickFormat('').ticks(5))// 添加标题svg.append('text').attr('x', (width + margin.left + margin.right) / 2).attr('y', margin.top).attr('text-anchor', 'middle').style('font-size', '20px').text('折线图')var zoom = d3.zoom().scaleExtent([1, 4]).translateExtent([[0, 0],[width, height],]).extent([[0, 0],[width, height],]).on('zoom', zoomed)// 将缩放行为应用于SVG画布svg.call(zoom)function zoomed(event) {// 获取缩放比例var transform = event.transform// 更新 x 轴var newX = transform.rescaleX(x)g.select('.axis').call(xAxis.scale(newX))// 更新折线和折线数据点的位置g.select('.line').attr('d',line.x(function (d) {return newX(new Date(d.date))}))g.selectAll('.dot').attr('cx', function (d) {return newX(new Date(d.date))})}document.getElementById('update').addEventListener('click', update)function update() {// 添加新数据data.push({ date: '2023-03-21', value: 15 })// 更新 x 坐标轴比例尺x.domain(d3.extent(data, function (d) {return new Date(d.date)}))g.select('.axis').call(xAxis.scale(x))// 更新折线图svg.select('.line').datum(data).transition().duration(750).attr('d', line)}</script></body>
</html>

在这个示例中,我们使用 D3 创建了一个 SVG 元素,并在其中绘制了一个带有 x, y 坐标轴的可缩放的折线图。我们使用 d3.scaleTime()**d3.scaleLinear**
方法创建了 x, y 坐标轴的比例尺,并使用 d3.axisBottom()
d3.axisLeft() 方法创建了 x, y 坐标轴,并使用 d3.select()d3.append() 方法将坐标轴添加到 SVG 中。我们还使用 d3.line() 方法创建了一条折线,并将其添加到 SVG 中。

在这里插入图片描述

如何实现动态更新

D3 可以根据数据的变化来动态更新图表,例如添加新数据、删除数据、更新数据等。以下是一个例子,展示了如何动态添加数据并更新折线图:

// 添加新数据
data.push({ date: '2023-03-21', value: 15 })// 更新 x 坐标轴比例尺
x.domain(d3.extent(data, function (d) {return new Date(d.date)})
)
g.select('.axis').call(xAxis.scale(x))
// 更新折线图
svg.select('.line').datum(data).transition().duration(750).attr('d', line)

在这个例子中,我们首先添加了一个新的数据点,然后更新了 x 坐标轴的比例尺,最后使用 d3.select() 方法选择之前绘制的折线图,并使用 datum() 方法将数据与之关联,然后更新其路径属性 d
在这里插入图片描述

需求介绍

患者时间轴
在这里插入图片描述

主要功能有

  • 可伸缩时间轴
  • tooltip展示
  • 点图和折线图的展示
  • 图表可通过api进行放大缩小
  • 图表数据的更新
  • 边界情况处理如:label文字自适应换行、X轴时间文字自适应等

chatGPT功能开发

ChatGPT 在开发 D3 数据可视化应用时,可以提供快速、准确、智能的代码提示和建议,帮助开发者快速完成开发任务。以下是 ChatGPT 在开发 D3 数据可视化应用中的一些优势:

  1. 智能代码提示:ChatGPT 可以根据开发者的输入内容自动提示代码,大大提高开发效率。
  2. 快速问题解答:ChatGPT 可以快速响应开发者的问题,提供准确的答案,帮助开发者解决问题。
  3. 可视化支持:ChatGPT 可以根据开发者的输入内容自动生成图表和数据展示,帮助开发者快速了解数据结构和可视化方式。

这是

智能代码提示

框架的文档繁多,作为开发人员不可能记得所有的 api 接口和功能实现。 此时可以直接用人类语言询问 chatGPT , 让它给对对应的 api 说明。如下:

  1. D3中折线图 数据可能会超出Y轴指定的domain,可以给d3.line()指定一个最大值最小值吗

在这里插入图片描述

  1. 知道x轴坐标,想反推出输入 xScale 的值的api是什么

在这里插入图片描述

快速问题解答

以实际功能举例,在 lable 文字展示过程中,超长文字会遮盖图表,造成展示不美观,如何做到文字自适应换行呢?

在这里插入图片描述

在 svg 中,无法像 CSS 一样,指定容器宽度,使得文本超出自动换行,text会根据 x、y点坐标一直向下绘制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RIfWBSNY-1677462843681)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3063a6e4-d682-4d1c-a3cb-12d967594ada/Untitled.png)]

D3怎么控制多行文本超出自动换行,并且使得换行文本可以垂直居中展示?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AT5INAa6-1677462843682)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/105aa6c5-b395-4536-b309-27b34ba59f98/Untitled.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NuSwh9CZ-1677462843682)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/89637d6e-bb88-4c89-94f4-fd2d6dca6d13/Untitled.png)]

最终在 chatGPT 的参考下,换行代码如下

/*** 定义wrap函数,用于将文本自动换行* @param {svg select} text*/
function wrap(text) {text.each(function () {var text = d3.select(this)var words = text.text().split('').reverse()var lineHeight = 16var width = parseFloat(text.attr('width'))var y = parseFloat(text.attr('y'))var x = text.attr('x')var anchor = text.attr('text-anchor')var tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('text-anchor', anchor)var lineNumber = 0var line = []var word = words.pop()while (word) {line.push(word)tspan.text(line.join(''))if (tspan.node().getComputedTextLength() > width) {lineNumber += 1line.pop()tspan.text(line.join(''))line = [word]tspan = text.append('tspan').attr('x', x).attr('y', y + lineNumber * lineHeight).attr('anchor', anchor).text(word)}word = words.pop()}if (lineNumber) {d3.select(this).attr('transform','translate(0,' + (-lineNumber * lineHeight) / 2 + ')')}})
}

chatGPT给出的回答思路正确,只是一些细节,比如 join(’’) ,split(/\s+/) 有误,稍微修改即可使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5324.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在代码开发中便捷使用 ChatGPT 协助开发

在五一节前后&#xff0c;抽空测试了下网上推荐的开发环境和开发插件&#xff0c;在这里推荐给前后端代码开发的同胞们。 方法一&#xff1a;IDEA 安装 插件 bito 习惯使用 IDEA 开发代码的同胞&#xff0c;可以尝试直接在 IDEA 中安装插件 bito&#xff0c;注意操作过程中需要…

ChatGPT 嵌入开发

为了提高问答「准确率」,有两个优化方向 1、增加训练集数据 2、增加提问上下文语料,答案就在其中 OpenAI 是不允许用户来训练数据的,他的 model 是固定且通用的。所以增加训练集数据并不可行。 使用chatgpt 嵌入,让chatgpt根据语料内容回答。 实际应用,产品客服、产品…

ChatGPT Plugin 开发流程图

有关如何设置、开发和部署 ChatGPT 检索插件的详细信息请参照 https://github.com/openai/chatgpt-retrieval-plugin

如何用ChatGPT使开发效率提高50%以上?

简介 ChatGPT是一个大型语言模型&#xff0c;由OpenAI开发。它被训练用于进行对话式交互&#xff0c;能够理解和生成自然语言文本。ChatGPT可以用于多种任务和场景&#xff0c;包括但不限于&#xff1a;智能助手、创意生成、语言学习、编程辅助等。ChatGPT的优势在于它的广泛知…

ChatGPT 插件系统,正式上线!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 自 ChatGPT 诞生以来&#xff0c;技术圈内有不少开发者基于它的功能实现了不少优秀的产品&#xff0c;现如今在 GitHub 上新增的 ChatGPT 项目更是多不胜数。 为了能够更加灵活的扩展 Chat…

【最新整理】一起看看86 个 ChatGPT 插件

今天我们来看看这86个插件都是做什么的&#xff1f; Shimmer&#xff1a;跟踪膳食并获得更健康生活方式的见解 World News&#xff1a;总结新闻头条 Bohita&#xff1a;用您能描述的任何图像制作服装 Portfolio Pilot&#xff1a;您的 AI 投资指南&#xff1a;投资组合评估…

ChatGPT写的C++学习路线是怎样的

ChatGPT写的C学习路线是怎样的 图片版 文字版 请为我写一条C全栈学习路线&#xff0c;有以下要求&#xff1a; 1、搜索了以下所有要求的相关资料后再做回答&#xff0c;注意逻辑 2、20000字以上&#xff0c;如果没有说完&#xff0c;自己继续 3、求职路线适用于刚进入职场一年…

如何利用ChatGPT-4完成一篇爆款引流文章

ChatGPT4已经来了&#xff0c;今天小编就带大家学习学习&#xff0c;如何利用ChatGPT4完成一篇爆款引流的文章&#xff1b;本文将详细介绍如何使用先进的人工智能语言模型ChatGPT-4来撰写一篇爆款流量文章。我们将探讨选择合适的主题、关键词和结构&#xff0c;以及如何运用Cha…

ChatGPT专业应用:基于关键词撰写原创文章

正文共 485 字&#xff0c;阅读大约需要 2 分钟 内容运营/SEO投放必备技巧&#xff0c;您将在2分钟后获得以下超能力&#xff1a; 基于关键词撰写原创文章 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 …

ChatGPT专业应用:自动撰写SEO文章

正文共 388 字&#xff0c;阅读大约需要 2 分钟 市场运营/SEO投放必备技巧&#xff0c;您将在2分钟后获得以下超能力&#xff1a; 快速生成SEO文章 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | 菜菜子 编辑者 | 奈奈…

ChatGPT批量生成文章软件:创意无限,助力高效创作

随着人工智能技术的不断发展&#xff0c;ChatGPT批量生成文章软件成为了一种强大的创作工具。这款软件以其无限创意和高效助力&#xff0c;极大地提升了文章创作的效率。在本文中&#xff0c;我们将从多个方面详细阐述ChatGPT软件的特点和优势。 一、智能创作能力 ChatGPT软件…

chatgpt赋能python:Python中如何对文本进行修改

Python中如何对文本进行修改 在Python编程中&#xff0c;涉及到文本操作的场合并不少见。我们可能需要读取文件、解析HTML网页、处理字符串等等。而在对文本进行操作的过程中&#xff0c;修改文本是非常常见的需求。本文将介绍Python中对文本进行修改的几种基本方法。 1. 字符…

ChatGPT 大规模封号,并停止注册!

责编 | 王子彧 出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09; 4 月 2 日&#xff0c;大量用会反馈 ChatGPT 账号被封&#xff0c;其中亚洲地区成为重灾区。据相关统计&#xff0c;已有数百万用户的账号受到了影响。 一时间&#xff0c;各种关于 ChatGPT 的…

ChatGPT告诉你:想在领英开发国外客户,可以使用哪些工具?

提问&#xff1a;想在领英开发国外客户&#xff0c;可以使用哪些工具&#xff1f; ChatGPT&#xff1a;如果你想在领英上开发国外客户&#xff0c;可以使用以下几种工具&#xff1a; 1.领英助理&#xff1a;领英助理是一款基于人工智能技术的工具&#xff0c;可以帮助用户自动…

首个开源低成本复现 ChatGPT 完整流程!1.62GB显存即可体验,单机训练提速7.73倍...

来源&#xff1a;机器之心 编辑&#xff1a;机器之心编辑部 火爆全网的 ChatGPT&#xff0c;仿佛开启了第四次工业革命&#xff0c;让微软、谷歌等全球科技巨头打得昏天黑 火爆全网的 ChatGPT&#xff0c;仿佛开启了第四次工业革命&#xff0c;让微软、谷歌等全球科技巨头打得…

AI:DeepSpeed Chat(一款帮用户训练自己模型的工具且简单/低成本/快 RLHF 训练类ChatGPT高质量大模型)的简介、安装、使用方法之详细攻略

AI&#xff1a;DeepSpeed Chat(一款帮用户训练自己模型的工具且简单/低成本/快 RLHF 训练类ChatGPT高质量大模型)的简介、安装、使用方法之详细攻略 目录 DeepSpeed Chat的简介 DeepSpeed-Chat的产生背景 DeepSpeed-Chat的简介 DeepSpeed-Chat的三大功能 DeepSpeed-RLHF 系…

花30分钟,我用ChatGPT写了一篇2000字文章(内附实操过程)

有了ChatGPT之后&#xff0c;于我来说&#xff0c;有两个十分明显的变化&#xff1a; 1. 人变的更懒 因为生活、工作中遇到大大小小的事情&#xff0c;都可以直接找ChatGPT来寻求答案。 2. 工作产出量更大 之前花一天&#xff0c;甚至更久才能写一篇原创内容&#xff0c;现…

ChatGPT写出高质量文章的技巧

如何让ChatGPT写出高质量的文章&#xff0c;今天给大家分享一些ChatGPT写推广文章的技巧。如果我们是一名互联网文章作者&#xff0c;那么对于产品推广的需求就是不可避免的了。下面我会分享一些我个人的写作经验&#xff0c;希望能对我们们有所帮助。 ChatGPT不同于其他ai文章…

【JavaScript学习笔记】用 JavaScript 开发企业微信 ChatGPT 应用

用 JavaScript 开发企业微信 ChatGPT 应用 本文将帮助你快速实现一个企业微信聊天应用&#xff0c;并且接入 ChatGPT。&#xff08;以下为效果截图&#xff09; 你将学会 创建企业微信应用&#xff0c;如何配置接收消息 URL、企业可信 IP、解密消息使用 AirCode 的「Get a co…

用 JavaScript,五分钟将 Siri 接入 ChatGPT(搬运)

Siri ChatGPT 使用教程 将 Siri 接入 ChatGPT&#xff0c;直接语音唤醒&#xff0c;并且支持连续对话。 第一步&#xff1a;拷贝项目 通过 AirCode 源码链接中右上角的「Get a copy」按钮快速生成一个自己的 AirCode Node.js 应用。 注意不要直接复制代码&#xff0c;如果是直…