在 d3 中动态创建图例

2024-04-11

我在用d3.scale.quantize()colorBrewer获得色阶。

....
var extent = d3.extent(collection.features, function(d) {
        return d.properties.mean;
    });

var colorScale = d3.scale.quantize()
    .domain(extent)
    .range(colorbrewer.RdYlBu[8]);
...

这给了我8不同的颜色,对应于给定值的某些范围。 然后我用coloScale来填补svg

....
.attr("fill-opacity", 0.1)
.attr("stroke", "grey")
.style("fill", function(d) {
    return colorScale(d.properties.mean);
});
...

我如何知道哪个值范围对应于颜色"#fdae61" or "#fee090"?我如何访问这些值? 我想制作一个当我更改输入颜色数量时动态变化的图例,即从8 to 3以及色阶中使用的颜色,即来自RdYlBu to YlGn.

我想我已经很接近了。 我有这个

var scale = d3.scale.ordinal()
    .domain()
    .range(colorScale.range());

我只需要填写domain具有相应的值,然后我可以使用它们轻松创建我的图例...... 但是,我不知道如何动态提取它们。 就像是colorScale.invertExtent("#fdae61")是静态的,因为每当我改变色阶时我都需要改变颜色等。


如果您想创建自动图例,我的建议是您根据您的情况创建一个数据集colorScale域和范围,并将此数据集绑定到您的图例。这样,只要您更改域或缩放范围,数​​据集就会发生变化。

例如,如果您有以下比例,域从 0 到 500:

var colorScale = d3.scale.quantize()
    .domain([0, 500])
    .range(["#d73027", "#f46d43", "#fdae61", "#fee090", "#e0f3f8",
           "#abd9e9", "#74add1", "#4575b4"]);//this is colorBrewer.RdYlBu[8]

您可以创建一个包含所有值范围的数组。这将是我们的数据集,名为colorRange:

var colorRange = [];    
for(var i = 0; i < colorScale.range().length; i++){
    colorRange.push(colorScale.invertExtent(colorScale.range()[i])[0]);
};

根据前面的代码,如果我们console.log这个数组,我们会得到:

console.log(colorRange);// returns [0, 62.5, 125, 187.5, 250, 312.5, 375, 437.5]

其中包含 8 种颜色对应的域值。例如,如果我们从中删除两种颜色colorScale范围,我们现在有:

console.log(colorRange);// returns [0, 83.333, 166.666, 250, 333.333, 416.666]

一旦你有了这个colorRange数组,您不仅拥有图例的域值,而且还可以使用以下方法轻松设置颜色:

colorScale(colorRange[i])

Where i从第一个值到最后一个值。

PS:如果您使用分位数刻度,我们可以放弃繁琐的 for 循环并简单地使用[0].concat(colorScale.quantiles())创建我们的数组。

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

在 d3 中动态创建图例 的相关文章

  • 在 onclick 事件上请求麦克风

    有一天 我偶然发现了这个 Javascript 录音机的例子 http webaudiodemos appspot com AudioRecorder index html http webaudiodemos appspot com Au
  • javascript:全局变量泄漏

    每当我向 Firefox 提交插件时 我都会收到一封电子邮件 告诉我我的一些变量正在泄漏到全局范围内 一旦他们告诉我我解决了问题 但在那之前有什么方法 程序 来检查变量是否泄漏到全局范围内 Thanks Both JSLint http w
  • Chrome 扩展程序可以相互通信吗?

    我正在编写一个Chrome扩展程序 并且想要实现一个接口或api 以便我将来制作的其他扩展程序可以使用它 最终的效果可能如下 分机 B 呼叫extensionA someMethod someParameters 并向分机A发送一些数据 分
  • 在 Java 中使用 Batik 检查和删除 SVG 中的属性

    这个问题基本上说明了一切 如何检查 SVG 是否具有 viewBox 属性 我正在使用蜡染库 我需要这个 因为我需要 至少 通知用户有一个 viewBox 属性 我可以删除它吗 使用 org w3c dom 类 您可以按照以下方式做一些事情
  • React中如何触发同级组件的函数?

    I am new to front end world and could not figure out how to trigger a function from a sibling component Lets say I have
  • Chrome 开发工具命中代码但未命中断点

    我在 chrome 开发工具上启用了断点 并且在一行上有一个断点 我知道 chrome 正在运行 因为我将断点放在具有以下语句的行上 alert why is this not breaking 如果我在本地主机中找到该文件 则断点有效 断
  • 从对象中取出具有无效(NaN、空白等)值的键的最佳方法?

    我有一个供用户填写的简短搜索表单 将有多个搜索查询进入 MongoDB 该表单创建一个名为的变量searchParams可能看起来像这样 var searchParams city Springfield bedrooms 3 bathro
  • 自调用函数未定义

    如果我声明一个函数文字 var x function alert hi console log x returns the function code However var x function alert hi console log
  • 修改 Twitter 帖子上可编辑 Div 的内容

    我正在编写一个 chrome 扩展 它可以帮助用户在 Twitter 上输入内容 当在 twitter 上写推文时 twitter 会打开一个可编辑的 div 容器 当用户输入内容时 twitter 大概正在使用某些网络框架 会生成子 di
  • Rangy:插入符号下的单词(再次)

    我正在尝试创建一个预输入代码以添加到 wysihtml5 富文本编辑器 基本上 我需要能够插入人员 标签引用 例如 Twitter Github Facebook 我发现一些人试图实现同样的事情的代码 http jsfiddle net A
  • Aurelia 中的角度服务?

    我还没有找到详细说明如何从 Angular 1 x 迁移到 Aurelia 的详细文档 到目前为止 我只看到人们详细介绍了 Angular 的概念directive可以在 Aurelia 中使用重制 customElement 好吧 足够简
  • 使 Bootstrap Popover 在悬停而不是单击时出现/消失

    我正在使用 Bootstrap 构建一个网站Popover http twitter github com bootstrap javascript html popovers我不知道如何使弹出窗口出现在悬停而不是单击时 我想做的就是当有人
  • 选择单选按钮时隐藏/显示 3 个文本框

    我有 2 个单选按钮 选择一个文本框时 我想显示 3 个文本框 并在选择其他文本框时隐藏它 这是代码 这是我的 2 个单选按钮
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 将两个数字相加将它们连接起来而不是计算总和

    我将两个数字相加 但没有得到正确的值 例如 做1 2返回 12 而不是 3 我在这段代码中做错了什么 function myFunction var y document getElementById txt1 value var z do
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than
  • Jquery 以编程方式更改

    文本

    编辑 解决方案是将其添加到个人资料页面而不是性别页面 profile live pageinit function event p pTest text localStorage getItem gender 我在列表视图中有一个带有一些文
  • 区分 NaN 输入和输入类型为“number”的空输入

    我想使用 type number 的表单输入 并且只允许输入数字
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update

随机推荐

  • 如何处理错误并正确使用 Promise

    首先 我正在对我发布的这个问题进行跟进不久前 https stackoverflow com questions 53940043 unhandledpromiserejectionwarning this error originated
  • 如何从 VIM 运行 C 程序?

    有没有一种方法可以从 VIM 编译并运行 C 程序而无需输入文件名 gcc o somename somename使用时 将替换为当前打开的文件的名称 当你的项目变得更大时 你还可以编写一个makefile并编译当前项目 make 如果有任
  • 如何加载高分辨率图像Windows Phone任务代理? [内存不足]

    众所周知 Windows Phone 8 任务代理只能使用 11 5MB 内存 我试图在后台任务代理中制作动态锁屏图像 当我得到 480 800 图像时 它工作正常 但当我将其更改为 768 1280 时 出现异常 内存不足 1 像素投射
  • 如何循环遍历 Golang 结构体中的字段以可扩展的方式获取和设置值?

    我有一个结构体 Person type Person struct Firstname string Lastname string Years uint8 然后我有这个结构的两个实例 PersonA 和 Person PersonA Ob
  • 如何保存WPF UI状态?

    我有一个TabControl在它下面我有几个元素 例如TreeView and DataGrid 当我展开树并调整数据网格列的大小时 如果我然后切换到另一个选项卡并返回 整个 UI 状态都会被忘记 我必须重新展开树并调整列的大小 是否有一种
  • Android 没有按钮的对话框

    我可以创建一个没有否定或肯定按钮的对话框吗 特定行动后会自我毁灭吗 AlertDialog Builder dialog detect new AlertDialog Builder MainActivity this dialog set
  • 如何在 Swift 中将图像添加到 ARSCNScene 中?

    我在开发 Swift 游乐场时偶然发现了一个障碍 我想将图像添加到我的 ARSCNScene ARKit SceneKit 不是作为背景 而是作为具有位置和所有内容的实际节点 有谁知道这是否可能 我在网上找不到任何东西 谢谢 您可以轻松地将
  • 如何更改 vagrant 安装的 puppet 版本

    我在 Precision32 Base Box 上使用 vagrant 1 0 1 来玩木偶 配置工作正常 我的清单正在执行 默认情况下 vagrant 在 guest 虚拟机上的 opt vagrant ruby bin puppet 下
  • 使用 awk 在匹配后连接行

    我有一个如下所示的列表 gt aaa AAAAAAAAAA gt bbb BBBBBBBBBBBBBBBB gt ccc CCCCCCC 我想使用 awk 在 或 之后加入下一行 并使用逗号分隔符 这样它看起来像这样 gt aaa AAAA
  • C# Server.URLEncode 的 JavaScript 等价物是什么?

    C Server URLEncode 的 JavaScript 等价物是什么 encodeURI http xkr us articles javascript encode compare ref js msdn http xkr us
  • Maven 问题:项目构建错误:未解析的父 POM

    项目构建错误 无法解析 org springframework gs spring boot 0 1 0 的父 POM 无法从以下位置传输 org springframework boot spring boot starter paren
  • 在 Azure DevOps 中,是否有一种简单的方法可以将 wiki 从一个存储库复制到另一个存储库?

    我看到有一个 克隆维基 链接 但我不知道是否可以将克隆维基导入到另一个存储库中 我们正在做的是将我们的存储库从我们自己的 Azure 帐户移动到客户的 Azure 帐户 这样 wiki 将丢失 我不想手动复制所有 wiki 页面 是否可以将
  • 如何使用Sphinx管理多个版本的文档? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我维护一个用 C 编写的小型库项目 我想使用 Sphinx 来维护每个发行版本的图书馆网站 用户文档 我发现 类似的问题如何管理多个版本 htt
  • 无法在jsf页面中执行Javascript

    我是jsf新手 我一直在尝试用 commandbutton 做一个简单的 Javascript 函数 我尝试了很多次 但甚至无法发出警报消息 这是我的代码的一部分 请任何人指导我 并告诉我出了什么问题 以及我应该做什么才能让它运行
  • 如何在 UINavigationBar 中设置自定义字体?

    如何在 UINavigationBar 中设置自定义字体 我需要 tahoma 字体 void viewDidLoad self title My text 完全有可能 只是做起来有点棘手 一旦你找到了你需要的字体 iOS 已经附带的替代品
  • PHP 中使用 @ 运算符抑制错误

    您认为 在您可能正在处理错误的情况下 使用 运算符来抑制 PHP 中的错误 警告是否有效 如果是这样 你会在什么情况下使用它 欢迎使用代码示例 编辑 回复者注意 我不想关闭错误报告 但是 例如 常见的做法是使用 fopen file 然后检
  • 向 Apache Pdfbox 添加字体?

    有没有办法将其他字体样式添加到 Apache Pdfbox 中 我们目前正在尝试解决在我们的系统中打印 PDF 的问题 目前正在使用PDF渲染器 https java net projects pdf renderer 我一直在寻找各种替代
  • 使用 AVFoundation 播放 wav 声音文件

    我正在使用 AVFoundation 播放 wav 文件 但我无法让它播放 也没有出现错误或警告 XCode 是 4 2 设备是 iOS 5 IBAction playSelectedAlarm id sender UIButton but
  • 在 Firefox Web 扩展中使用数据库

    我想在我的 Firefox Web 扩展中使用一些数据库 我已经找到了this https developer mozilla org en US docs Mozilla Add ons WebExtensions API storage
  • 在 d3 中动态创建图例

    我在用d3 scale quantize 和colorBrewer获得色阶 var extent d3 extent collection features function d return d properties mean var c