NVD3 javascript:为散点图中的点添加颜色
作者:互联网
我试图从一些具有x,y和z值的数据制作散点图.
我的代码与NVD3网站上的示例相同,
http://nvd3.org/ghpages/scatter.html,除了我还计算z值.
让我们说z = x y.我想通过在两种颜色之间插值来设置颜色,而不是改变半径的值.
所有点都显示在图表上,但我无法弄清楚如何为各个点设置颜色,仅适用于系列.为简单起见,我首先尝试将点设置为静态颜色,如下所示:
[{"key":"X Plus Y","values":[{"x":0,"y":0,"z":0,"color":"#ff0000"}, ...]
但这不起作用,所以我想我需要在javascript中这样做.我看了一下scatterChart.js,但没有看到一个简单的方法.但我绝不是一个JavaScript专家,所以我可能很容易错过一些东西.
关于如何做到这一点的任何建议?我是否需要学习如何创建新的模型文件?
我还想在工具提示中显示z值,但这将是第2步.
谢谢
解决方法:
我刚遇到同样的问题,并找到了适合我的用例的解决方法 – YMMV.
基本上,我的理解(来自NVD3的源代码)是你确实只能为系列设置颜色,而不是为单个点设置颜色:因此我确实添加了一个颜色:’#rrggbb’项目,无论如何都像你的示例中那样(只是因为我更容易构建这样的数据结构),然后从中设置每个系列的颜色值(我使用underscore.js,但你应该能够在纯JavaScript中执行此操作):
final_groups = _.map(groups, function(values, group_id) {
return { key: group_id, color: values[0].color, values: values };
});
如果您需要使用颜色连续体而不是逐点或使用离散比例设置颜色,我使用mbostock’s advice from this answer让D3为我生成颜色值:
function compute_color_on_linear_scale(data, value, colorProperty, colorRange) {
// get a list of all the groups (this works if the colorProperty,
// aka z in your case, is numeric, otherwise the sort function
// needs to be adjusted accordingly)
// In your case, you could just write item.z rather than item[colorProperty]
// if your function doesn't need to be generic, and in that case you can
// omit the colorProperty argument from the argument list altogether
categories = _.uniq(_.map(data, function(item) {
return item[colorProperty];
}).sort(function(a,b){return a - b}), true);
// if no color range was provided, set a default one
if(typeof colorRange === 'undefined') { colorRange = ['red', 'green']; }
// this is mbostock's magic enchantment from his reply linked above
var color = d3.scale.ordinal()
.domain(categories)
.range(d3.range(categories.length).map(d3.scale.linear()
.domain([0, categories.length - 1])
.range(colorRange)
.interpolate(d3.interpolateLab)));
return color(value);
}
这应该可以解决问题.我最后的目的是隐藏传说,因为在这种情况下这没有多大意义.
至于在工具提示中显示z值,您需要覆盖scatterChart()的默认tooltipContent()函数,例如:
var chart = nv.models.scatterChart()
.showDistX(true)
.showDistY(true)
.tooltipContent(function(key, x, y, obj) {
return '<h3>' + obj.point.label + ' (' + key + ')</h3>';
});
你可以根据需要自定义它 – 如果你只是添加console.log(参数);在函数开头,您可以在浏览器的开发人员工具中检查您可以在工具提示中使用哪些数据:
[...]
.tooltipContent(function(key, x, y, obj) {
console.log(arguments);
return '<h3>' + obj.point.label + ' (' + key + ')</h3>';
});
标签:javascript,plot,scatter-plot,nvd3-js,scatter 来源: https://codeday.me/bug/20190517/1123196.html