%= javascript begin function show_bargraph(datasource, title, xlab, ylab) { var margin = {top: 40, right: 20, bottom: 30, left: 40}, width = 960 - margin.left - margin.right, height = 500 - margin.top - margin.bottom; var formatPercent = d3.format(".0%"); var x = d3.scale.ordinal() .rangeRoundBands([0, width], .1); var y = d3.scale.linear() .range([height, 0]); var xAxis = d3.svg.axis() .scale(x) .orient("bottom"); var yAxis = d3.svg.axis() .scale(y) .orient("left"); // .tickFormat(formatPercent); var tip = d3.tip() .attr('class', 'd3-tip') .offset([-10, 0]) .html(function(d) { return "Frequency: " + d.y + ""; }) var svg = d3.select("body").append("svg") .attr("width", width + margin.left + margin.right) .attr("height", height + margin.top + margin.bottom) .append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); svg.call(tip); d3.tsv(datasource, type, function(error, data) { if (error) console.warn(error); x.domain(data.map(function(d) { return d.x; })); y.domain([0, d3.max(data, function(d) { return d.y; })]); svg.append("g") .attr("class", "x axis") .attr("transform", "translate(0," + height + ")") .call(xAxis) .append("text") .attr("x", width / 2) .attr("y", 30) .style("text-anchor", "middle") .text(xlab); svg.append("g") .attr("class", "y axis") .call(yAxis) .append("text") .attr("transform", "rotate(-90)") .attr("y", 6) .attr("dy", ".71em") .style("text-anchor", "end") .text(ylab); svg.append("text") .attr("x", (width / 2)) .attr("y", 0 - (margin.top / 2)) .attr("text-anchor", "middle") .style("font-size", "16px") .style("text-decoration", "underline") .text(title); svg.selectAll(".bar") .data(data) .enter().append("rect") .attr("class", "bar") .attr("x", function(d) { return x(d.x); }) .attr("width", x.rangeBand()) .attr("y", function(d) { return y(d.y); }) .attr("height", function(d) { return height - y(d.y); }) .on('mouseover', tip.show) .on('mouseout', tip.hide) }); function type(d) { d.y = +d.y; return d; } } show_bargraph('/2ddata.tsv?aggregate=hour&metric=delay', 'Durchschnittliche Verspätung nach Uhrzeit', 'Angebrochene Stunde', 'Minuten'); show_bargraph('/2ddata.tsv?aggregate=hour&metric=cancel_percent', 'Anteil Zugausfälle nach Uhrzeit', 'Angebrochene Stunde', 'Ausfälle [%]'); show_bargraph('/2ddata.tsv?aggregate=weekday&metric=delay', 'Durchschnittliche Verspätung nach Wochentag', 'Wochentag', 'Minuten'); show_bargraph('/2ddata.tsv?aggregate=weekday&metric=cancel_percent', 'Anteil Zugausfälle nach Wochentag', 'Wochentag', 'Ausfälle [%]'); show_bargraph('/2ddata.tsv?aggregate=weekhour&metric=delay', 'Durchschnittliche Verspätung nach Wochentag und Uhrzeit', 'Tag/Stunde', 'Minuten'); msglist = [[2, 'Polizeiliche Ermittlung'], [3, 'Feuerwehreinsatz neben der Strecke'], [5, 'Aerztliche Versorgung eines Fahrgastes'], [6, 'Betaetigen der Notbremse'], [7, 'Personen im Gleis'], [8, 'Notarzteinsatz am Gleis'], [9, 'Streikauswirkungen'], [10, 'Ausgebrochene Tiere im Gleis'], [11, 'Unwetter'], [13, 'Pass- und Zollkontrolle'], [15, 'Beeintraechtigung durch Vandalismus'], [16, 'Entschaerfung einer Fliegerbombe'], [17, 'Beschaedigung einer Bruecke'], [18, 'Umgestuerzter Baum im Gleis'], [19, 'Unfall an einem Bahnuebergang'], [20, 'Tiere im Gleis'], [21, 'Warten auf weitere Reisende'], [22, 'Witterungsbedingte Stoerung'], [23, 'Feuerwehreinsatz auf Bahngelaende'], [24, 'Verspaetung aus dem Ausland'], [25, 'Warten auf verspaetete Zugteile'], [28, 'Gegenstaende im Gleis'], [31, 'Bauarbeiten'], [32, 'Verzoegerung beim Ein-/Ausstieg'], [33, 'Oberleitungsstoerung'], [34, 'Signalstoerung'], [35, 'Streckensperrung'], [36, 'Technische Stoerung am Zug'], [38, 'Technische Stoerung an der Strecke'], [39, 'Anhaengen von zusaetzlichen Wagen'], [40, 'Stellwerksstoerung/-ausfall'], [41, 'Stoerung an einem Bahnuebergang'], [42, 'Ausserplanmaessige Geschwindigkeitsbeschraenkung'], [43, 'Verspaetung eines vorausfahrenden Zuges'], [44, 'Warten auf einen entgegenkommenden Zug'], [45, 'Ueberholung durch anderen Zug'], [46, 'Warten auf freie Einfahrt'], [47, 'Verspaetete Bereitstellung'], [48, 'Verspaetung aus vorheriger Fahrt'], [55, 'Technische Stoerung an einem anderen Zug'], [56, 'Warten auf Fahrgaeste aus einem Bus'], [57, 'Zusaetzlicher Halt'], [58, 'Umleitung'], [59, 'Schnee und Eis'], [60, 'Reduzierte Geschwindigkeit wegen Sturm'], [61, 'Tuerstoerung']]; for (msg in msglist) { show_bargraph('/2ddata.tsv?aggregate=hour&metric=message_percent&msgnum=' + msg[0], 'Anteil "'+msg[1]+'"', 'Angebrochene Stunde', '%'); show_bargraph('/2ddata.tsv?aggregate=weekday&metric=message_percent&msgnum=' + msg[0], 'Anteil "'+msg[1]+'"', 'Wochentag', '%'); } show_bargraph('/2ddata.tsv?aggregate=hour&metric=message_percent&msgnum=80', 'Anteil "Abweichende Wagenreihung"', 'Angebrochene Stunde', '%'); show_bargraph('/2ddata.tsv?aggregate=weekday&metric=message_percent&msgnum=80', 'Anteil "Abweichende Wagenreihung"', 'Wochentag', '%'); show_bargraph('/2ddata.tsv?aggregate=hour&metric=message_percent&msgnum=85', 'Anteil "Ein Wagen fehlt"', 'Angebrochene Stunde', '%'); show_bargraph('/2ddata.tsv?aggregate=weekday&metric=message_percent&msgnum=85', 'Anteil "Ein Wagen fehlt"', 'Wochentag', '%'); % end
Insgesamt: <%= stash('num_departures') %> Züge.