Pokemon Viz
Compare attacks as a horizontal barchart[top]
Data
Desired Viz
Actual Viz
<g transform="translate(0 0)">
<rect
width="48"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 20)">
<rect
width="104"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 40)">
<rect
width="52"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 60)">
<rect
width="100"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 80)">
<rect
width="82"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 100)">
<rect
width="62"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 120)">
<rect
width="49"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g><g transform="translate(0 0)">
<rect
width="48"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 20)">
<rect
width="104"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 40)">
<rect
width="52"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 60)">
<rect
width="100"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 80)">
<rect
width="82"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 100)">
<rect
width="62"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>
<g transform="translate(0 120)">
<rect
width="49"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>Solution: SVG Template
<g transform="translate(0 ${d.y})">
<rect
width="${d.width}"
height="20"
style="fill:${d.color};
stroke-width:3;
stroke:rgb(0,0,0)" />
</g>Solution: Javascript
function computeX(d, i) {
return 0
}
function computeWidth(d, i) {
return d.Attack
}
function computeY(d, i) {
return i * 20
}
function computeColor(d, i) {
return 'red'
}
var viz = _.map(data, function(d, i){
return {
x: computeX(d, i),
y: computeY(d, i),
width: computeWidth(d, i),
color: computeColor(d, i)
}
})
console.log(viz)
var result = _.map(viz, function(d){
// invoke the compiled template function on each viz data
return template({d: d})
})
return result.join('\n')Console
[{"x":0,"y":0,"width":48,"color":"red"},{"x":0,"y":20,"width":104,"color":"red"},{"x":0,"y":40,"width":52,"color":"red"},{"x":0,"y":60,"width":100,"color":"red"},{"x":0,"y":80,"width":82,"color":"red"},{"x":0,"y":100,"width":62,"color":"red"},{"x":0,"y":120,"width":49,"color":"red"}]
Place a label over each bar[top]
Data
Desired Viz
Actual Viz
<g transform="translate(0 0)">
<rect
width="48"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Squirtle
</text>
</g>
<g transform="translate(0 20)">
<rect
width="104"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Charizard Y
</text>
</g>
<g transform="translate(0 40)">
<rect
width="52"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Charmander
</text>
</g>
<g transform="translate(0 60)">
<rect
width="100"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Venusaur
</text>
</g>
<g transform="translate(0 80)">
<rect
width="82"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Venusaur
</text>
</g>
<g transform="translate(0 100)">
<rect
width="62"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Ivysaur
</text>
</g>
<g transform="translate(0 120)">
<rect
width="49"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Bulbasaur
</text>
</g><g transform="translate(0 0)">
<rect
width="96"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Squirtle</text>
</g>
<g transform="translate(0 20)">
<rect
width="208"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Mega Charizard Y</text>
</g>
<g transform="translate(0 40)">
<rect
width="104"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Charmander</text>
</g>
<g transform="translate(0 60)">
<rect
width="200"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Mega Venusaur</text>
</g>
<g transform="translate(0 80)">
<rect
width="164"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Venusaur</text>
</g>
<g transform="translate(0 100)">
<rect
width="124"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Ivysaur</text>
</g>
<g transform="translate(0 120)">
<rect
width="98"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Bulbasaur</text>
</g>Solution: SVG Template
<g transform="translate(0 ${d.y})">
<rect
width="${d.width}"
height="20"
style="fill:${d.color};
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">${d.label}</text>
</g>Solution: Javascript
function computeX(d, i) {
return 0
}
function computeWidth(d, i) {
return d.Attack*2
}
function computeY(d, i) {
return i * 20
}
function computeColor(d, i) {
return 'red'
}
function computeLabel(d, i) {
return d.Name
}
var viz = _.map(data, function(d, i){
return {
x: computeX(d, i),
y: computeY(d, i),
width: computeWidth(d, i),
color: computeColor(d, i),
label: computeLabel(d, i)
}
})
console.log(viz)
var result = _.map(viz, function(d){
// invoke the compiled template function on each viz data
return template({d: d})
})
return result.join('\n')Console
[{"x":0,"y":0,"width":96,"color":"red","label":"Squirtle"},{"x":0,"y":20,"width":208,"color":"red","label":"Mega Charizard Y"},{"x":0,"y":40,"width":104,"color":"red","label":"Charmander"},{"x":0,"y":60,"width":200,"color":"red","label":"Mega Venusaur"},{"x":0,"y":80,"width":164,"color":"red","label":"Venusaur"},{"x":0,"y":100,"width":124,"color":"red","label":"Ivysaur"},{"x":0,"y":120,"width":98,"color":"red","label":"Bulbasaur"}]
Place a label to the left of each bar[top]
Data
Desired Viz
Actual Viz
<g transform="translate(0 0)">
<rect
x="120"
width="48"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Squirtle
</text>
</g>
<g transform="translate(0 20)">
<rect
x="120"
width="104"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Charizard Y
</text>
</g>
<g transform="translate(0 40)">
<rect
x="120"
width="52"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Charmander
</text>
</g>
<g transform="translate(0 60)">
<rect
x="120"
width="100"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Venusaur
</text>
</g>
<g transform="translate(0 80)">
<rect
x="120"
width="82"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Venusaur
</text>
</g>
<g transform="translate(0 100)">
<rect
x="120"
width="62"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Ivysaur
</text>
</g>
<g transform="translate(0 120)">
<rect
x="120"
width="49"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Bulbasaur
</text>
</g><g transform="translate(0 0)">
<rect
x="120"
width="48"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Squirtle</text>
</g>
</g>
<g transform="translate(0 20)">
<rect
x="120"
width="104"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Mega Charizard Y</text>
</g>
</g>
<g transform="translate(0 40)">
<rect
x="120"
width="52"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Charmander</text>
</g>
</g>
<g transform="translate(0 60)">
<rect
x="120"
width="100"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Mega Venusaur</text>
</g>
</g>
<g transform="translate(0 80)">
<rect
x="120"
width="82"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Venusaur</text>
</g>
</g>
<g transform="translate(0 100)">
<rect
x="120"
width="62"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Ivysaur</text>
</g>
</g>
<g transform="translate(0 120)">
<rect
x="120"
width="49"
height="20"
style="fill:red;
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Bulbasaur</text>
</g>
</g>Solution: SVG Template
<g transform="translate(0 ${d.y})">
<rect
x="${d.x}"
width="${d.width}"
height="20"
style="fill:${d.color};
stroke-width:3;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">${d.label}</text>
</g>
</g>Solution: Javascript
function computeX(d, i) {
return 120
}
function computeWidth(d, i) {
return d.Attack
}
function computeY(d, i) {
return i * 20
}
function computeColor(d, i) {
return 'red'
}
function computeLabel(d, i) {
return d.Name
}
var viz = _.map(data, function(d, i){
return {
x: computeX(d, i),
y: computeY(d, i),
width: computeWidth(d, i),
color: computeColor(d, i),
label: computeLabel(d, i)
}
})
console.log(viz)
var result = _.map(viz, function(d){
// invoke the compiled template function on each viz data
return template({d: d})
})
return result.join('\n')Console
[{"x":120,"y":0,"width":48,"color":"red","label":"Squirtle"},{"x":120,"y":20,"width":104,"color":"red","label":"Mega Charizard Y"},{"x":120,"y":40,"width":52,"color":"red","label":"Charmander"},{"x":120,"y":60,"width":100,"color":"red","label":"Mega Venusaur"},{"x":120,"y":80,"width":82,"color":"red","label":"Venusaur"},{"x":120,"y":100,"width":62,"color":"red","label":"Ivysaur"},{"x":120,"y":120,"width":49,"color":"red","label":"Bulbasaur"}]
Compare attack and defense points side by side[top]
Data
Desired Viz
Actual Viz
<g transform="translate(120 0)">
<rect
x="-48"
width="48"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x="0"
width="65"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Squirtle
</text>
</g>
<g transform="translate(120 20)">
<rect
x="-104"
width="104"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x="0"
width="78"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Charizard Y
</text>
</g>
<g transform="translate(120 40)">
<rect
x="-52"
width="52"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x="0"
width="43"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Charmander
</text>
</g>
<g transform="translate(120 60)">
<rect
x="-100"
width="100"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x="0"
width="123"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Venusaur
</text>
</g>
<g transform="translate(120 80)">
<rect
x="-82"
width="82"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x="0"
width="83"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Venusaur
</text>
</g>
<g transform="translate(120 100)">
<rect
x="-62"
width="62"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x="0"
width="63"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Ivysaur
</text>
</g>
<g transform="translate(120 120)">
<rect
x="-49"
width="49"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x="0"
width="49"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Bulbasaur
</text>
</g><g transform="translate(120 0)">
<rect
x="-48"
width="48"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x=0
width="65"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Squirtle</text>
</g>
<g transform="translate(120 20)">
<rect
x="-104"
width="104"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x=0
width="78"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Mega Charizard Y</text>
</g>
<g transform="translate(120 40)">
<rect
x="-52"
width="52"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x=0
width="43"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Charmander</text>
</g>
<g transform="translate(120 60)">
<rect
x="-100"
width="100"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x=0
width="123"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Mega Venusaur</text>
</g>
<g transform="translate(120 80)">
<rect
x="-82"
width="82"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x=0
width="83"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Venusaur</text>
</g>
<g transform="translate(120 100)">
<rect
x="-62"
width="62"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x=0
width="63"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Ivysaur</text>
</g>
<g transform="translate(120 120)">
<rect
x="-49"
width="49"
height="20"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x=0
width="49"
height="20"
style="fill:blue;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Bulbasaur</text>
</g>Solution: SVG Template
<g transform="translate(120 ${d.y})">
<rect
x="-${d.width.Attack}"
width="${d.width.Attack}"
height="20"
style="fill:${d.color.Attack};
stroke-width:1;
stroke:rgb(0,0,0)" />
<rect
x=0
width="${d.width.Defend}"
height="20"
style="fill:${d.color.Defend};
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">${d.label}</text>
</g>Solution: Javascript
function computeX(d, i) {
return 0
}
function computeWidth(d, i) {
return {'Attack': d.Attack, 'Defend': d.Defense}
}
function computeY(d, i) {
return i * 20
}
function computeColor(d, i) {
return {'Attack': 'red', 'Defend': 'blue'}
}
function computeLabel(d, i) {
return d.Name
}
var viz = _.map(data, function(d, i){
return {
x: computeX(d, i),
y: computeY(d, i),
width: computeWidth(d, i),
color: computeColor(d, i),
label: computeLabel(d, i)
}
})
console.log(viz)
var result = _.map(viz, function(d){
// invoke the compiled template function on each viz data
return template({d: d})
})
return result.join('\n')Console
[{"x":0,"y":0,"width":{"Attack":48,"Defend":65},"color":{"Attack":"red","Defend":"blue"},"label":"Squirtle"},{"x":0,"y":20,"width":{"Attack":104,"Defend":78},"color":{"Attack":"red","Defend":"blue"},"label":"Mega Charizard Y"},{"x":0,"y":40,"width":{"Attack":52,"Defend":43},"color":{"Attack":"red","Defend":"blue"},"label":"Charmander"},{"x":0,"y":60,"width":{"Attack":100,"Defend":123},"color":{"Attack":"red","Defend":"blue"},"label":"Mega Venusaur"},{"x":0,"y":80,"width":{"Attack":82,"Defend":83},"color":{"Attack":"red","Defend":"blue"},"label":"Venusaur"},{"x":0,"y":100,"width":{"Attack":62,"Defend":63},"color":{"Attack":"red","Defend":"blue"},"label":"Ivysaur"},{"x":0,"y":120,"width":{"Attack":49,"Defend":49},"color":{"Attack":"red","Defend":"blue"},"label":"Bulbasaur"}]
Compare attack points and represent defense points using bar heights[top]
Data
Desired Viz
Actual Viz
<g transform="translate(0 0)">
<rect width="48"
height="65"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Squirtle
</text>
</g>
<g transform="translate(0 65)">
<rect width="104"
height="78"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Charizard Y
</text>
</g>
<g transform="translate(0 143)">
<rect width="52"
height="43"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Charmander
</text>
</g>
<g transform="translate(0 186)">
<rect width="100"
height="123"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Venusaur
</text>
</g>
<g transform="translate(0 309)">
<rect width="82"
height="83"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Venusaur
</text>
</g>
<g transform="translate(0 392)">
<rect width="62"
height="63"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Ivysaur
</text>
</g>
<g transform="translate(0 455)">
<rect width="49"
height="49"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Bulbasaur
</text>
</g><g transform="translate(0 0)">
<rect width="48"
height="65"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Squirtle</text>
</g>
<g transform="translate(0 65)">
<rect width="104"
height="78"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Mega Charizard Y</text>
</g>
<g transform="translate(0 143)">
<rect width="52"
height="43"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Charmander</text>
</g>
<g transform="translate(0 186)">
<rect width="100"
height="123"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Mega Venusaur</text>
</g>
<g transform="translate(0 309)">
<rect width="82"
height="83"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Venusaur</text>
</g>
<g transform="translate(0 392)">
<rect width="62"
height="63"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Ivysaur</text>
</g>
<g transform="translate(0 455)">
<rect width="49"
height="49"
style="fill:red;
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">Bulbasaur</text>
</g>Solution: SVG Template
<g transform="translate(0 ${d.y})">
<rect width="${d.width}"
height="${d.height}"
style="fill:${d.color};
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">${d.label}</text>
</g>Solution: Javascript
function computeX(d, i) {
return 0
}
function computeWidth(d, i) {
return d.Attack
}
function computeHeight(d, i) {
return d.Defense
}
function computeY(d, i) {
return _.sum(_.slice(data,0,i), function(d) {
return d.Defense
})
}
function computeColor(d, i) {
return 'red'
}
function computeLabel(d, i) {
return d.Name
}
var viz = _.map(data, function(d, i){
return {
x: computeX(d, i),
y: computeY(d, i),
height: computeHeight(d, i),
width: computeWidth(d, i),
color: computeColor(d, i),
label: computeLabel(d, i)
}
})
console.log(viz)
var result = _.map(viz, function(d){
// invoke the compiled template function on each viz data
return template({d: d})
})
return result.join('\n')Console
[{"x":0,"y":0,"height":65,"width":48,"color":"red","label":"Squirtle"},{"x":0,"y":65,"height":78,"width":104,"color":"red","label":"Mega Charizard Y"},{"x":0,"y":143,"height":43,"width":52,"color":"red","label":"Charmander"},{"x":0,"y":186,"height":123,"width":100,"color":"red","label":"Mega Venusaur"},{"x":0,"y":309,"height":83,"width":82,"color":"red","label":"Venusaur"},{"x":0,"y":392,"height":63,"width":62,"color":"red","label":"Ivysaur"},{"x":0,"y":455,"height":49,"width":49,"color":"red","label":"Bulbasaur"}]
Compare attack points and represent defense points using colors[top]
Data
Desired Viz
Actual Viz
<g transform="translate(0 0)">
<rect width="48"
height="20"
style="fill:rgb(135,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Squirtle
</text>
</g>
<g transform="translate(0 20)">
<rect width="104"
height="20"
style="fill:rgb(162,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Charizard Y
</text>
</g>
<g transform="translate(0 40)">
<rect width="52"
height="20"
style="fill:rgb(89,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Charmander
</text>
</g>
<g transform="translate(0 60)">
<rect width="100"
height="20"
style="fill:rgb(255,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Mega Venusaur
</text>
</g>
<g transform="translate(0 80)">
<rect width="82"
height="20"
style="fill:rgb(172,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Venusaur
</text>
</g>
<g transform="translate(0 100)">
<rect width="62"
height="20"
style="fill:rgb(131,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Ivysaur
</text>
</g>
<g transform="translate(0 120)">
<rect width="49"
height="20"
style="fill:rgb(102,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(0 15)">
Bulbasaur
</text>
</g><g transform="translate(0 0)">
<rect width="96"
height="20"
style="fill:rgb(135,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Squirtle</text>
</g>
<g transform="translate(0 20)">
<rect width="208"
height="20"
style="fill:rgb(162,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Mega Charizard Y</text>
</g>
<g transform="translate(0 40)">
<rect width="104"
height="20"
style="fill:rgb(89,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Charmander</text>
</g>
<g transform="translate(0 60)">
<rect width="200"
height="20"
style="fill:rgb(255,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Mega Venusaur</text>
</g>
<g transform="translate(0 80)">
<rect width="164"
height="20"
style="fill:rgb(172,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Venusaur</text>
</g>
<g transform="translate(0 100)">
<rect width="124"
height="20"
style="fill:rgb(131,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Ivysaur</text>
</g>
<g transform="translate(0 120)">
<rect width="98"
height="20"
style="fill:rgb(102,0,0);
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">Bulbasaur</text>
</g>Solution: SVG Template
<g transform="translate(0 ${d.y})">
<rect width="${d.width}"
height="20"
style="fill:${d.color};
stroke-width:1;
stroke:rgb(0,0,0)" />
<text transform="translate(5 15)">${d.label}</text>
</g>Solution: Javascript
function computeX(d, i) {
return 0
}
function computeWidth(d, i) {
return d['Attack']*2
}
function computeY(d, i) {
return i * 20
}
var maxDefense = _.max(_.pluck(data, 'Defense'))
// Compute the color based on Defense value w/max defense = brightest
function computeColor(d, i) {
var r = Math.round(d.Defense * (255/maxDefense))
return 'rgb(' + r + ',0,0)' // rgb(r,0,0)
}
var viz = _.map(data, function(d, i){
return {
x: computeX(d, i),
y: computeY(d, i),
width: computeWidth(d, i),
color: computeColor(d, i),
label: d.Name
}
})
console.log(viz)
var result = _.map(viz, function(d){
// invoke the compiled template function on each viz data
return template({d: d})
})
return result.join('\n')Console
[{"x":0,"y":0,"width":96,"color":"rgb(135,0,0)","label":"Squirtle"},{"x":0,"y":20,"width":208,"color":"rgb(162,0,0)","label":"Mega Charizard Y"},{"x":0,"y":40,"width":104,"color":"rgb(89,0,0)","label":"Charmander"},{"x":0,"y":60,"width":200,"color":"rgb(255,0,0)","label":"Mega Venusaur"},{"x":0,"y":80,"width":164,"color":"rgb(172,0,0)","label":"Venusaur"},{"x":0,"y":100,"width":124,"color":"rgb(131,0,0)","label":"Ivysaur"},{"x":0,"y":120,"width":98,"color":"rgb(102,0,0)","label":"Bulbasaur"}]