首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

d3转换堆叠条形图

D3.js 是一个非常强大的 JavaScript 库,用于处理数据和创建复杂的可视化。堆叠条形图是一种常见的可视化类型,用于显示不同类别的数据随时间或其他变量的变化。下面是一个使用 D3.js 创建堆叠条形图的基本步骤:

1. 准备数据

首先,你需要准备要可视化的数据。堆叠条形图通常需要一个二维数组,其中每个子数组代表一个类别,子数组中的元素代表该类别在不同时间点或条件下的值。

代码语言:javascript
复制
const data = [
  {category: 'A', values: [10, 20, 30]},
  {category: 'B', values: [15, 25, 35]},
  {category: 'C', values: [5, 15, 25]}
];

2. 设置 SVG 容器

在 HTML 中创建一个 SVG 元素,用于绘制堆叠条形图。

代码语言:javascript
复制
<svg width="600" height="400"></svg>

3. 创建比例尺和轴

使用 D3.js 的比例尺(scales)和轴(axes)来映射数据和视图。

代码语言:javascript
复制
const margin = {top: 20, right: 30, bottom: 40, left: 40};
const width = +svg.attr('width') - margin.left - margin.right;
const height = +svg.attr('height') - margin.top - margin.bottom;

const x = d3.scaleBand()
  .rangeRound([0, width])
  .padding(0.1);

const y = d3.scaleLinear()
  .rangeRound([height, 0]);

const g = svg.append('g')
  .attr('transform', `translate(${margin.left},${margin.top})`);

4. 创建堆叠布局

使用 D3.js 的堆叠布局(stack layout)来处理数据。

代码语言:javascript
复制
const stack = d3.stack()
  .keys(data.map(d => d.category))
  .order(d3.stackOrderNone)
  .offset(d3.stackOffsetNone);

const series = stack(data.map(d => d.values));

5. 绘制条形图

遍历堆叠后的数据,为每个类别绘制条形。

代码语言:javascript
复制
const barWidth = x.bandwidth() / data.length;

g.selectAll('.series')
  .data(series)
  .enter().append('g')
    .attr('fill', 'steelblue')
  .selectAll('rect')
  .data(d => d)
  .enter().append('rect')
    .attr('x', (d, i) => x(i) + i * barWidth)
    .attr('y', d => y(d[1]))
    .attr('height', d => y(d[0]) - y(d[1]))
    .attr('width', barWidth);

6. 添加轴标签

最后,添加 x 轴和 y 轴标签。

代码语言:javascript
复制
g.append('g')
  .attr('class', 'x axis')
  .attr('transform', `translate(0,${height})`)
  .call(d3.axisBottom(x));

g.append('g')
  .attr('class', 'y axis')
  .call(d3.axisLeft(y).ticks(10, '%'));

完整代码示例

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Stacked Bar Chart with D3.js</title>
  <script src="https://d3js.org/d3.v7.min.js"></script>
  <style>
    .axis path,
    .axis line {
      fill: none;
      stroke: #000;
      shape-rendering: crispEdges;
    }
  </style>
</head>
<body>
  <svg width="600" height="400"></svg>
  <script>
    const svg = d3.select('svg');
    const margin = {top: 20, right: 30, bottom: 40, left: 40};
    const width = +svg.attr('width') - margin.left - margin.right;
    const height = +svg.attr('height') - margin.top - margin.bottom;

    const x = d3.scaleBand()
      .rangeRound([0, width])
      .padding(0.1);

    const y = d3.scaleLinear()
      .rangeRound([height, 0]);

    const g = svg.append('g')
      .attr('transform', `translate(${margin.left},${margin.top})`);

    const data = [
      {category: 'A', values: [10, 20, 30]},
      {category: 'B', values: [15, 25, 35]},
      {category: 'C', values: [5, 15, 25]}
    ];

    const stack = d3.stack()
      .keys(data.map(d => d.category))
      .order(d3.stackOrderNone)
      .offset(d3.stackOffsetNone);

    const series = stack(data.map(d => d.values));

    const barWidth = x.bandwidth() / data.length;

    g.selectAll('.series')
      .data(series)
      .enter().append('g')
        .attr('fill', 'steelblue')
      .selectAll('rect')
      .data(d => d)
      .enter().append('rect')
        .attr('x', (d, i) => x(i) + i * barWidth)
        .attr('y', d => y(d[1]))
        .attr('height', d => y(d[0]) - y(d[1]))
        .attr('width', barWidth);

    g.append('g')
      .attr('class', 'x axis')
      .attr('transform', `translate(0,${height})`)
      .call(d3.axisBottom(x));

    g.append('g')
      .attr('class', 'y axis')
      .call(d3.axisLeft(y).ticks(10, '%'));
  </script>
</body>
</html>

这个示例展示了如何使用 D3.js 创建一个简单的堆叠条形图。你可以根据需要调整数据和样式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 60种常用可视化图表的使用场景——(上)

    13、堆叠条形图 跟多组条形图不同,堆叠条形图 (Stacked Bar Graph) 将多个数据集的条形彼此重迭显示,适合用来显示大型类别如何细分为较小的类别,以及每部分与总量有什么关系。...堆叠条形图共分成两种: 简单堆叠条形图。将分段数值一个接一个地放置,条形的总值就是所有段值加在一起,适合用来比较每个分组/分段的总量。 100% 堆叠条形图。...14、不等宽柱状图 不等宽柱状图 (Marimekko Chart)也称为「马赛克图」,用来显示分类数据中一对变量之间的关系,原理类似双向的 100% 堆叠条形图,但其中所有条形在数值/标尺轴上具有相等长度...推荐的制作工具有:D3、Datamatic、Datavisual、Infogr.am 17、堆叠式面积图 堆叠式面积图 (Stacked Area Graph) 的原理与简单面积图相同,但它能同时显示多个数据系列...我们可用不同颜色来区分图表中的不同类别,或表示从一个阶段到另一个阶段的转换

    22210

    【MATLAB】进阶绘图 ( Bar 条形图 | bar 函数 | bar3 函数 | Bar 条形图样式 | 堆叠条形图 | 水平条形图 | barh 函数 )

    文章目录 一、Bar 条形图 1、bar 函数 2、矩阵数据表示 3、bar 函数代码示例 二、Bar 条形图样式 1、bar 函数样式 2、堆叠条形图示例 三、水平条形图 1、barh 函数 2...、代码示例 一、Bar 条形图 ---- 1、bar 函数 bar 函数参考文档 : https://ww2.mathworks.cn/help/matlab/ref/bar.html 2、矩阵数据表示...x 值是一个矩阵 : x = \begin{bmatrix} 1 & 2 & 5 & 4 & 8 \end{bmatrix} 代码表示例 : % 条形图的数值列表 x = [1 , 2 , 5 , 4...在 bar 函数的数据后面 , 可以使用字符串指定一个条形图样式 , 条形图的四种样式如下 : 2、堆叠条形图示例 % 条形图的数值列表 x = [1, 2, 5, 4, 8]; % 数值列表 ,...1、barh 函数 与 bar 用法类似 , 使用 barh 函数绘制的条形图是水平条形图 ; 2、代码示例 代码示例 : % 条形图的数值列表 x = [1, 2, 5, 4, 8]; % 数值列表

    5.2K31

    可视化图表样式使用大全

    堆叠条形图 ? 跟多组条形图不同,堆叠条形图 (Stacked Bar Graph) 将多个数据集的条形彼此重迭显示,适合用来显示大型类别如何细分为较小的类别,以及每部分与总量有什么关系。...堆叠条形图共分成两种: 简单堆叠条形图。将分段数值一个接一个地放置,条形的总值就是所有段值加在一起,适合用来比较每个分组/分段的总量。 100% 堆叠条形图。...推荐的制作工具有:D3、Datamatic、Datavisual、Infogr.am 堆叠式面积图 ?...我们可用不同颜色来区分图表中的不同类别,或表示从一个阶段到另一个阶段的转换。...此外,条形也可以如堆叠条形图堆叠起来。 推荐的制作工具有:jChartFX、Bokeh。 热图 ?

    9.4K10

    60 种常用可视化图表,该怎么用?

    堆叠条形图 跟多组条形图不同,堆叠条形图 (Stacked Bar Graph) 将多个数据集的条形彼此重迭显示,适合用来显示大型类别如何细分为较小的类别,以及每部分与总量有什么关系。...堆叠条形图共分成两种: 简单堆叠条形图。将分段数值一个接一个地放置,条形的总值就是所有段值加在一起,适合用来比较每个分组/分段的总量。 100% 堆叠条形图。...推荐的制作工具有:D3、Datamatic、Datavisual、Infogr.am 堆叠式面积图 堆叠式面积图 (Stacked Area Graph) 的原理与简单面积图相同,但它能同时显示多个数据系列...我们可用不同颜色来区分图表中的不同类别,或表示从一个阶段到另一个阶段的转换。...此外,条形也可以如堆叠条形图堆叠起来。 推荐的制作工具有:jChartFX、Bokeh。

    8.7K10

    常用60类图表使用场景、制作工具推荐!

    堆叠条形图 跟多组条形图不同,堆叠条形图 (Stacked Bar Graph) 将多个数据集的条形彼此重迭显示,适合用来显示大型类别如何细分为较小的类别,以及每部分与总量有什么关系。...堆叠条形图共分成两种: 简单堆叠条形图。将分段数值一个接一个地放置,条形的总值就是所有段值加在一起,适合用来比较每个分组/分段的总量。 100% 堆叠条形图。...推荐的制作工具有:D3、Datamatic、Datavisual、Infogr.am 堆叠式面积图 堆叠式面积图 (Stacked Area Graph) 的原理与简单面积图相同,但它能同时显示多个数据系列...我们可用不同颜色来区分图表中的不同类别,或表示从一个阶段到另一个阶段的转换。...此外,条形也可以如堆叠条形图堆叠起来。 推荐的制作工具有:jChartFX、Bokeh。

    8.8K20

    D3库实践笔记之几类特定图表与布局 |可视化系列37

    在使用饼图布局后,不需要把SVG整个画布的坐标系转成极坐标系,而是将系列数据做转换。...d3-pie-inner-radius 堆叠布局 用d3.stack()将数据变成适合堆叠图的数据格式。...0,76],[0,37],[0,90],[0,60],[0,50]], // [[76,113],[37,83],[90,143],[60,141],[50,110]] ] 基于这一格式的数据就可以绘制堆叠柱状图以及垂直的堆叠条形图...d3-chord 分层树图 要绘制思维导图等分层的树图,在d3中使用的是d3.hierarchy(data)转换为层级数据,再通过d3.tree()(data)建立树的节点,用svg里的...在d3的v3.x版本里,饼图、直方图等数据转换函数汇总在layout下。通过d3.layout.pie()使用,而v5.x之后的版本没有了layout的集合,而是使用d3.pie()(data)。

    2K20

    学界 | 结合堆叠与深度转换的新型神经翻译架构:爱丁堡大学提出BiDeep RNN

    爱丁堡大学与 Charles University 的研究者们对这两种架构的多个组合形式在 WMT 翻译任务中的表现进行了测试,并提出了结合堆叠与深度转换的新型神经网络:BiDeep RNN。...要注意的是,与深度转换 GRU 不同的是,堆叠 RNN 中的 GRU 转换块由一个独自循环的单元组成,因为它自身的状态在不同的时间步骤之间循环。 ? 图 2....堆叠 RNN(stacked RNN)解码器 2.4 双深度架构 我们引入了双深度 RNN(BiDEEP RNN),这是一个通过结合堆叠的深度转换器得到的新型结构。...BiDeep 编码器是这样得到的:将堆叠解码器中的 Ds 个单独的循环 GRU 单元用多层深度转换单元替换每个多层转换单元都由 Ls 个 GRU 转换块组成。...也可以在每一个堆叠水平拥有不同的转换深度。 BiDeep 解码器也是类似的定义,将循环单元(如 GRU,rGRU,cGRU 或者 crGRU)用深度多层转换单元替换。 ?

    99240

    《数据可视化基础》第九章:比例可视化(二)

    一个堆叠条形图可视化的例子 在上面说到堆叠条形图的时候,我们说到,由于内部比例相对变化的问题。所以不建议用堆叠条形图来可视化时间序列的数据。但是如果只有两个分组的话,那么就可以使用堆叠条形图了。...例如在观察一个地方一段时间男女比例构成的时候,我们就可以使用堆叠条形图的。 ? 对于一个连续性多分组的比例数据,如果使用堆叠条形图的话,会是很多并排的条形,可视化效果不好。...这个时候我们就可以使用堆叠密度图来进行可视化。 例如我们在可视化健康状态和年龄的时候,其中年龄可以当作连续性变量,如下图所有,利用堆叠密度图的可视化效果还是不错的。...将比例分别可视化为总体的一部分 并排条形图的问题是,它们无法清晰地看到各个亚组相对于整体的变化,而堆叠条形图的问题在于,由于它们具有不同的基线,因此无法轻松比较不同的条形图

    1.1K30

    九大数据可视化利器,你有在使用吗?

    D3 当下谈论数据可视化时,我们是绕不开 D3 的,这是由 Mike Bostock 创建的库,它已成为在浏览器中处理 SVG 矢量图形的主要工具。...D3 允许创建各种高级图形,如网状图、树状图、地图或气泡图,以及常用图形(如条形图或散布图)。...D3 是如此的受欢迎,以至于有许多其它的库在 D3 的基础上被创造出来,为人们提供更多“开箱即用”的解决方案,如 NVD3。...CHARTS.JS Chart.js 是一个开源的库,支持一些简单的图表类型:折线图、条形图、雷达图、极坐标图和饼状图。这些图表类型通常能满足大多数沟通的需要。...它可以让你创建一些基本图形,比如条形图和折线图;以及一些更复杂的图形,比如网状图,或是一些在其它的库中不太常见且更为有趣的图形(比如时间轴和 3D 图形)。 ? 9.

    3.9K60

    这些条形图的用法您都知道吗?

    ,默认为'stack',表示绘制堆叠条形图;如果指定为'dodge',表示绘制水平交错条形图;如果为'fill',表示绘制百分比堆叠条形图; ......如果绘图数据涉及的是双离散变量单数值变量或者双数值变量单离散变量时,也可以借助于geom_bar函数绘制堆叠条形图、百分比堆叠条形图、交错条形图和对比条形图。...然而,在实际的企业环境中,这样的图形出现的频次并不是很高,因为绝对数量的堆叠条形图并不能够达到刺激效果。读者不妨使用下面介绍的百分比堆叠条形图。...双离散单数值的百分比堆叠条形图 # 明细数据--双离散单数值变量的百分比堆叠条形图 ggplot(data = weather2017, mapping = aes(x = aqiInfo, fill...堆叠条形图也有弊端,那就是只能够解决可叠加问题的可视化,假设数值型指标不能够叠加(如平均薪资、渗透率等指标是不能相加的),就不可以使用该类图形,但不妨可以试试水平交错条形图

    5.5K10

    Pandas数据可视化

    pandas库是Python数据分析的核心库 它不仅可以加载和转换数据,还可以做更多的事情:它还可以可视化 pandas绘图API简单易用,是pandas流行的重要原因之一 Pandas 单变量可视化...单变量可视化, 包括条形图、折线图、直方图、饼图等 数据使用葡萄酒评论数据集,来自葡萄酒爱好者杂志,包含10个字段,150929行,每一行代表一款葡萄酒 加载数据 条形图是最简单最常用的可视化图表 在下面的案例中..., 直方图是一种特殊的条形图,它可以将数据分成均匀的间隔,并用条形图显示每个间隔中有多少行, 直方图柱子的宽度代表了分组的间距,柱状图柱子宽度没有意义 直方图缺点:将数据分成均匀的间隔区间,所以它们对歪斜的数据的处理不是很好...堆叠图(Stacked plots) 展示两个变量,除了使用散点图,也可以使用堆叠堆叠图是将一个变量绘制在另一个变量顶部的图表 接下来通过堆叠图来展示最常见的五种葡萄酒  从结果中看出,最受欢迎的葡萄酒是...波尔多风格混合红酒) 从数据中取出最常见的五种葡萄酒: 通过透视表找到每种葡萄酒中,不同评分的数量 : 从上面的数据中看出,行列分别表示一个类别变量(评分,葡萄酒类别),行列交叉点表示计数,这类数据很适合用堆叠图展示

    11910

    使用JavaScript和D3.js实现数据可视化

    D3利用可缩放矢量图形或SVG格式,允许您渲染可放大或缩小的形状,线条和填充,而不会降低质量。本教程将指导您使用JavaScript D3库创建条形图。...再次,我们将使用function(d,i),并且我们将返回一个高于我们条形图最高值的Y值,比方说400。...我们称之为班级bar,因为它是一个条形图,但只要所有引用都引用相同的名称,我们就可以调用它。...完成的代码和代码改进 此时,您应该拥有一个在JavaScript的D3库中呈现的功能完备的条形图。让我们看看我们所有的代码文件。 barchart.html <!...结论 本教程通过在JavaScriptD3库中创建条形图。您可以通过访问GitHub上的D3 API来了解有关d3.js的更多信息。更多前端教程请前往腾讯云+社区学习更多知识。

    21.8K30

    课后笔记:ggplot2优雅的显示WB结果

    ✦ 统计转换(Statistical trassformations, stats)是对数据进行某种汇总,例如将数据分组创建直方图,或将一个二维的关系用线性模型进行解释。...identity表示条形的高度是变量的值;对于连续性变量使用bin,转换的结果使用变量density来表示。...「position:」 位置调整,有效值是stack、dodge和fill,默认值是stack(堆叠),是指两个条形图堆叠摆放,dodge是指两个条形图并行摆放,fill是指按照比例来堆叠条形图,每个条形图的高度都相等...「width:」 条形图的宽度,是个比值,默认值是0.9 「color:」 条形图的线条颜色 「fill:」 条形图的填充色 基本演示 读取ImagJ数据及转换 #读取ImageJ dat=read.csv

    2.5K20

    图表(Chart & Graph)你真的用对了吗?

    有以下几种类型,用于创建对比数据的图表: 柱状图 条形图 百分比图 线形图 散点图 子弹图 2. 是否需要展示数据的组成部分?...有以下几种图表类型,展示数据的组成: 饼状图 堆叠条形图 堆叠柱形图 面积图 瀑布图 3. 是否需要了解数据的分布? 分布图表能够帮助我们清晰的理解正常趋势、正常范围和异常值。...2)条形图 条形图基本上是水平的柱形图,可以用于避免在超过10个项目进行比较时产生杂乱。这种图表类型也可用于显示负数。 设计条形图的最佳做法: 图表中使用对比色,高亮特殊有意义的数据。...6)堆叠条形图 这种图表用于比较多个不同的数据集,并显示每个被比较的数据集的组成。 设计堆叠条形图的最佳做法: 最适用于说明部分和整体的关系。 使用对比色,会使对比更加清晰。...11)漏斗图 漏斗图显示了一系列步骤以及每一步的完成率,主要用于跟踪每一个页面或步骤的转换率。 设计漏斗图的最佳做法: 根据数据集的大小,准确的显示每个部分的大小。

    2.3K10

    JavaScript图表的数据可视化:比较D3和Kendo UI

    D3和Kendo UI只是在web应用程序中创建图表的两种方式,选项范围从简单地在屏幕上绘制图形到使用复杂的图表组件。D3和Kendo UI都很受欢迎,两者都能完成工作。...Kendo UI图表组件包括许多流行的图表类型,包括条形图、饼图、线条图和其他图表。 准备开始 我在这里的目标是使用这两个工具来实现同一个图表,使用这两个库。...这些将用于将实际数据值转换为图表上的坐标。我硬编码“800”作为Y刻度的上限。在实际使用中,我们希望找到要显示的数据的最大值,然后四舍五入。...现在我们开始讲D3部分的内容。在这里,我们告诉D3我们将使用哪些数据,并指定图表中每个条形图的基本元素。我们告诉它每个条的宽度,我们告诉它条的高度(获取数据值并缩放它)。...这是D3的基本概念的一部分。使用图表可以做三件事:进入、更新和退出。输入获取新的数据并将其添加到现有的图表中—它向图表中添加新的条形图。更新更改现有条的值。退出从图表中删除元素(条)。

    11.9K30
    领券