有没有一种方法可以在树图中为特定 parent 的孩子实现颜色阴影
Is there a way of implementing shades of colors in treemap for childs of specific parent
我有一个带有 3 parents(香蕉、苹果、橙子)的 jsfiddle,当树图呈现时,例如香蕉有 objects 和值(Rick、Anne、Susane ) 并且它呈现的是相同的颜色(在本例中为黄色),我的目标是例如如果 object 的值是 10 是黄色而不模糊到黄色,并且如果 object 的值1 几乎是白色,略带黄色。
是否有处理该问题的算法?我很确定这是人们已知的要求。
现在我设法在一个 fiddle 中创建那些 parents 有孩子的,在另一个中我设法创建了该特定颜色的不同版本的阴影
这是parents和孩子们的数据
{
id: 'A',
name: 'Apples',
color: "#EC2500"
}, {
id: 'B',
name: 'Bananas',
color: "#ECE100"
}, {
id: 'O',
name: 'Oranges',
color: '#EC9800'
}, {
name: 'Anne',
parent: 'A',
value: 5
}, {
name: 'Rick',
parent: 'A',
value: 3
}, {
name: 'Peter',
parent: 'A',
value: 4
}, {
name: 'Anne',
parent: 'B',
value: 4
}
这是我想在上面 fiddle 中使用不同深浅的黄色、红色和橙色实现的结果
{
colorAxis: {
minColor: '#FFFFFF',
maxColor: '#FFFF33'
// maxColor:Highcharts.getOptions().colors[0]
},
series: [{
type: 'treemap',
layoutAlgorithm: 'squarified',
data: [{
name: 'Rick',
value: 6,
colorValue: 1
}, {
name: 'Anne',
value: 6,
colorValue: 2
}, {
name: 'Susane',
value: 4,
colorValue: 3
}, {
name: 'Peter',
value: 3,
colorValue: 4
}, {
name: 'E',
value: 2,
colorValue: 5
}, {
name: 'F',
value: 2,
colorValue: 6
}, {
name: 'G',
value: 1,
colorValue: 7
}]
}],
title: {
text: 'Highcharts Treemap'
}
}
这是带有黄色阴影的 fiddle
https://jsfiddle.net/bpc7fd49/1/
这是 fiddle 我尝试实现这些色调的地方,而不是只有一种版本的黄红色或橙色
https://jsfiddle.net/7z5ngLva/3/
我找到了答案
stops = [
[0.25, '#EC2500'],
[0.5, '#ECE100'],
[0.75, '#EC9800'],
[1, '#9EDE00']
],
distance = stops[1][0] - stops[0][0],
modifiedStops = [];
$.each(stops, function (i, stop) {
modifiedStops.push([stop[0] - distance - 0.001, '#ffffff']);
modifiedStops.push(stop);
modifiedStops.push([stop[0] + 0.001, stop[1]]);
});
整个fiddlehttp://jsfiddle.net/4egy85fw/
如果您不想使用 colorAxis
形式 heatmap
,您可以使用 tweenTo
内部方法计算点的颜色:
(function(H) {
var treemapProto = Highcharts.seriesTypes.treemap.prototype,
minVal,
maxVal,
values,
children;
Highcharts.wrap(treemapProto, 'translate', function(proceed) {
proceed.apply(this, Array.prototype.slice.call(arguments, 1));
this.values = {};
this.points.forEach(function(point) {
children = point.node.children;
if (children.length) {
minVal = null;
maxVal = null;
children.forEach(function(child) {
minVal = minVal ? Math.min(minVal, child.val) : child.val;
maxVal = maxVal ? Math.max(maxVal, child.val) : child.val;
});
this.values[point.id] = {
minVal: minVal,
maxVal: maxVal,
minColor: point.minColor,
maxColor: point.maxColor
};
} else {
values = this.values[point.parent];
point.color = H.color(values.minColor).tweenTo(
H.color(values.maxColor),
(point.value - values.minVal) / (values.maxVal - values.minVal)
);
}
}, this);
});
})(Highcharts);
我有一个带有 3 parents(香蕉、苹果、橙子)的 jsfiddle,当树图呈现时,例如香蕉有 objects 和值(Rick、Anne、Susane ) 并且它呈现的是相同的颜色(在本例中为黄色),我的目标是例如如果 object 的值是 10 是黄色而不模糊到黄色,并且如果 object 的值1 几乎是白色,略带黄色。 是否有处理该问题的算法?我很确定这是人们已知的要求。
现在我设法在一个 fiddle 中创建那些 parents 有孩子的,在另一个中我设法创建了该特定颜色的不同版本的阴影
这是parents和孩子们的数据
{
id: 'A',
name: 'Apples',
color: "#EC2500"
}, {
id: 'B',
name: 'Bananas',
color: "#ECE100"
}, {
id: 'O',
name: 'Oranges',
color: '#EC9800'
}, {
name: 'Anne',
parent: 'A',
value: 5
}, {
name: 'Rick',
parent: 'A',
value: 3
}, {
name: 'Peter',
parent: 'A',
value: 4
}, {
name: 'Anne',
parent: 'B',
value: 4
}
这是我想在上面 fiddle 中使用不同深浅的黄色、红色和橙色实现的结果
{
colorAxis: {
minColor: '#FFFFFF',
maxColor: '#FFFF33'
// maxColor:Highcharts.getOptions().colors[0]
},
series: [{
type: 'treemap',
layoutAlgorithm: 'squarified',
data: [{
name: 'Rick',
value: 6,
colorValue: 1
}, {
name: 'Anne',
value: 6,
colorValue: 2
}, {
name: 'Susane',
value: 4,
colorValue: 3
}, {
name: 'Peter',
value: 3,
colorValue: 4
}, {
name: 'E',
value: 2,
colorValue: 5
}, {
name: 'F',
value: 2,
colorValue: 6
}, {
name: 'G',
value: 1,
colorValue: 7
}]
}],
title: {
text: 'Highcharts Treemap'
}
}
这是带有黄色阴影的 fiddle https://jsfiddle.net/bpc7fd49/1/ 这是 fiddle 我尝试实现这些色调的地方,而不是只有一种版本的黄红色或橙色 https://jsfiddle.net/7z5ngLva/3/
我找到了答案
stops = [
[0.25, '#EC2500'],
[0.5, '#ECE100'],
[0.75, '#EC9800'],
[1, '#9EDE00']
],
distance = stops[1][0] - stops[0][0],
modifiedStops = [];
$.each(stops, function (i, stop) {
modifiedStops.push([stop[0] - distance - 0.001, '#ffffff']);
modifiedStops.push(stop);
modifiedStops.push([stop[0] + 0.001, stop[1]]);
});
整个fiddlehttp://jsfiddle.net/4egy85fw/
如果您不想使用 colorAxis
形式 heatmap
,您可以使用 tweenTo
内部方法计算点的颜色:
(function(H) {
var treemapProto = Highcharts.seriesTypes.treemap.prototype,
minVal,
maxVal,
values,
children;
Highcharts.wrap(treemapProto, 'translate', function(proceed) {
proceed.apply(this, Array.prototype.slice.call(arguments, 1));
this.values = {};
this.points.forEach(function(point) {
children = point.node.children;
if (children.length) {
minVal = null;
maxVal = null;
children.forEach(function(child) {
minVal = minVal ? Math.min(minVal, child.val) : child.val;
maxVal = maxVal ? Math.max(maxVal, child.val) : child.val;
});
this.values[point.id] = {
minVal: minVal,
maxVal: maxVal,
minColor: point.minColor,
maxColor: point.maxColor
};
} else {
values = this.values[point.parent];
point.color = H.color(values.minColor).tweenTo(
H.color(values.maxColor),
(point.value - values.minVal) / (values.maxVal - values.minVal)
);
}
}, this);
});
})(Highcharts);