Javascript 如何将字符串数组映射到d3中两种颜色之间的线性插值?

Javascript 如何将字符串数组映射到d3中两种颜色之间的线性插值?,javascript,arrays,dictionary,d3.js,scale,Javascript,Arrays,Dictionary,D3.js,Scale,如果您有一个字符串数组,并且希望生成一个从字符串映射到两个颜色值之间的线性插值的比例,那么使用d3最简单的方法是什么?以下是我的尝试,但似乎没有按我希望的方式进行: var data = [ { category: 'String 1' }, { category: 'String 2' }, { category: 'String 3' } ]; // this could be any lengt

如果您有一个字符串数组,并且希望生成一个从字符串映射到两个颜色值之间的线性插值的比例,那么使用d3最简单的方法是什么?以下是我的尝试,但似乎没有按我希望的方式进行:

var data = [
    {
        category: 'String 1'
    },
    {
        category: 'String 2'
    },
    {
        category: 'String 3'
    }
]; // this could be any length, and also expecting repeat categories

var categories = d3.set(
        data.map(function (datum) {
            return datum.category;
        })
    ).values();

var index = d3.scale.ordinal()
    .domain(categories)
    .range(
        categories.map(function (category, index) {
            return index;
        })
    );

var color = d3.scale.linear()
    .domain(index.range())
    .range(['#00D6F7', '#165966']);

color(index('String 3')); // #2C0000 instead of #165966 like I wanted
color(index('String 2')); // #165966 instead of halfway between the two colors

听起来你想要一个。@Larskothoff事实上我发现了这个问题,
应该是
.domain([0,categories.length-1])
,但我想知道是否有人能提供一个更简单方法的完整示例。谢谢你的链接。听起来你想要一个。@Larskothoff事实上我发现了这个问题,
应该是
.domain([0,categories.length-1])
,但我想知道是否有人能提供一个更简单方法的完整示例。谢谢你的链接。