d3.js之多组柱状图

前端数据可视化D3 ——(案例1)柱状图 从本篇博客开始,我将使用D3来完成一些基础的demo,关于数据可视化方面的介绍我就不多说了,关于d3的简单介绍: D3 的全称是(Data-Driven Documents),一个被数据驱动的文档。听名字有点抽象,说简单一点,其实就是一个 JavaScript 的函数库,主要是用来做数据可视化,将强大的可视化组件应用于需求中。 查看这个系列的代码前,请先熟悉一些d3基础知识,关于基础可移步至官网: https://d3js.org/ 首先我们先来看看,要实现的柱状图的效果: 简单分.. 阅读详情

参考博客

有什么不知道的API可以参考D3中文API

也可以去查看别人写的普通柱状图柱状图详解

之前学习d3的时候就看到柱状图中有那种几组几组在一起,今天看到一个demo就是这种几组一起的。

就去仔细看了那个Demo,并且写下这篇文章。

这是V3版本

思路:平时写的写的柱状图都是一个一个,那么怎么将一个柱状图中一个分成好几个呢。

大概的思路就是这样的,其实他写了四个柱状图来将他拼凑在一起,这四个柱状图对应相同的下标的rect放在一起。

var n = 20, // number of samples
		m = 4; // number of series
var data=d3.range(m).map(function(){
			return d3.range(n).map(Math.random);
		})

首先来生成数据,range(m)生成一个长度为4的数组,然后map遍历并且返回一个数组。

然后看return里面:d3.range(n).map(Math.random):这是返回一个长度n的数组并且数值是0-1之间的随机数。

		var y = d3.scale.linear()
			.domain([0, 1])
			.range([height, 0]);

		var x0 = d3.scale.ordinal()
			.domain(d3.range(n))
			.rangeBands([0,width],.2);

		var x1=d3.scale.ordinal()
			.domain(d3.range(m))
			.rangeBands([0,x0.rangeBand()]);

上面总共设置三个比例尺:一个线性两个序数比例尺

y是用来给y轴的,他的domain范围正好对应上面随机生成的0-1之间随机数。根据这个来获取对应高度


x0 比例尺他的范围d3.range(n),既n长度的数组,这就相当于坐标尺分成了N份。

x0.rangeBand()表示的是x0比例尺的区间宽度。每一个元素在值域上面间隔。既1份的宽度

x1比例尺他的范围是d3.range(m),对应的范围是x0的rangeBand(),现在又将这1份的宽度分为m份。既在一份的宽度上面显示多个rect;


<!DOCTYPE html>
<html>
<head>
	<title>Grouped Bar Chart</title>
	<script type="text/javascript" src='../../js/d3.js'></script>

	<style type="text/css">
		.axis text {
		  font: 10px sans-serif;
		}
		.axis path,
		.axis line {
		  fill: none;
		  stroke: #000;
		  shape-rendering: crispEdges;
		}
		/*将x轴的坐标的横线隐藏*/
		.x.axis path {
		  display: none;
		}
	</style>
</head>
<body>
	

	<script type="text/javascript">
		
		var n = 20, // number of samples
			m = 4; // number of series

		//range返回m大小的数组 
		//map遍历数组并且返回数组
		//生成一个二维数组,即4个长度为20的一维数组
		var data=d3.range(m).map(function(){
			return d3.range(n).map(Math.random);
		})
		console.log(data);
		//设置svg变量和宽高
		var margin = {
				top: 20,
				right: 30,
				bottom: 30,
				left: 40
			},
			width = 960 - margin.left - margin.right,
			height = 500 - margin.top - margin.bottom;

		//设置y轴的比例尺
		var y = d3.scale.linear()
			.domain([0, 1])
			.range([height, 0]);

		//设置X轴的比例尺
		var x0 = d3.scale.ordinal()
			.domain(d3.range(n))
			.rangeBands([0,width],.2);

		console.log(x0.rangeBand());//上面每一个区间间隔的长度

		//设置一个比例尺来求得四个小rect在一个区间的占的长度
		var x1=d3.scale.ordinal()
			.domain(d3.range(m))
			.rangeBands([0,x0.rangeBand()]);
		//设置颜色的比例尺
		var z=d3.scale.category10();

		//x轴的比例尺
		var xAxis=d3.svg.axis()
			.scale(x0)
			.orient('bottom');
		//y轴比例尺
		var yAxis=d3.svg.axis()
			.scale(y)
			.orient('left');

		//添加svg并且设置宽高并且添加一个g和偏移
		var svg=d3.select('body').append('svg')
			.attr('width',width+margin.left+margin.right)
			.attr('height',height+margin.top+margin.bottom)
			.append('svg:g')
			.attr("transform","translate("+margin.left+","+margin.top+")");
		
		//添加一个y轴的分组标签
		svg.append("g")
			.attr("class", "y axis")
			.call(yAxis);
		//
		//添加一个x周到分组标签
		svg.append("g")
			.attr("class", "x axis")
			.attr("transform", "translate(0," + height + ")")
			.call(xAxis);


		svg.append('g')								//添加一个分组g标签
			.selectAll('g')							//选择所有g元素
			.data(data)								//绑定数据	即二维数组中的个数4
			.enter()								//添加数据的标志
			.append('g')							//添加g元素,也就是数据绑定元素
			.style('fill',function(d,i){			//4个元素添加不同颜色。
				return z(i);
			})
			.attr('transform',function(d,i){		//然后移动g标签	
				// console.log(i);
				return "translate("+x1(i)+",0)" ;	//x1比例尺的范围是x0的rangeband即一个的区间范围
			})
			.selectAll('rect')						//选择所有的rect,下面将要在每一个g标签里面开始添加20个rect
			.data(function(d){
				return d;						//这里面的每一个d都是一个长度为20的一维数组。
			})					
			.enter()							//根据数据开始添加rect
			.append('rect')				
			.attr('width',x1.rangeBand())		//设置x1的rangBand()宽度。
			.attr('height',function(d,i){return y(d);})					//设置rect高度 
			.attr('x',function(d,i){return x0(i);})	//设置rect的x坐标。
			.attr('y',function(d){
				return height-y(d);			//设置y的所在位置
			})
	</script>
</body>
</html>



大数据可视化:D3.js 与 ECharts 实战指南 y 轴为数值轴,数据为对应的业务指标值。然后通过 D3 的选择器选中要放置图表的容器,接着利用 D3 强大的比例尺函数,将数据映射到合适的可视化空间,定义好柱子的宽度、高度以及位置等属性。还能为柱子添加点击事件,当用户点击柱子时,获取该柱子对应的数据,并在页面其他位置展示详细信息,比如点击代表某个城市销售数据的柱子,弹出该城市具体的销售明细。合理使用选择器是关键,比如在更新大量数据时,避免频繁使用 selectAll 方法,而是通过更精准的选择器,只选中需要更新的部分 DOM 元素,减少不必要的性能开销。 阅读详情

相关推荐

自定义Echarts柱状图, 一图显示多组数据

这个自定义的功能是参考一位大佬的帖子做出来的, 以此为基础加了一些优化, 但是我找不到大佬的帖子链接了, 如果有发现的请告诉我, 我在帖子上加一下, 以谢大佬指点之恩。//先定义图表容器, 至于图表所需要的js啥的, 请自行搜索教程, 不多赘述。...

weixin_40463857的博客 5547

d3.js——多柱体柱状图(v5)

一、页面引用 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scal...

weixin_42095871的博客 1196

精通D3.js:构建多系统柱形图的详细教程

D3.js,即Data-Driven Documents,是一个开源的JavaScript库,它利用现代Web标准中的HTML、SVG和CSS技术来实现数据驱动的可视化。自从Mike Bostock、Vadim Ogievetsky和Jeff Heer在2011年开发以来,D3.js迅速成为数据可视化领域的宠儿,它彻底改变了开发者和设计师创建动态、交互式数据图表的方式。核心特点之一是其灵活性:D3.js允许用户将任意数据绑定到DOM元素上,然后通过数据驱动的方式来操作这些元素的样式和结构。

weixin_42592399的博客 1151

【一起学D3.js】(五)实现一个柱状图

用D3画一个柱状图

weixin_44045702的博客 1080

grouped-bar-chart:使用 d3.js 创建的分组条形图或多系列条形图

分组条形图 使用 d3.js 创建的分组条形图或多系列条形图 依赖关系 先决条件(对于开发人员/贡献者) 安装 安装 浏览器支持 任何稳定的最新版本的 Chrome、Firefox 和 Internet Explorer。 入门

javascript实现柱状图

vml实现柱状图vml实现柱状图vml实现柱状图vml实现柱状图vml实现柱状图vml实现柱状图

D3.js 第八课 完整的柱形图 #D3.js 数据可视化

第八课 完整的柱形图 完整柱形图包含三部分:矩形、文字、坐标轴 知识点内容包括:选择集、数据绑定、比例尺、坐标轴等。 添加 SVG 画布 //画布大小 var width = 400; var height = 400; //在 body 里添加一个 SVG 画布 var svg = d3.select(&quot;body&quot;) .append(&quot;svg&quot;) .att...

qq_095的博客 941

手把手教你用RMII接口配置以太网PHY芯片(附YT8512实战代码)

本文详细介绍了如何使用RMII接口配置以太网PHY芯片,以国产YT8512为例,提供从硬件设计到软件驱动的全流程实战指南。内容包括RMII接口技术解析、YT8512硬件设计要点、驱动开发实战代码及常见问题排查,帮助开发者快速实现以太网通信功能。

mac99的博客 996

利用js生成3D柱状图

1.引用js文件 &lt;script src="${pageContext.request.contextPath }/js/highcharts.js"&gt;&lt;/script&gt; &lt;script src="${pageContext.request.contextPath }/js/highcharts-3d.js"&gt;&lt;/script&gt; 2.html代...

风一样的男子 3338

SPECweb2009调优指南

 SPECweb2009 是衡量 Web 服务器性能和能效的标准化基准,可以对 Web 服务器的并发数进行性能测试,评测 Web 服务器能够支持的最大同时连接数的客户端/服务器(每秒能够响应的最大请求数)。为充分利用服务器性能,提升SPECweb2009测试结果,可通过增大系统进程数、优化服务器软件参数、绑核以及优化参数等。

developersupport的博客 2607

ABB AC500 系列 PLC 与上位机iFix 的通讯配置

在 软件中,有 3 种方式可以进入 IP config tool 的配置界面 双击 IP_settings,点击 IP config tool,即可进入 IP config tool 界面点击菜单栏的 Tool→IP config如果单独安装了 ABB IP Configration,则可以通过开始→程序→ABB→ABB IPConfigration 启动 IP 配置工具启动 IP config tool 后,即可进入 IP 配置界面。

xdpcxq的专栏 4031

柱状图多维条形图vue_使用D3.js+Vue实现一个简单的柱形图

最近想在Vue的项目里尝试使用d3.js,封装一些常用的图表。这里记录一下自己搭建项目的过程,以及实现一个简单的柱形图。不了解D3的请移步,它是基于数据驱动文档工作方式的一款JavaScript函数库,主要用于网页作图、生成互动图形,是最流行的可视化库之一。说明采用Vue-cli脚手架快速搭建项目npm 安装 D3实现一个简单的柱形图项目搭建使用vue-cli搭建单页应用:D3安装(最新的v5版本...

weixin_39970369的博客 438

OK3588-C开发板Forlinx Desktop系统烧录与多媒体功能实战

本文详细介绍了OK3588-C开发板Forlinx Desktop系统的烧录步骤与多媒体功能实战。从硬件准备到软件工具配置,逐步解析RKDevTool烧录技巧,并深入测试摄像头、视频编解码及音频功能,帮助开发者快速掌握RK3588芯片的强大性能与Ubuntu系统的优化应用。

weixin_29190169的博客 417

Vue整合d3.v5.js制作--柱状图(rect)

先上效果图: 图中柱状图变成纯蓝色是鼠标滑动过的颜色(颜色可改,本人配色能力十分的强,建议直接用默认设置即可 ( ᖛ ̫ ᖛ )ʃ)) 1、环境说明 Vue版本:"vue": "^2.5.2" d3版本:"d3": "^5.9.1" 2、Histogram.vue源码 1 <!-- 2 d3组件:柱状图 3 属性说明: 4 id:...

weixin_30500473的博客 414

基于FPGA的数字图像处理-直方图操作【3.3】

对于固定的位宽和图像分辨率来说,这个计算过程是 可定量的,也就是这个归一化系数是已知的。1.直方图累计和 根据数学定义,直方图累加和的定义是小于指定像素的所有像素 的统计值之和。在实际应用中,处理帧缓存是费时费力费资源的一件事情,在许 多情况下,图像的变换比较慢,在这种情况下的一个近似是当建立当 前帧的直方图统计结果时使用从前一帧得到的映射。由测试结果可见,这两幅过曝光和曝光不足的图像,经过均衡化 之后的效果图差别不大,对比度都非常高,设计代码达到了预期的均 衡目的。累加和的计算情况如图6-28所示。

qq_43416206的博客 1126

Failed to connect to gitee.com port 443: Time out 连接超时提示【Bug已完美解决-鸿蒙开发】

在进行Sample导入或Git项目Clone时,遇到连接超时问题是一个常见而令人烦扰的情况。连接超时问题通常源于网络限制,可能是由于防火墙、代理设置或其他网络配置导致。因此,首先要关注网络状态,确保网络通畅。如果在网络受限的情况下,代理服务器配置是一个有效的解决方案。通过在Git全局配置中设置代理信息,可以将网络请求通过代理服务器传输,规避一些网络限制。但在使用代理时,需要确保代理服务器的可用性和稳定性,以免引入新的问题。

一键难忘的博客 4557

d3.js多组柱形图

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33827731的博客 506

手把手教你学pcie--(PCIe) 写请求的流程

通过上述流程,我们可以看到PCIe写请求的完整过程,包括请求的构建、发送、接收、处理和响应。这种请求-响应模型确保了数据传输的可靠性和有序性。

MHD0815的博客 158

PHPStan generics.unresolvable 错误详解:泛型参数类型无法解析的原因与修复方案

`generics.unresolvable` 是 PHPStan 在解析 PHPDoc 泛型声明(`@extends`、`@implements`、`@use`)时报告的错误标识符,表示泛型参数中包含了无法解析的类型。本篇文章面向使用 PHPStan 对类层次结构进行静态分析的开发者,完整讲解该错误的触发场景、底层原因、三种修复路径,并结合仓库中的错误标识符机制说明如何忽略或定位这类问题。读完本

gitblog_00597的博客 1031

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

算法大师! 1236

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Ember Charts完全指南:Ember.js与d3.js打造专业数据可视化图表

Ember Charts是一款基于Ember.js和d3.js构建的强大数据可视化库,它为开发者提供了丰富的图表组件,帮助轻松创建专业级数据可视化界面。无论是初学者还是有经验的开发者,都能通过Ember Charts快速实现各种图表需求。 ## 🌟 Ember Charts简介:为什么选择它? Ember Charts将Ember.js的组件化优势与d3.js的数据处理能力完美结合,提供了一

gitblog_00086的博客 458

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

echarts 双x轴多组柱状图

【代码】echarts 双x轴多组柱状图。

liuxi_happy的博客 139

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python测试开发django-149.ECharts 生成柱状图

前言 ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。 ECharts下载与使用 可以在直接下载 echarts.min.js 并用 <script>标签引入。下载地址https://cdn.staticfile.org/echarts/4.7.0/echarts.min.js 开发环境下可以使用源代码版本 echarts.js 并用 <script> 标签引入,源码版本包含了常见的错误提示和警告。下载地址https://cdn.s

qq_27371025的博客 735

数据可视化新选择:为什么python-nvd3是你的最佳Python图表库

python-nvd3是一个强大的Python图表库,作为NVD3图形库的封装器,它让你能够轻松创建美观且交互式的数据可视化图表。通过简单的Python代码,就能生成高质量的图表,为数据分析和展示提供了便捷的解决方案。 ## 为什么选择python-nvd3? ### 简单易用的Python接口 python-nvd3最大的优势在于其简洁的Python接口。你无需深入学习复杂的JavaScr

gitblog_00117的博客 875

Echarts 图表绘制:柱状图

Echarts柱状图是Echarts中常用的一种图表类型,也是数据可视化中常用的一种形式。柱状图通过直方图的方式展示数据的大小和比较关系。Echarts柱状图的特点如下:数据展示清晰明了:柱状图通过不同高度的柱子来表示数据的大小,直观地展示数据的差异和比较关系。柱状图适用于展示离散数据和类别数据。多样的样式配置:Echarts柱状图提供了丰富的样式配置选项,可以自定义柱子的颜色、宽度、间距等,以及整个图表的标题、图例等,使图表更具个性化。

梁辰兴的博客 1713

多组学数据整合可视化实战:从复杂数据到清晰图示的转化艺术

掌握多组学数据整合难题,本文深入解析生物数据的可视化全流程,涵盖转录组、蛋白组等多维度数据融合与图示技巧,结合主流工具实现从复杂数据到清晰图示的转化艺术,助力科研高效表达,值得收藏。

ProceNest的博客 1105
上一篇: D3.js时钟
下一篇: D3.JS之别人家的饼图动画
KJBU2
博客等级 码龄12年 20粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值