Skip to content

Instantly share code, notes, and snippets.

@michalskop
Last active March 16, 2016 07:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save michalskop/2e2a2aed537d1a5f03c3 to your computer and use it in GitHub Desktop.
Save michalskop/2e2a2aed537d1a5f03c3 to your computer and use it in GitHub Desktop.
Hemicycle: a single vote event
d3.hemicycle = function() {
function hemicycle(selection) {
selection.each(function(d, i) {
// options
var nvar = (typeof(n) === "function" ? n(d) : n),
gapvar = (typeof(gap) === "function" ? gap(d) : gap),
widthIconvar = (typeof(widthIcon) === "function" ? widthIcon(d) : widthIcon),
widthvar = (typeof(width) === "function" ? width(d) : width);
peoplevar = (typeof(people) === "function" ? people(d) : people);
var rmax = 1 + nvar.length *gapvar*widthIconvar;
var xScale = d3.scale.linear()
.domain([-1*rmax, rmax])
.range([0, widthvar]),
xxScale = d3.scale.linear()
.domain([0, 2*rmax])
.range([0, widthvar])
yScale = d3.scale.linear()
.domain([0, rmax])
.range([widthvar/2,0]);
var data = [],
s = [];
for (i in nvar) {
s.push((Math.PI/widthIconvar + Math.PI*i*gapvar-nvar[i])/(nvar[i] - 1));
var ninrow = nvar[i],
radwidth = Math.PI/(nvar[i]+(nvar[i]-1)*s[i]),
radspace = radwidth*s[i],
r = 1 + i*gapvar*widthIconvar;
for (j=0;j<ninrow;j++) {
var x = Math.cos(radwidth*(0.5+j)+j*radspace)*r,
y = Math.sin(radwidth*(0.5+j)+j*radspace)*r,
rot = -1*(radwidth*(0.5+j)+j*radspace)/Math.PI*180+90;
data.push({'x':x,'y':y,'rot':rot});
}
}
data.sort(function(x,y) {
if (x['rot'] < y['rot']) return -1;
if (x['rot'] > y['rot']) return 1;
return 0
});
var i = 0;
//for (j=0;j<group['n'];j++) {
for (key in peoplevar) {
person = peoplevar[key];
for (var attrname in person) { data[i][attrname] = person[attrname]; }
//data[i]['color'] = group['color'];
//data[i]['name'] = //group['name'];
data[i]['widthIcon'] = widthIconvar;
if (parseInt(person["option_code"]) == -1) data[i]['background'] = "red";
if (parseInt(person["option_code"]) == 0) data[i]['background'] = "gray";
if (parseInt(person["option_code"]) == 1) data[i]['background'] = "green";
i++;
}
/*var angle = [{'startangle':0,'endangle':Math.PI/2}];
var arci = d3.svg.arc()
.startAngle(function(d){return d.startangle})
.endAngle(function(d){return d.endangle})
.outerRadius(x0Scale(rmax))
.innerRadius(0);
var position = [xScale(0),yScale(0)];*/
var element = d3.select(this);
var icons = element.selectAll(".icon")
.data(data)
.enter().append("a")
.attr("transform",function(d) {return "rotate("+d.rot+","+xScale(d.x)+","+yScale(d.y)+")"})
.attr("xlink:href",function(d) {return d.link})
.on("mouseover", tip.show)
.on("mouseout", tip.hide)
;
//http://stackoverflow.com/questions/13203897/d3-nested-appends-and-data-flow
icons.append("text")
.attr('font-size',xxScale(
d.widthIcon*1.15/2))
.attr('font-family', 'FontAwesome')
.attr('x',function(d) {return xScale(d.x+d.widthIcon/2.8);})
.attr('y',function(d) {return yScale(d.y+d.widthIcon/2.8);})
.attr('fill',function(d) {return d.background})
.attr('fill-opacity', function(d) {
if (Math.abs(parseInt(d.option_code)) == 1) return 1;
else return 0.25;
})
.attr('text-anchor',"middle")
//.text('\uf005');
.text(function(d) {if (d.background == 'red') return '\uf0a3'; else return '\uf0a3';});
icons.append("text")
.attr('font-family', 'FontAwesome')
.attr('font-size',xxScale(
d.widthIcon*1.15)) //the icon is about 1.15times higher then wide
.attr('fill', function(d) {
return d.color;
})
.attr('fill-opacity', function(d) {
if (Math.abs(parseInt(d.option_code)) == 1) return 1;
else return 0.25;
})
.attr('stroke-width', function(d) {return 1;})
.attr('stroke-opacity',function(d) {
if (Math.abs(parseInt(d.option_code)) == 1) return 0.9;
else return 0.25;
})
.attr('text-anchor',"middle")
.attr('class', 'shadow')
.attr('x',function(d) {return xScale(d.x);})
.attr('y',function(d) {return yScale(d.y);})
.text('\uf007');
});
}
hemicycle.n = function(value) {
if (!arguments.length) return value;
n = value;
return hemicycle;
};
hemicycle.gap = function(value) {
if (!arguments.length) return value;
gap = value;
return hemicycle;
};
hemicycle.widthIcon = function(value) {
if (!arguments.length) return value;
widthIcon = value;
return hemicycle;
};
hemicycle.width = function(value) {
if (!arguments.length) return value;
width = value;
return hemicycle;
};
hemicycle.people = function(value) {
if (!arguments.length) return value;
people = value;
return hemicycle;
};
return hemicycle;
}
// d3.tip
// Copyright (c) 2013 Justin Palmer
//
// Tooltips for d3.js SVG visualizations
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module with d3 as a dependency.
define(['d3'], factory)
} else {
// Browser global.
root.d3.tip = factory(root.d3)
}
}(this, function (d3) {
// Public - contructs a new tooltip
//
// Returns a tip
return function() {
var direction = d3_tip_direction,
offset = d3_tip_offset,
html = d3_tip_html,
node = initNode(),
svg = null,
point = null,
target = null
function tip(vis) {
svg = getSVGNode(vis)
point = svg.createSVGPoint()
document.body.appendChild(node)
}
// Public - show the tooltip on the screen
//
// Returns a tip
tip.show = function() {
var args = Array.prototype.slice.call(arguments)
if(args[args.length - 1] instanceof SVGElement) target = args.pop()
var content = html.apply(this, args),
poffset = offset.apply(this, args),
dir = direction.apply(this, args),
nodel = d3.select(node),
i = directions.length,
coords,
scrollTop = document.documentElement.scrollTop || document.body.scrollTop,
scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft
nodel.html(content)
.style({ opacity: 1, 'pointer-events': 'all' })
while(i--) nodel.classed(directions[i], false)
coords = direction_callbacks.get(dir).apply(this)
nodel.classed(dir, true).style({
top: (coords.top + poffset[0]) + scrollTop + 'px',
left: (coords.left + poffset[1]) + scrollLeft + 'px'
})
return tip
}
// Public - hide the tooltip
//
// Returns a tip
tip.hide = function() {
nodel = d3.select(node)
nodel.style({ opacity: 0, 'pointer-events': 'none' })
return tip
}
// Public: Proxy attr calls to the d3 tip container. Sets or gets attribute value.
//
// n - name of the attribute
// v - value of the attribute
//
// Returns tip or attribute value
tip.attr = function(n, v) {
if (arguments.length < 2 && typeof n === 'string') {
return d3.select(node).attr(n)
} else {
var args = Array.prototype.slice.call(arguments)
d3.selection.prototype.attr.apply(d3.select(node), args)
}
return tip
}
// Public: Proxy style calls to the d3 tip container. Sets or gets a style value.
//
// n - name of the property
// v - value of the property
//
// Returns tip or style property value
tip.style = function(n, v) {
if (arguments.length < 2 && typeof n === 'string') {
return d3.select(node).style(n)
} else {
var args = Array.prototype.slice.call(arguments)
d3.selection.prototype.style.apply(d3.select(node), args)
}
return tip
}
// Public: Set or get the direction of the tooltip
//
// v - One of n(north), s(south), e(east), or w(west), nw(northwest),
// sw(southwest), ne(northeast) or se(southeast)
//
// Returns tip or direction
tip.direction = function(v) {
if (!arguments.length) return direction
direction = v == null ? v : d3.functor(v)
return tip
}
// Public: Sets or gets the offset of the tip
//
// v - Array of [x, y] offset
//
// Returns offset or
tip.offset = function(v) {
if (!arguments.length) return offset
offset = v == null ? v : d3.functor(v)
return tip
}
// Public: sets or gets the html value of the tooltip
//
// v - String value of the tip
//
// Returns html value or tip
tip.html = function(v) {
if (!arguments.length) return html
html = v == null ? v : d3.functor(v)
return tip
}
function d3_tip_direction() { return 'n' }
function d3_tip_offset() { return [0, 0] }
function d3_tip_html() { return ' ' }
var direction_callbacks = d3.map({
n: direction_n,
s: direction_s,
e: direction_e,
w: direction_w,
nw: direction_nw,
ne: direction_ne,
sw: direction_sw,
se: direction_se
}),
directions = direction_callbacks.keys()
function direction_n() {
var bbox = getScreenBBox()
return {
top: bbox.n.y - node.offsetHeight,
left: bbox.n.x - node.offsetWidth / 2
}
}
function direction_s() {
var bbox = getScreenBBox()
return {
top: bbox.s.y,
left: bbox.s.x - node.offsetWidth / 2
}
}
function direction_e() {
var bbox = getScreenBBox()
return {
top: bbox.e.y - node.offsetHeight / 2,
left: bbox.e.x
}
}
function direction_w() {
var bbox = getScreenBBox()
return {
top: bbox.w.y - node.offsetHeight / 2,
left: bbox.w.x - node.offsetWidth
}
}
function direction_nw() {
var bbox = getScreenBBox()
return {
top: bbox.nw.y - node.offsetHeight,
left: bbox.nw.x - node.offsetWidth
}
}
function direction_ne() {
var bbox = getScreenBBox()
return {
top: bbox.ne.y - node.offsetHeight,
left: bbox.ne.x
}
}
function direction_sw() {
var bbox = getScreenBBox()
return {
top: bbox.sw.y,
left: bbox.sw.x - node.offsetWidth
}
}
function direction_se() {
var bbox = getScreenBBox()
return {
top: bbox.se.y,
left: bbox.e.x
}
}
function initNode() {
var node = d3.select(document.createElement('div'))
node.style({
position: 'absolute',
top: 0,
opacity: 0,
'pointer-events': 'none',
'box-sizing': 'border-box'
})
return node.node()
}
function getSVGNode(el) {
el = el.node()
if(el.tagName.toLowerCase() == 'svg')
return el
return el.ownerSVGElement
}
// Private - gets the screen coordinates of a shape
//
// Given a shape on the screen, will return an SVGPoint for the directions
// n(north), s(south), e(east), w(west), ne(northeast), se(southeast), nw(northwest),
// sw(southwest).
//
// +-+-+
// | |
// + +
// | |
// +-+-+
//
// Returns an Object {n, s, e, w, nw, sw, ne, se}
function getScreenBBox() {
var targetel = target || d3.event.target,
bbox = {},
matrix = targetel.getScreenCTM(),
tbbox = targetel.getBBox(),
width = tbbox.width,
height = tbbox.height,
x = tbbox.x,
y = tbbox.y
point.x = x
point.y = y
bbox.nw = point.matrixTransform(matrix)
point.x += width
bbox.ne = point.matrixTransform(matrix)
point.y += height
bbox.se = point.matrixTransform(matrix)
point.x -= width
bbox.sw = point.matrixTransform(matrix)
point.y -= height / 2
bbox.w = point.matrixTransform(matrix)
point.x += width
bbox.e = point.matrixTransform(matrix)
point.x -= width / 2
point.y -= height / 2
bbox.n = point.matrixTransform(matrix)
point.y += height
bbox.s = point.matrixTransform(matrix)
return bbox
}
return tip
};
}));
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<style>
/*http://www.d3noob.org/2013/01/adding-drop-shadow-to-allow-text-to.html*/
text.shadow {
stroke: gray;
stroke-width: 1px;
opacity: 0.9;
}
/* D3 tips */
.d3-tip {
line-height: 1;
font-weight: bold;
padding: 12px;
background: rgba(0, 0, 0, 0.8);
color: #fff;
border-radius: 2px;
}
/* Creates a small triangle extender for the tooltip */
/*.d3-tip:after {
box-sizing: border-box;
display: inline;
font-size: 10px;
width: 100%;
line-height: 1;
color: rgba(0, 0, 0, 0.8);
content: "\25BC";
position: absolute;
text-align: center;
}*/
/* Style northward tooltips differently */
.d3-tip.n:after {
margin: -1px 0 0 0;
top: 100%;
left: 0;
}
.stronger {
color: yellow;
}
</style>
<script src="d3.hemicycle.js"></script>
<script src="d3.tip.js"></script>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootswatch/3.2.0/cerulean/bootstrap.min.css">
</head>
<body>
<div id="chart" style="width:400px;margin-left:100px;margin-top:35px;"></div>
<div id="legend" style="width:400px;padding:15px;margin-left:100px;">
<div class="row" style="text-align:center">Legenda:</div>
<div class="row" style="border-bottom:1px solid #ccc;">
<div class="col-xs-2"></div>
<div class="col-xs-5"><i class="fa fa-certificate" style="color:red;font-size:20px;"> </i><strong> PROTI</strong></div>
<div class="col-xs-5"><i class="fa fa-certificate" style="color:green;font-size:20px;"> </i> PRO</div>
</div>
<div class="row" id="legendin">
</div>
</div>
<script type="text/javascript">
d3.csv("single_vote_event.csv",function(error,data) {
/*var json = (function () {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': "./hemicycle.json",
'dataType': "json",
'success': function (data) {
json = data;
}
});
return json;
})();*/
var hemicycle = [{
//"n":[9,13,16,20,23],
"n": [8,11,15,19,22,26,29,33,37],
"gap": 1.20,
"widthIcon": 0.39,
"width": 400,
"people": data
}];
/* Initialize tooltip */
tip = d3.tip().attr("class", "d3-tip").html(function(d) {
foragaints = "Neutrálně (nepřítomen)";
if (parseInt(d["option_code"]) == 1) foragaints = "Pro návrh";
if (parseInt(d["option_code"]) == -1) foragaints = "Proti návrhu";
return "<span class=\'stronger\'>" + d["name"] + "</span><br>" + d["party"] + "<br>" + foragaints;
});
var w=400,h=205,
svg=d3.select("#chart")
.append("svg")
.attr("width",w)
.attr("height",h);
var hc = d3.hemicycle()
.n(function(d) {return d.n;})
.gap(function(d) {return d.gap;})
.widthIcon(function(d) {return d.widthIcon;})
.width(function(d) {return d.width;})
.people(function(d) {return d.people;});
var item = svg.selectAll(".hc")
.data(hemicycle)
.enter()
.append("svg:g")
.call(hc);
/* Invoke the tip in the context of your visualization */
svg.call(tip);
// Add tooltip div
var div = d3.select("body").append("div")
.attr("class", "tooltip")
.style("opacity", 1e-6);
/*inhtml = '';
for (k in data) {
if (k == 12) break;
group = data[k];
if (k % 4 == 0) {
inhtml = inhtml + "<div class='row'>";
}
inhtml = inhtml + '<div class="col-xs-3"><i class="fa fa-user" style="color:' + group['color'] + ';font-size:15px;">&nbsp;</i>' + group["abbreviation"] + "</div> ";
if (k % 4 == 3) {
inhtml = inhtml + "</div>";
}
}
$("#legendin").html(inhtml)*/
})
</script>
</body>
id name party option_code color
5462abe8a87408609940ec8d Miroslava Němcová ODS -1 blue
5462abf5a87408609940efb1 Marek Benda ODS -1 blue
5462abeea87408609940edeb Martin Novotný ODS -1 blue
5462abdfa87408609940ea35 Pavel Blažek ODS -1 blue
5462abf2a87408609940eee5 Radim Holeček ODS -1 blue
5462abe7a87408609940ec2f Jana Fischerová ODS -1 blue
5462abe7a87408609940ec31 Simeon Karamazov ODS -1 blue
5462abf6a87408609940efc3 Petr Fiala ODS -1 blue
5462abf5a87408609940ef7f Ivan Adamec ODS -1 blue
5462abe0a87408609940ea7b Vladislav Vilímec ODS -1 blue
5462abe5a87408609940ebd7 Zbyněk Stanjura ODS -1 blue
5462abeda87408609940edcf Jan Zahradník ODS -1 blue
5462abe6a87408609940ebf5 Jan Volný ANO -1 cyan
5462abfba87408609940f0dd Jaroslav Krákora ČSSD -1 orange
5462abf5a87408609940efad Ladislav Velebný ČSSD -1 orange
5462abe5a87408609940ebd3 Jeroným Tejc ČSSD -1 orange
5462abe5a87408609940ebc1 Markéta Wernerová ČSSD -1 orange
5462abf7a87408609940efef Miroslava Strnadlová ČSSD -1 orange
5462abe0a87408609940ea57 Jiří Koskuba ČSSD -1 orange
5462abe8a87408609940ec77 Jaroslav Zavadil ČSSD -1 orange
5462abe0a87408609940ea9f Stanislav Huml ČSSD -1 orange
5462abdfa87408609940ea07 Josef Novotný ČSSD -1 orange
5462abe4a87408609940eb89 Tomio Okamura Úsvit -1 pink
5462abf6a87408609940efcd Jana Hnyková Úsvit -1 pink
5462abeda87408609940eddf David Kádner Úsvit -1 pink
5462abeca87408609940ed71 Martin Lank Úsvit -1 pink
5462abfaa87408609940f087 Radim Fiala Úsvit -1 pink
5462abeca87408609940ed73 Josef Vondrášek KSČM -1 red
5462abeba87408609940ed69 Miroslav Opálka KSČM -1 red
5462abe9a87408609940eca1 Milada Halíková KSČM -1 red
5462abf2a87408609940ef0b Jiří Dolejš KSČM -1 red
5462abeea87408609940ede9 Marie Pěnčíková KSČM -1 red
5462abf3a87408609940ef43 Jan Klán KSČM -1 red
5462abe3a87408609940eb6f Vladimír Koníček KSČM -1 red
5462abf8a87408609940f01f Karel Šidlo KSČM -1 red
5462abf7a87408609940f007 Vojtěch Filip KSČM -1 red
5462abe2a87408609940eaf7 Marta Semelová KSČM -1 red
5462abf3a87408609940ef19 Zdeněk Ondráček KSČM -1 red
5462abf0a87408609940ee75 Soňa Marková KSČM -1 red
5462abf3a87408609940ef33 René Číp KSČM -1 red
5462abe2a87408609940eb33 Ivo Pojezný KSČM -1 red
5462abdfa87408609940ea4f Květa Matušovská KSČM -1 red
5462abeaa87408609940ed25 Stanislav Grospič KSČM -1 red
5462abeaa87408609940eceb Gabriela Hubáčková KSČM -1 red
5462abe0a87408609940ea79 Zuzka Bebarová-Rujbrová KSČM -1 red
5462abfaa87408609940f08f Jaroslav Borka KSČM -1 red
5462abe4a87408609940eb99 Josef Zahradníček KSČM -1 red
5462abf6a87408609940efd1 Pavel Kováčik KSČM -1 red
5462abe7a87408609940ec59 Miloslava Vostrá KSČM -1 red
5462abe9a87408609940ecb7 Alena Nohavová KSČM -1 red
5462abe1a87408609940eadb Stanislav Mackovík KSČM -1 red
5462abe7a87408609940ec43 Leo Luzar KSČM -1 red
5462abeca87408609940ed75 Josef Šenfeld KSČM -1 red
5462abe2a87408609940eb0f Jiří Valenta KSČM -1 red
5462abe2a87408609940eb27 Alexander Černý KSČM -1 red
5462abfaa87408609940f0a7 Jiří Koubek TOP 09 -1 darkviolet
5462abe2a87408609940eafd Bohuslav Svoboda ODS 0 blue
5462abf8a87408609940f02b Petr Bendl ODS 0 blue
5462abeea87408609940edf1 Jana Černochová ODS 0 blue
5462abe5a87408609940ebbd Adolf Beznoska ODS 0 blue
5462abe8a87408609940ec89 Jan Sedláček ANO 0 cyan
5462abe2a87408609940eb23 Věra Jourová ANO 0 cyan
5462abe0a87408609940ea95 Ivan Pilný ANO 0 cyan
5462abe7a87408609940ec5b Radka Maxová ANO 0 cyan
5462abf4a87408609940ef6b Pavel Čihák ANO 0 cyan
5462abdfa87408609940ea1b Helena Válková ANO 0 cyan
5462abf2a87408609940eee7 Jiří Holeček ANO 0 cyan
5462abf3a87408609940ef27 Josef Vozdecký ANO 0 cyan
5462abeca87408609940ed6b Matěj Fichtner ANO 0 cyan
5462abeba87408609940ed2f Andrej Babiš ANO 0 cyan
5462abf0a87408609940ee93 Stanislav Berkovec ANO 0 cyan
5462abf7a87408609940f005 Martina Berdychová ANO 0 cyan
5462abeaa87408609940ed19 Jiří Zlatuška ANO 0 cyan
5462abf1a87408609940eead Milan Chovanec ČSSD 0 orange
5462abf7a87408609940f00b Štěpán Stupčuk ČSSD 0 orange
5462abdfa87408609940ea37 Ladislav Šincl ČSSD 0 orange
5462abe2a87408609940eb11 Vlastimil Gabrhel ČSSD 0 orange
5462abf8a87408609940f045 Milan Urban ČSSD 0 orange
5462abe3a87408609940eb49 Jan Mládek ČSSD 0 orange
5462abeca87408609940ed9d Marie Benešová ČSSD 0 orange
5462abf1a87408609940ee9f Pavlína Nytrová ČSSD 0 orange
5462abe6a87408609940ec0f Karel Černý ČSSD 0 orange
5462abe5a87408609940ebc5 Marek Černoch Úsvit 0 pink
5462abeda87408609940edb7 Miroslav Grebeníček KSČM 0 red
5462abe2a87408609940eaf5 Václav Snopek KSČM 0 red
5462abf9a87408609940f081 Josef Nekl KSČM 0 red
5462abf7a87408609940efff Vojtěch Adam KSČM 0 red
5462abeca87408609940ed89 Hana Aulická-Jírovcová KSČM 0 red
5462abeba87408609940ed63 Marek Ženíšek TOP 09 0 darkviolet
5462abf4a87408609940ef6f František Vácha TOP 09 0 darkviolet
5462abe9a87408609940eccd Daniel Korte TOP 09 0 darkviolet
5462abe8a87408609940ec95 Karel Tureček TOP 09 0 darkviolet
5462abe3a87408609940eb4f Jan Farský TOP 09 0 darkviolet
5462abe7a87408609940ec57 Herbert Pavera TOP 09 0 darkviolet
5462abf3a87408609940ef31 Jiří Skalický TOP 09 0 darkviolet
5462abf9a87408609940f067 Miroslav Kalousek TOP 09 0 darkviolet
5462abe6a87408609940ebe9 Petr Gazdík TOP 09 0 darkviolet
5462abe6a87408609940ebf7 Marian Jurečka KDU-ČSL 0 yellow
5462abe8a87408609940ec71 Pavel Bělobrádek KDU-ČSL 0 yellow
5462abf4a87408609940ef51 Margita Balaštíková ANO 1 cyan
5462abdfa87408609940ea1f Roman Kubíček ANO 1 cyan
5462abeca87408609940ed6d Jana Pastuchová ANO 1 cyan
5462abdfa87408609940ea4b Jaroslava Jermanová ANO 1 cyan
5462abf0a87408609940ee91 Igor Nykl ANO 1 cyan
5462abf2a87408609940ef03 Martin Stropnický ANO 1 cyan
5462abf6a87408609940efb7 Martin Kolovratník ANO 1 cyan
5462abe9a87408609940ecc1 Jana Lorencová ANO 1 cyan
5462abeca87408609940ed7d Bohuslav Chalupa ANO 1 cyan
5462abf1a87408609940eecf Ivana Dobešová ANO 1 cyan
5462abe7a87408609940ec35 Josef Hájek ANO 1 cyan
5462abe9a87408609940eccb Roman Procházka ANO 1 cyan
5462abf0a87408609940ee85 Rostislav Vyzula ANO 1 cyan
5462abf6a87408609940efd7 Ladislav Okleštěk ANO 1 cyan
5462abefa87408609940ee33 Richard Brabec ANO 1 cyan
5462abe1a87408609940eabd Kristýna Zelienková ANO 1 cyan
5462abe8a87408609940ec9b Zdeněk Soukup ANO 1 cyan
5462abeaa87408609940ecfd Karel Rais ANO 1 cyan
5462abeca87408609940ed91 Pavel Šrámek ANO 1 cyan
5462abf2a87408609940ef01 Miloslav Janulík ANO 1 cyan
5462abf8a87408609940f02f Josef Kott ANO 1 cyan
5462abf8a87408609940f043 Vlastimil Vozka ANO 1 cyan
5462abf8a87408609940f04d Jaroslav Faltýnek ANO 1 cyan
5462abeaa87408609940ecf1 Bronislav Schwarz ANO 1 cyan
5462abeda87408609940ede5 David Kasal ANO 1 cyan
5462abeba87408609940ed41 Stanislav Pfléger ANO 1 cyan
5462abe5a87408609940ebab Pavel Volčík ANO 1 cyan
5462abe9a87408609940ecd1 Radek Vondráček ANO 1 cyan
5462abeea87408609940eded Milan Brázdil ANO 1 cyan
5462abe5a87408609940ebd9 Miloš Babiš ANO 1 cyan
5462abe6a87408609940ec03 Martin Sedlář ANO 1 cyan
5462abfaa87408609940f0a9 Martin Komárek ANO 1 cyan
5462abe9a87408609940ecb3 Pavel Plzák ANO 1 cyan
5462abe4a87408609940eb7b František Adámek ČSSD 1 orange
5462abeea87408609940ee13 Petr Kořenek ČSSD 1 orange
5462abe4a87408609940eb81 Dana Váhalová ČSSD 1 orange
5462abefa87408609940ee27 Vítězslav Jandák ČSSD 1 orange
5462abf7a87408609940effd Roman Váňa ČSSD 1 orange
5462abe6a87408609940ec01 Adam Rykala ČSSD 1 orange
5462abe7a87408609940ec39 Richard Dolejš ČSSD 1 orange
5462abf4a87408609940ef4b Václav Zemek ČSSD 1 orange
5462abeba87408609940ed2d Václav Klučka ČSSD 1 orange
5462abf2a87408609940eeeb Lubomír Toufar ČSSD 1 orange
5462abe1a87408609940eaeb Pavel Holík ČSSD 1 orange
5462abefa87408609940ee49 Pavel Antonín ČSSD 1 orange
5462abe4a87408609940eb9f Zuzana Kailová ČSSD 1 orange
5462abeaa87408609940ecfb Jan Chvojka ČSSD 1 orange
5462abe0a87408609940ea93 Roman Sklenák ČSSD 1 orange
5462abe4a87408609940eb83 Jiří Zemánek ČSSD 1 orange
5462abe0a87408609940ea91 Jaroslav Foldyna ČSSD 1 orange
5462abeaa87408609940ed0f Vlasta Bohdalová ČSSD 1 orange
5462abe4a87408609940eb87 Bohuslav Sobotka ČSSD 1 orange
5462abeaa87408609940ed21 Zdeněk Syblík ČSSD 1 orange
5462abf9a87408609940f077 Jan Hamáček ČSSD 1 orange
5462abe3a87408609940eb47 Antonín Seďa ČSSD 1 orange
5462abf2a87408609940eee3 Pavel Havíř ČSSD 1 orange
5462abf3a87408609940ef1b Lubomír Zaorálek ČSSD 1 orange
5462abf9a87408609940f069 Pavel Ploc ČSSD 1 orange
5462abf6a87408609940efdb Jiří Petrů ČSSD 1 orange
5462abf0a87408609940ee8b Igor Jakubčík ČSSD 1 orange
5462abdfa87408609940ea2d Robin Böhnisch ČSSD 1 orange
5462abe9a87408609940ecbd Václav Votava ČSSD 1 orange
5462abe5a87408609940ebb5 Jiří Běhounek ČSSD 1 orange
5462abf1a87408609940eea7 Lukáš Pleticha ČSSD 1 orange
5462abe7a87408609940ec33 Jan Birke ČSSD 1 orange
5462abe9a87408609940ecb1 Petr Adam Úsvit 1 pink
5462abe5a87408609940ebad Karel Fiedler Úsvit 1 pink
5462abe5a87408609940ebb3 Augustin Karel Andrle Sylor Úsvit 1 pink
5462abe6a87408609940ec07 Olga Havlová Úsvit 1 pink
5462abf8a87408609940f02d Jiří Štětina Úsvit 1 pink
5462abeba87408609940ed43 Karel Pražák Úsvit 1 pink
5462abf0a87408609940ee63 Jaroslav Holík Úsvit 1 pink
5462abe3a87408609940eb73 Milan Šarapatka Úsvit 1 pink
5462abf4a87408609940ef45 Michal Kučera TOP 09 1 darkviolet
5462abfba87408609940f0db Věra Kovářová TOP 09 1 darkviolet
5462abeea87408609940ee03 Jitka Chalánková TOP 09 1 darkviolet
5462abf4a87408609940ef5d Jaroslav Lobkowicz TOP 09 1 darkviolet
5462abf3a87408609940ef11 Leoš Heger TOP 09 1 darkviolet
5462abf1a87408609940ee9d Helena Langšádlová TOP 09 1 darkviolet
5462abe8a87408609940ec73 Martin Plíšek TOP 09 1 darkviolet
5462abe6a87408609940ec05 František Laudát TOP 09 1 darkviolet
5462abf9a87408609940f071 Anna Putnová TOP 09 1 darkviolet
5462abe7a87408609940ec19 Markéta Adamová TOP 09 1 darkviolet
5462abfba87408609940f0cf Václav Horáček TOP 09 1 darkviolet
5462abe1a87408609940eabb Rom Kostřica TOP 09 1 darkviolet
5462abf6a87408609940efc7 Zdeněk Bezecný TOP 09 1 darkviolet
5462abeba87408609940ed4b Gabriela Pecková TOP 09 1 darkviolet
5462abeda87408609940edd3 Nina Nováková TOP 09 1 darkviolet
5462abf0a87408609940ee7d Karel Schwarzenberg TOP 09 1 darkviolet
5462abfaa87408609940f0a5 Josef Uhlík KDU-ČSL 1 yellow
5462abe1a87408609940eab5 Jaroslav Klaška KDU-ČSL 1 yellow
5462abf6a87408609940efe9 Ivan Gabal KDU-ČSL 1 yellow
5462abe1a87408609940eae7 Ondřej Benešík KDU-ČSL 1 yellow
5462abefa87408609940ee37 Jan Bartošek KDU-ČSL 1 yellow
5462abe5a87408609940ebdb Tomáš Jan Podivínský KDU-ČSL 1 yellow
5462abeda87408609940edc5 Daniel Herman KDU-ČSL 1 yellow
5462abe8a87408609940ec99 Jiří Mihola KDU-ČSL 1 yellow
5462abf0a87408609940ee6f Vít Kaňkovský KDU-ČSL 1 yellow
5462abf1a87408609940eeb1 Jiří Junek KDU-ČSL 1 yellow
5462abf8a87408609940f049 Petr Kudela KDU-ČSL 1 yellow
5462abefa87408609940ee61 Ludvík Hovorka KDU-ČSL 1 yellow
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment