mirror of
https://github.com/apache/superset.git
synced 2024-09-12 16:49:40 -04:00
Allowing for normalizing across x or y
This commit is contained in:
parent
0714dc62d0
commit
4e6e20daa4
@ -116,6 +116,14 @@ class FormFactory(object):
|
|||||||
'black_white']),
|
'black_white']),
|
||||||
default='fire',
|
default='fire',
|
||||||
description=""),
|
description=""),
|
||||||
|
'normalize_across': SelectField(
|
||||||
|
'Normalize Across', choices=self.choicify([
|
||||||
|
'heatmap', 'x', 'y']),
|
||||||
|
default='heatmap',
|
||||||
|
description=(
|
||||||
|
"Color will be rendered based on a ratio "
|
||||||
|
"of the cell against the sum of across this "
|
||||||
|
"criteria")),
|
||||||
'canvas_image_rendering': SelectField(
|
'canvas_image_rendering': SelectField(
|
||||||
'Rendering', choices=(
|
'Rendering', choices=(
|
||||||
('pixelated', 'pixelated (Sharp)'),
|
('pixelated', 'pixelated (Sharp)'),
|
||||||
|
@ -25,7 +25,11 @@ var color = function(){
|
|||||||
// Returns a linear scaler our of an array of color
|
// Returns a linear scaler our of an array of color
|
||||||
if(!Array.isArray(colors))
|
if(!Array.isArray(colors))
|
||||||
colors = spectrums[colors];
|
colors = spectrums[colors];
|
||||||
var ext = d3.extent(data, accessor);
|
if(data !== undefined)
|
||||||
|
var ext = d3.extent(data, accessor);
|
||||||
|
else
|
||||||
|
var ext = [0,1];
|
||||||
|
|
||||||
var points = [];
|
var points = [];
|
||||||
var chunkSize = (ext[1] - ext[0]) / colors.length;
|
var chunkSize = (ext[1] - ext[0]) / colors.length;
|
||||||
$.each(colors, function(i, c){
|
$.each(colors, function(i, c){
|
||||||
|
@ -7,6 +7,7 @@ px.registerViz('heatmap', function(slice) {
|
|||||||
var height = slice.height();
|
var height = slice.height();
|
||||||
var hmWidth = width - (margins.l + margins.r)
|
var hmWidth = width - (margins.l + margins.r)
|
||||||
var hmHeight = height - (margins.b + margins.t)
|
var hmHeight = height - (margins.b + margins.t)
|
||||||
|
var fp = d3.format('.3p');
|
||||||
d3.json(slice.jsonEndpoint(), function(error, payload) {
|
d3.json(slice.jsonEndpoint(), function(error, payload) {
|
||||||
var matrix = {};
|
var matrix = {};
|
||||||
if (error){
|
if (error){
|
||||||
@ -39,9 +40,7 @@ px.registerViz('heatmap', function(slice) {
|
|||||||
var X = 0, Y = 1;
|
var X = 0, Y = 1;
|
||||||
var heatmapDim = [xRbScale.domain().length, yRbScale.domain().length];
|
var heatmapDim = [xRbScale.domain().length, yRbScale.domain().length];
|
||||||
|
|
||||||
var color = px.color.colorScalerFactory(
|
var color = px.color.colorScalerFactory(fd.linear_color_scheme);
|
||||||
fd.linear_color_scheme, data, function(d){return d.v});
|
|
||||||
|
|
||||||
|
|
||||||
var scale = [
|
var scale = [
|
||||||
d3.scale.linear()
|
d3.scale.linear()
|
||||||
@ -99,6 +98,7 @@ px.registerViz('heatmap', function(slice) {
|
|||||||
s += "<div><b>" + fd.all_columns_x + ": </b>" + obj.x + "<div>"
|
s += "<div><b>" + fd.all_columns_x + ": </b>" + obj.x + "<div>"
|
||||||
s += "<div><b>" + fd.all_columns_y +": </b>" + obj.y + "<div>"
|
s += "<div><b>" + fd.all_columns_y +": </b>" + obj.y + "<div>"
|
||||||
s += "<div><b>" + fd.metric + ": </b>" + obj.v + "<div>"
|
s += "<div><b>" + fd.metric + ": </b>" + obj.v + "<div>"
|
||||||
|
s += "<div><b>%: </b>" + fp(obj.perc) + "<div>"
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -146,7 +146,7 @@ px.registerViz('heatmap', function(slice) {
|
|||||||
image = context.createImageData(heatmapDim[0], heatmapDim[1]);
|
image = context.createImageData(heatmapDim[0], heatmapDim[1]);
|
||||||
var pixs = {};
|
var pixs = {};
|
||||||
$.each(data, function(i, d) {
|
$.each(data, function(i, d) {
|
||||||
var c = d3.rgb(color(d.v));
|
var c = d3.rgb(color(d.perc));
|
||||||
var x = xScale(d.x);
|
var x = xScale(d.x);
|
||||||
var y = yScale(d.y);
|
var y = yScale(d.y);
|
||||||
pixs[x + (y*xScale.domain().length)] = c;
|
pixs[x + (y*xScale.domain().length)] = c;
|
||||||
|
@ -1213,6 +1213,7 @@ class HeatmapViz(BaseViz):
|
|||||||
'linear_color_scheme',
|
'linear_color_scheme',
|
||||||
('xscale_interval', 'yscale_interval'),
|
('xscale_interval', 'yscale_interval'),
|
||||||
'canvas_image_rendering',
|
'canvas_image_rendering',
|
||||||
|
'normalize_across',
|
||||||
)
|
)
|
||||||
},)
|
},)
|
||||||
def query_obj(self):
|
def query_obj(self):
|
||||||
@ -1233,6 +1234,23 @@ class HeatmapViz(BaseViz):
|
|||||||
else:
|
else:
|
||||||
df = df[[x, y, v]]
|
df = df[[x, y, v]]
|
||||||
df.columns = ['x', 'y', 'v']
|
df.columns = ['x', 'y', 'v']
|
||||||
|
norm = fd.get('normalize_across')
|
||||||
|
overall = False
|
||||||
|
if norm == 'heatmap':
|
||||||
|
overall = True
|
||||||
|
else:
|
||||||
|
gb = df.groupby(norm, group_keys=False)
|
||||||
|
if len(gb) <= 1:
|
||||||
|
overall = True
|
||||||
|
else:
|
||||||
|
df['perc'] = (
|
||||||
|
gb.apply(
|
||||||
|
lambda x: (x.v - x.v.min()) / (x.v.max() - x.v.min()))
|
||||||
|
)
|
||||||
|
if overall:
|
||||||
|
v = df.v
|
||||||
|
min_ = v.min()
|
||||||
|
df['perc'] = (v - min_) / (v.max() - min_)
|
||||||
return df.to_json(orient="records")
|
return df.to_json(orient="records")
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user