使 d3.js 可视化布局响应式的最佳方法是什么?

2024-03-06

假设我有一个直方图脚本,可以构建 960 500 svg 图形。我如何使其响应,以便调整图形宽度和高度是动态的?

<script> 

var n = 10000, // number of trials
    m = 10,    // number of random variables
    data = [];

// Generate an Irwin-Hall distribution.
for (var i = 0; i < n; i++) {
  for (var s = 0, j = 0; j < m; j++) {
    s += Math.random();
  }
  data.push(s);
}

var histogram = d3.layout.histogram()
    (data);

var width = 960,
    height = 500;

var x = d3.scale.ordinal()
    .domain(histogram.map(function(d) { return d.x; }))
    .rangeRoundBands([0, width]);

var y = d3.scale.linear()
    .domain([0, d3.max(histogram.map(function(d) { return d.y; }))])
    .range([0, height]);

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

svg.selectAll("rect")
    .data(histogram)
  .enter().append("rect")
    .attr("width", x.rangeBand())
    .attr("x", function(d) { return x(d.x); })
    .attr("y", function(d) { return height - y(d.y); })
    .attr("height", function(d) { return y(d.y); });

svg.append("line")
    .attr("x1", 0)
    .attr("x2", width)
    .attr("y1", height)
    .attr("y2", height);

</script> 

完整的示例直方图要点是:https://gist.github.com/993912 https://gist.github.com/993912


还有另一种方法可以做到这一点,不需要重新绘制图形,并且涉及修改viewBox http://www.w3.org/TR/SVGTiny12/coords.html#ViewBoxAttribute and 保留纵横比 http://www.w3.org/TR/SVGTiny12/coords.html#PreserveAspectRatioAttribute上的属性<svg>元素:

<svg id="chart" viewBox="0 0 960 500"
  preserveAspectRatio="xMidYMid meet">
</svg>

2015 年 11 月 24 日更新:大多数现代浏览器都可以推断长宽比 http://www.w3.org/TR/SVG/coords.html#IntrinsicSizingSVG 元素的数量viewBox,因此您可能不需要使图表的大小保持最新。如果您需要支持旧版浏览器,您可以在窗口大小调整时调整元素大小,如下所示:

var aspect = width / height,
    chart = d3.select('#chart');
d3.select(window)
  .on("resize", function() {
    var targetWidth = chart.node().getBoundingClientRect().width;
    chart.attr("width", targetWidth);
    chart.attr("height", targetWidth / aspect);
  });

并且 svg 内容将自动缩放。您可以看到一个工作示例(经过一些修改)here http://jsfiddle.net/shawnbot/BJLe6/:只需调整窗口或右下窗格的大小即可查看其反应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 d3.js 可视化布局响应式的最佳方法是什么? 的相关文章

  • JavaScript Array.length 属性是函数还是简单变量?

    我有以下 JavaScript 代码 我已经使用 new 关键字初始化了一个数组 因此创建了该数组对象的一个 新实例 然后 我通过向数组添加元素来填充该数组 然而我认为我犯了一个根本性的误解 代码的下一部分让我非常困惑 如果它不够清楚或者完
  • 如何阻止地址自动填充谷歌地点

    所以我在我的表单上有一个谷歌地图自动完成功能 当它到达一个位置时 它会占据该位置并格式化它 以便所有正确的信息都进入表单上的不同输入 我遇到的问题是在 place changed 事件触发自动完成填充输入之前 我想阻止最初的人口 而是填充我
  • 如何在html中创建字体选择栏

    我想创建一个下拉菜单 在其中我们可以看到所有可用的字体 并且可以选择我们选择的任何字体 我还想创建一个字体颜色选择小部件 存在大量的字体样式 我想知道如何获取所有这些字体以及如何创建一个小部件 用户可以使用该小部件选择他选择的颜色 为了创建
  • 为什么Google的闭包库不使用真正的私有成员?

    我成为 JavaScript 开发人员已经有一段时间了 我一直认为在 JavaScript 中实现私有成员的正确方法是使用 Doug Crockford 在这里概述的技术 http javascript crockford com priv
  • 根据用户的时间设置问候语(早上好,下午好......)

    任何人都可以推断如何根据用户的时间设置实现基本的 晚上好 或 早上好 也许 PHP 会获取服务器时间 但我希望用基于时间的适当问候语来问候网站访问者 并考虑到他们一天中的时间 E G 早上好 晚上好 下午好 基于它 getHours 日期对
  • 从画布保存/转换后文件质量下降的问题

    这是我正在使用的代码 代码位于这篇文章的底部 但这里是链接GitHubGist Noitidart ff addon snippet browseForBadgeThenCreateSaveAnApply js https gist git
  • 名称属性的 CSS 选择器?

    这可能是一个愚蠢的问题 但是属性的 CSS 选择器是什么 a 那是 名字 document body innerHTML myString anchor HTML String 这段 JavaScript 创建了一个 a 带有名称的元素 H
  • Javascript 函数,我如何开始理解它们?

    我完全理解 为了学习 javascript 我需要知道函数是如何工作的 我了解传递参数的基础知识 然后使用值调用函数以将某些内容添加到一起 等等 我读过无数关于函数的文章 例如以及书籍等 但我只是不明白它们是如何使用的以及何时应该使用它们等
  • 从变量值动态设置 ng-controller

    我正在使用 AngularJs 和 NodeJS 开发一个应用程序 我对将控制器的名称设置为主控制器中的变量的值感到震惊 为了更好地解释它 我的 index html 看起来像这样 tbody tr td td td member task
  • Jasmine 单元测试不等待承诺解析

    我有一个有角度的服务 它具有像这样的异步依赖项 function angular module app factory myService q asyncService function q asyncService var myData
  • 删除数组中所有对象的属性

    我想删除bad数组中每个对象的属性 有没有比使用更好的方法for循环并从每个对象中删除它 var array bad something good something bad something good something for var
  • Angular2,测试和解析数据:如何测试 ngOnInit?

    我正在通过Angular2 测试指南 https angular io docs ts latest guide testing html并希望编写一个测试ngOnInit 功能 那个来自编程指南的路由部分 https angular io
  • 扩展html表格突出显示行和列并使当前单元格具有不同的颜色

    我找到了用鼠标悬停时突出显示行和列的示例 https stackoverflow com a 28312853 139698 https stackoverflow com a 28312853 139698 如何使鼠标悬停的一个单元格变为
  • 在Vue.js 3中添加全局变量

    如何在 Vue js 3 中添加全局变量 在 Vue js 2 中 我们在main js file Vue prototype myGlobalVariable globalVariable 最直接的替换就是app config globa
  • javascript 函数后面括号中的值

    我正在尝试重新利用我在 SO 的答案中找到的一些 Javascript 代码 但我想首先更好地理解它的语法 其大纲是 function root ns factory some code window detectZoom function
  • 谷歌绘制具有相同比例的多个系列的图表

    我正在寻找一种在图形上显示多个系列的方法 这些系列具有相同的比例但仅显示一次 正如你在这里看到的 http jsfiddle net Youkoal d3xwnqdu http jsfiddle net Youkoal d3xwnqdu 我
  • 如何使用jquery点击眼睛图标时显示和隐藏密码

    我需要在单击眼睛图标时显示和隐藏用户密码 因此我为此编写了脚本 当我单击眼睛图标时 只有类正在更改 但密码不可见 再次单击斜线眼睛图标 它应该隐藏这两个图标方法不起作用如何解决这个问题
  • 如何在 Angular 2 中实现 D3

    我想将这段代码从 d3 js 实现到 Angular 2 组件 但我不知道如何将 js 文件调用到组件 ts 文件中 我找到了一些折线图的代码 包括index html和lineChart js 我怎样才能调用javascriptngAft
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节
  • 如何在输入时格式化 contenteditable div?

    我正在尝试编写一个函数 允许 contenteditable div 在用户输入 div 时执行一些自动格式化 到目前为止我只能让它在 IE 中运行 有人可以帮助我吗 function formatOnKeyUp if window get

随机推荐

  • `find -exec` 中这个奇怪的语法是什么?

    最近我遇到了一个奇怪的 bash 脚本 它用于从内部调用自定义 bash 函数find exec 我开发了以下简单的脚本来演示我需要解释的功能 在下面的示例中 函数foo每个都会被调用find result foo echo export
  • 为什么在 Kotlin 中启动新的 Android Activity 需要 Java 类? [复制]

    这个问题在这里已经有答案了 如果我想在 Android 中启动一个新的 Activity 我需要将 Activity 传递给 Intent 但是 不要像这样简单地传递 Kotlin 类 val intent Intent Intent th
  • 如何在 iOS 5 中禁用某些部分显示为 TVOut?

    众所周知 在 iOS 5 中 我们不需要添加单独的 TVOut 功能代码行 他们已将该功能集成为内置功能 我的问题是 如果我的应用程序中有一些可用的自定义视图 但我不想将其显示为 TVOut 演示文稿 该怎么办 它应该仅显示在设备上 而不是
  • 覆盖父级的 CSS 显示属性

    我了解如何覆盖父样式 并且我知道这个示例是人为的 但是有没有一种方法 使用内联 CSS 使子范围显示 即使其父范围设置为不显示 span style display none span style display block Test sp
  • base.html 中的 Django 变量

    base html用作所有其他页面的基本模板 base html有导航栏 在导航栏中 我想显示用户收到的消息数 因此 我需要一个像这样的变量 number of messages in the base html 但是 我应该如何将这个变量
  • 使用 sqlplus 连接到 Oracle 数据库

    我在 Unix 环境中使用以下命令连接 Oracle 数据库 sqlplus test test DESCRIPTION ADDRESS LIST ADDRESS PROTOCOL TCP HOST hostname com PORT 15
  • 无返回值的条件运算符

    我有这个代码 bool value false if value Console Write true else Console Write false 我想通过使用条件运算符来缩短它 但我找不到正确的语法 bool value false
  • 批处理文件保留十行之一

    我有一个包含 n 行的文件 n 超过 1 亿 我想输出一个仅包含 10 行中的 1 行的文件 我无法将文件分成十部分并只保留一部分 因为它必须更加随机 后来我必须进行统计分析 我不能在数据中产生强烈的偏差 我正在考虑读取文件 并为每条记录如
  • Kubernetes 仪表板显示未经授权

    我使用 KUBEADM 工具 IN LOCAL 配置了具有 1 个主节点和 4 个工作节点的 kubernetes 集群 所有节点都运行良好 部署了一个应用程序并能够从浏览器访问该应用程序 我尝试了很多方法使用 kubectl 创建仪表板
  • 如何在 Xcode 中将 OpenSSL 与我的应用程序静态链接?

    我正在使用使用 OpenSSL 加密库的第三方代码 自 OSX 10 7 起 Apple 已弃用 OpenSSL 转而采用他们自己的解决方案 由于我没有加密编码经验 因此我无法移植第三方代码以使用通用加密 因此 为了防止 Apple 稍后可
  • 如何删除字符串中的尾随空格和嵌入空格?

    我正在编写一个程序 将国内和国际帐号转换为 IBAN 号码 首先 我需要形成一个字符串 银行 ID 分行 ID 帐号 ISO 国家 地区代码 这些字段中可能存在尾随空格 但并非每个帐号都具有相同的长度 有些帐号具有分支标识符 而其他帐号则没
  • shared_ptr 析构函数、复制和不完整类型

    我有一个头文件foo h像这样 无关的东西省略 pragma once include
  • 互换使用 str 和 String

    假设我正在尝试使用 Rust 做一个奇特的零拷贝解析器 str 但有时我需要修改文本 例如实现变量替换 我真的想做这样的事情 fn main let mut v Vec lt str gt Hello there world split w
  • 单行 FFMPEG cmd 合并视频/音频并保留两个音频

    我有一个项目需要将视频文件与另一个音频文件合并 预期输出是一个视频文件 其中包含实际视频中的音频和合并的音频文件 输出视频文件的长度将与实际视频文件的大小相同 是否有单行 FFMPEG 命令可以使用 copy 和 map 参数来实现此目的
  • Android 上的 OkHttp PublicKey 固定

    有谁知道我们如何使用 OkHttp3 实现公钥固定 一直在阅读有关 SSL 固定的内容 我发现我们可以使用证书固定或公钥固定 后者似乎更灵活 来实现 但我只能找到例子证书固定 https github com square okhttp w
  • WSL (Ubuntu):如何从 bash 终端在浏览器中打开 localhost

    我正在尝试打开http localhost http localhost在 WSL bash 终端的 任何 浏览器中 到目前为止我已经尝试过 如何从 URL localhost 3000 的终端打开 Google Chrome https
  • iOS 的日志框架? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 iOS 是否有一个日志框架可以帮助开发人员诊断应用程序崩溃 您可能喜欢 伐木工人 https gith
  • Bootstrap 网格列相互重叠

    我对 Bootstrap 的网格布局和其中的列重叠有疑问 我不确定问题到底是什么 任何建议将不胜感激 谢谢 div class container div class row div class col md 6 img src conte
  • 错误提示“.class 文件中的版本错误”

    我使用了JSP代码并在tomcat5 5服务器下执行了相同的操作 它工作被罚款 现在我已经将相同的代码复制到其他系统的tomcat服务器下 但是在提交该 jsp 文件时 收到以下错误 导致错误的原因可能是什么 请指教 root cause
  • 使 d3.js 可视化布局响应式的最佳方法是什么?

    假设我有一个直方图脚本 可以构建 960 500 svg 图形 我如何使其响应 以便调整图形宽度和高度是动态的