JavaScript 可视化案例 D3.js Chart.js 使用教程 图表实现 柱状图 饼状图 条形图 折现图等

news/2024/10/4 3:51:31/

JavaScript 可视化通常用于将数据以图形方式展示,以下是使用D3.js 和 Chart.js 这两种常用库进行可视化的案例。

案例一:使用 D3.js 实现条形图

1. 引入 D3.js

首先,需要在 HTML 中引入 D3.js:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>D3.js Bar Chart</title><script src="https://d3js.org/d3.v6.min.js"></script><style>.bar {fill: steelblue;}.bar:hover {fill: orange;}.axis-label {font-size: 14px;}</style>
</head>
<body><svg width="600" height="400"></svg><script>// 数据const data = [30, 80, 45, 60, 20, 90, 50];// 设置 SVG 容器的宽高const width = 600;const height = 400;// 选择 SVG 容器const svg = d3.select("svg").attr("width", width).attr("height", height);// 设置 X 和 Y 轴的比例尺const xScale = d3.scaleBand().domain(data.map((d, i) => i)).range([0, width]).padding(0.1);const yScale = d3.scaleLinear().domain([0, d3.max(data)]).range([height, 0]);// 绘制条形图svg.selectAll(".bar").data(data).enter().append("rect").attr("class", "bar").attr("x", (d, i) => xScale(i)).attr("y", d => yScale(d)).attr("width", xScale.bandwidth()).attr("height", d => height - yScale(d));// 添加 X 轴svg.append("g").attr("transform", `translate(0,${height})`).call(d3.axisBottom(xScale).tickFormat(i => i + 1));// 添加 Y 轴svg.append("g").call(d3.axisLeft(yScale));</script>
</body>
</html>

2. 代码说明:

使用 d3.select 选择 SVG 元素,并设置其宽高。
通过 d3.scaleBand() 和 d3.scaleLinear() 分别创建 X 和 Y 轴的比例尺,确定条形图的宽度和高度。
使用 svg.selectAll 选择并绘制条形图的矩形元素。
通过 d3.axisBottom 和 d3.axisLeft 创建并绘制 X 和 Y 轴。

3. 运行结果:

运行该代码后,你会看到一个简单的条形图,每个条形代表数据数组中的一个数值。

在这里插入图片描述

案例二:使用 Chart.js 实现折线图

1. 引入 Chart.js

首先,在 HTML 中引入 Chart.js:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Chart.js Line Chart</title><script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body><div style="width:400px;height:200px"><canvas id="myChart" width="400" height="200"></canvas></div><script>const ctx = document.getElementById('myChart').getContext('2d');// 数据集const data = {labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],datasets: [{label: 'Monthly Sales',data: [65, 59, 80, 81, 56, 55, 40],borderColor: 'rgba(75, 192, 192, 1)',borderWidth: 2,fill: false,tension: 0.1}]};// 配置选项const config = {type: 'line',data: data,options: {responsive: true,scales: {x: {title: {display: true,text: 'Months'}},y: {beginAtZero: true,title: {display: true,text: 'Sales (in USD)'}}}}};// 创建图表const myChart = new Chart(ctx, config);</script>
</body>
</html>

2. 代码说明:

使用 Chart 类创建图表,类型为 'line'(折线图)。
labels 定义 X 轴的月份标签,datasets 定义 Y 轴上的数值数据。
borderColor 设置折线颜色,tension 决定折线的弯曲度(0 为直线)。
options 对象中,scales 用于设置 X 和 Y 轴的属性。

3、效果

在这里插入图片描述

案例三:使用 D3.js 实现饼图

1. D3.js 饼图代码示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>D3.js Pie Chart</title><script src="https://d3js.org/d3.v6.min.js"></script><style>.slice {stroke: #fff;}</style>
</head>
<body><svg width="400" height="400"></svg><script>// 设置数据const data = [10, 20, 30, 40];// 设置 SVG 尺寸const width = 400;const height = 400;const radius = Math.min(width, height) / 2;// 选择 SVG 容器const svg = d3.select("svg").attr("width", width).attr("height", height).append("g").attr("transform", `translate(${width / 2}, ${height / 2})`);// 定义颜色比例尺const color = d3.scaleOrdinal().domain(data).range(d3.schemeCategory10);// 创建饼图布局const pie = d3.pie();// 创建弧生成器const arc = d3.arc().innerRadius(0).outerRadius(radius);// 将数据绑定到路径元素并绘制饼图svg.selectAll('path').data(pie(data)).enter().append('path').attr('d', arc).attr('fill', d => color(d.data)).attr('class', 'slice');</script>
</body>
</html>

2. 代码说明:

d3.pie() 将数据转换为饼图所需的角度。
d3.arc() 定义了弧形的半径,用于绘制每个数据的切片。
d3.scaleOrdinal() 使用颜色比例尺来为不同的数据分段应用颜色。
使用 svg.selectAll('path') 绘制饼图切片。

3. 运行效果:

在这里插入图片描述

案例四:使用 Chart.js 实现柱状图

1. Chart.js 柱状图代码示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Chart.js Bar Chart</title><script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body><canvas id="barChart" width="400" height="200"></canvas><script>const ctx = document.getElementById('barChart').getContext('2d');// 数据集const data = {labels: ['Q1', 'Q2', 'Q3', 'Q4'],datasets: [{label: 'Sales in USD',data: [12000, 15000, 8000, 18000],backgroundColor: ['rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)','rgba(75, 192, 192, 0.2)'],borderColor: ['rgba(255, 99, 132, 1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)','rgba(75, 192, 192, 1)'],borderWidth: 1}]};// 配置选项const config = {type: 'bar',data: data,options: {scales: {y: {beginAtZero: true}}}};// 创建图表const barChart = new Chart(ctx, config);</script>
</body>
</html>

2. 代码说明:

这里创建的是一个简单的柱状图,每个季度的销售额用不同颜色的柱状表示。
backgroundColor 和 borderColor 定义了柱状图每个柱体的颜色。
options 中定义了 Y 轴从零开始显示。

3. 运行效果:

在这里插入图片描述

案例五:使用 D3.js 实现散点图

1. D3.js 散点图代码示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>D3.js Scatter Plot</title><script src="https://d3js.org/d3.v6.min.js"></script>
</head>
<body><svg width="600" height="400"></svg><script>// 数据const data = [{x: 30, y: 20},{x: 50, y: 80},{x: 90, y: 50},{x: 120, y: 120},{x: 150, y: 90},{x: 200, y: 150}];// 设置 SVG 尺寸const width = 600;const height = 400;// 选择 SVG 容器const svg = d3.select("svg").attr("width", width).attr("height", height);// 设置 X 和 Y 轴的比例尺const xScale = d3.scaleLinear().domain([0, d3.max(data, d => d.x)]).range([0, width]);const yScale = d3.scaleLinear().domain([0, d3.max(data, d => d.y)]).range([height, 0]);// 绘制散点svg.selectAll("circle").data(data).enter().append("circle").attr("cx", d => xScale(d.x)).attr("cy", d => yScale(d.y)).attr("r", 5).attr("fill", "steelblue");// 添加 X 轴svg.append("g").attr("transform", `translate(0,${height})`).call(d3.axisBottom(xScale));// 添加 Y 轴svg.append("g").call(d3.axisLeft(yScale));</script>
</body>
</html>

2. 代码说明:

d3.scaleLinear() 用于将数据点映射到 SVG 坐标系中。
使用 svg.selectAll("circle") 绘制散点图中的每个点,并设置其 x 和 y 坐标。

3. 运行效果:

在这里插入图片描述

案例六:使用 Chart.js 实现饼图

1. Chart.js 饼图代码示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Chart.js Pie Chart</title><script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body><canvas id="pieChart" width="400" height="200"></canvas><script>const ctx = document.getElementById('pieChart').getContext('2d');// 数据集const data = {labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple'],datasets: [{label: 'Colors',data: [12, 19, 3, 5, 2],backgroundColor: ['rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)','rgba(75, 192, 192, 0.2)','rgba(153, 102, 255, 0.2)'],borderColor: ['rgba(255, 99, 132, 1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)','rgba(75, 192, 192, 1)','rgba(153, 102, 255, 1)'],borderWidth: 1}]};// 配置选项const config = {type: 'pie',data: data};// 创建图表const pieChart = new Chart(ctx, config);</script>
</body>
</html>

2. 代码说明:

创建一个简单的饼图,每个颜色表示不同的部分。
backgroundColor 设置了不同部分的颜色。

3. 运行效果:

在这里插入图片描述


http://www.ppmy.cn/news/1533450.html

相关文章

【CKA】五、网络策略–NetworkPolicy

5、配置网络策略–NetworkPolicy 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 1、根据题目分析要创建怎样的网络策略 2、按题目要求查看ns corp-net的label 3、编写yaml&#xff0c;其中注意 namespace、label、port 3. 官网地址&#xff1a; https://kubernetes.io/…

经典文献阅读之--WiROS(用于机器人的WiFi感知工具箱)

0. 简介 近期的许多研究探索了使用基于WiFi的感知技术来改善SLAM&#xff08;同时定位与地图构建&#xff09;、机器人操控或探索。此外&#xff0c;WiFi的广泛可用性使其成为最具优势的射频信号。但WiFi传感器缺乏一个准确、易处理、多功能的工具箱&#xff0c;这限制了它们与…

使用Chrome浏览器时打开网页如何禁用缓存

缓存是浏览器用于临时存储网页资源的一种机制&#xff0c;可以提高网页加载速度和减轻服务器负载。 然而&#xff0c;有时候我们需要阻止缓存中的Chrome浏览器&#xff0c;以便获取最新的网页内容。以下是一些方法可以实现这个目标&#xff1a; 1、强制刷新页面&#xff1a;在C…

深度学习·Argparse

Argparse 命令行选项、参数和子命令解析器 ArgumentParser 命令行传参数->解析参数->获得对应参数 初始化&#xff1a;parser argparse.ArgumentParser(descriptionxxx)添加命令行参数&#xff1a; parser.add_argument("--training_filepath", typestr, he…

无源码实现免登录功能

因项目要求需要对一个没有源代码的老旧系统实现免登录功能&#xff0c;系统采用前后端分离的方式部署&#xff0c;登录时前端调用后台的认证接口&#xff0c;认证接口返回token信息&#xff0c;然后将token以json的方式存储到cookie中&#xff0c;格式如下&#xff1a; 这里有…

通达信盯盘接口在美股适用吗

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…

有哪些优化数据库性能的方法?如何定位慢查询?数据库性能优化全攻略:从慢查询定位到高效提升

在现代应用程序开发中&#xff0c;数据库的性能对于整体系统的响应能力至关重要。随着用户数量的增加和数据量的增长&#xff0c;如何优化数据库性能、定位慢查询成了每一个开发者面临的重要挑战。今天&#xff0c;我想和大家分享一些实用的数据库性能优化方法&#xff0c;以及…

高效编程的利器 Jupyter Notebook

目录 前言1. Jupyter Notebook简介1.1 功能特点1.2 使用场景 2. 不同编程工具的对比与效率提升2.1 VS Code&#xff1a;灵活且轻量的代码编辑器2.2 PyCharm&#xff1a;面向专业开发者的集成开发环境2.3 Git&#xff1a;高效协作的版本控制工具2.4 Jupyter Notebook 和 VS Code…